【LSP】Java安全之URLDNS链

53423028   ·   发表于 23天前   ·   编程代码

0x01 Java反序列化
Java提供了一种对象序列化的机制,用一个字节序列表示一个对象,该字节包含对象的数据、对象的类型、对象的存储属性。字节序列写出到文件后,相当于可以持久报错了一个对象信息,这过程叫做序列化。序列化对象会通过ObjectOutputStream 的writeObject方法将一个对象写入到文件中。

而反序列化是使用了readObject 方法进行读取并还原成在序列化前的一个类。

这一步骤并没有什么安全问题,但是如果反序列化的数据是可控的情况下,那么我们就可以从某个输入点,输入恶意代码,再去查找在哪个点,我们的输入会被一层一层的带去到我们的触发点去,而这一步叫做寻找利用链的步骤。

1|30x02 动态调试ysoserial
至于ysoserial就不多叙述了,自行百度。

ysoserial项目地址:ysoserial

拉取项目源码,导入到IDEA中。


看到pom.xml知道该项目是个maven的项目,点击pom.xml 进行刷新,将缺少的依赖给下载下来



下载完成,直到不爆红了后,就可以开始调试ysoserial了。

先来查找一下该程序的入口点,点开pom.xml搜索mainclass就可以找到入口点的类


ctrl+左键点击跟踪进去,运行测试一下。



运行发现爆了一些错误,这里是因为我们并没有去传入值。

点击Edit configurations,设置参数

再次运行就可以看到成功执行了。



这样我们就获取到了一个序列化的数据。

我们的ysoserial就能在idea里面去运行了。
20 Reply   |  Until 22天前 | 2070 View

微梦
发表于 23天前

打开ysoserial/payloads/URLDNS.java的源码

评论列表

  • 加载数据中...

编写评论内容

3180386827
发表于 23天前

上面的注释也写明白了他的调用链

具体怎么执行的我们还得去debug看。

评论列表

  • 加载数据中...

编写评论内容

kukugou
发表于 23天前

具体怎么执行的我们还得去debug看。

触发点在hashmap的put方法,我们在put地方打一个断点

评论列表

  • 加载数据中...

编写评论内容

dokevike
发表于 23天前

来到hashmap的readobject中看到

评论列表

  • 加载数据中...

编写评论内容

1649644933
发表于 23天前

这里使用了hash方法对key的值进行了处理,我们来跟踪一下hash这个方法看看他具体的实现

评论列表

  • 加载数据中...

编写评论内容

kukugou
发表于 23天前

调用 URLStreamHandler 的hashcode。进行跟踪URLStreamHandler.hashcode。

评论列表

  • 加载数据中...

编写评论内容

北巷流诗
发表于 23天前

跟进一下getProtocol方法

评论列表

  • 加载数据中...

编写评论内容

小新
发表于 23天前

在jdk的api文档里面写着该方法是用来获取协议的名称的

评论列表

  • 加载数据中...

编写评论内容

xiaoxiao
发表于 23天前

回到刚刚的地方

评论列表

  • 加载数据中...

编写评论内容

13824879591
发表于 23天前

再来跟踪一下getHostAddress

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content