0x01 前言

这个技巧感觉挺有意思,还是在微信群里的赛博回忆录,讨论的时候看到的一篇文章
image.png
image.png
接着和钧钧讨论的时候发现作者是这样玩的

感觉挺有趣,深深的破坏了我对file://这个协议的看法

以前一直以为只能读文件,没想到在java里面还能读目录,特记录一波

0x02 正文

  1. 平时我对file协议就是读文件
  2. 也就是类似file:///etc/passwd这样
  3. 但是在看那个文章的时候
  4. 看到作者是类似这样玩的file:///etc/
  5. 然后钧和我也试了一下,并且成功把目录列了出来
  1. # 首先我们先看一个例子代码
  2. import java.io.*;
  3. import java.net.URL;
  4. import java.net.URLConnection;
  5. public class test {
  6. public static void main(String[] args) {
  7. try {
  8. // 漏洞利用点
  9. String url = "file:///etc/";
  10. // 实例化url的对象
  11. URL u = new URL(url);
  12. //打开一个URL连接,并运行客户端访问资源。
  13. URLConnection connection = u.openConnection();
  14. connection.connect();
  15. connection.getInputStream();
  16. StringBuilder response = new StringBuilder();
  17. //获取url中的资源
  18. BufferedReader in = new BufferedReader(
  19. new InputStreamReader(connection.getInputStream(), "UTF-8"));
  20. String line;
  21. while ((line = in.readLine()) != null) {
  22. response.append(line + "\n");
  23. }
  24. in.close();
  25. System.out.print(response.toString());
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }

image.png
运行以后可以发现把我电脑的/etc目录列了出来

0x03 debug跟踪

然后就好奇啊,为什么其它的语言不行,java可以所以就想跟一下
image.png
image.png
image.png
image.png
可以清楚的看到,不是ftp的话就进入下面的else所以直接跟进去即可

image.png
image.png

0x04 总结

没事多看看群是有好处的 :)