Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教师傅几个fastjson漏洞问题 #2

Open
s1g0day opened this issue Dec 16, 2021 · 2 comments
Open

请教师傅几个fastjson漏洞问题 #2

s1g0day opened this issue Dec 16, 2021 · 2 comments

Comments

@s1g0day
Copy link

s1g0day commented Dec 16, 2021

拜读了师傅的【Fastjson姿势技巧集合】,收获良多。因为是刚开始研究fastjson漏洞,很多内容目前还看不懂,但利用方法真的很实用。目前遇到了一个实际环境,引发了一系列的问题,其中几个属于经验性质的,所以想请教一下师傅。

1、我在实际环境中检测fastjson版本时发现 在fastjson >1.2.68大部分都能通过DNSlog回显,是不是这样就判断出fastjson的版本大于 1.2.68而非小于等于1.2.68
{"@type":"java.net.Inet4Address","val":"dnslog"} NO {"@type":"java.net.Inet6Address","val":"dnslog"} NO {{"@type":"java.net.URL","val":"dnslog"}:"aaa"} YES {"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"http://dnslog"}}""} YES Set[{"@type":"java.net.URL","val":"http://dnslog"}] YES Set[{"@type":"java.net.URL","val":"http://dnslog"} YES {"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}} NO {{"@type":"java.net.URL","val":"http://dnslog"}:0 YES
这些判断方法是否可以进行通用型判断?
比如 fastjson >1.2.43 判断版本的方法只有两条,在fastjson >1.2.68中8条判断方法。
我的理解:判断fastjson >1.2.68的方法就是至少有三条poc能用,那么fastjson 版本就是大于1.2.68;如果只有fastjson >1.2.43的那两条可以用,那么fastjson 版本就是大于1.2.43

2、在后面的利用中没有找到大于1.2.68的利用方法,并且通过搜索引擎并未相应的例子,是不是 fastjson > 1.2.68 不存在漏洞,那上面检测fastjson的版本 > 1.2.68 的作用是什么?用于判断是否放弃这个漏洞的利用?

3、因为刚开始研究fastjson,对出不出网很迷,该如何利用fastjson漏洞判断出不出网?
在网上发现一篇【fastjson 不出网利用总结】的文章,我理解的就是先通过dnslog能够正常获取IP,然后在利用过程发现rmi能获取请求但http服务无请求,即为fastjson不出网的情况。是否只有这一种判断方法?

@safe6Sec
Copy link
Owner

拜读了师傅的【Fastjson姿势技巧集合】,收获良多。因为是刚开始研究fastjson漏洞,很多内容目前还看不懂,但利用方法真的很实用。目前遇到了一个实际环境,引发了一系列的问题,其中几个属于经验性质的,所以想请教一下师傅。

1、我在实际环境中检测fastjson版本时发现 在fastjson >1.2.68大部分都能通过DNSlog回显,是不是这样就判断出fastjson的版本大于 1.2.68而非小于等于1.2.68 {"@type":"java.net.Inet4Address","val":"dnslog"} NO {"@type":"java.net.Inet6Address","val":"dnslog"} NO {{"@type":"java.net.URL","val":"dnslog"}:"aaa"} YES {"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"http://dnslog"}}""} YES Set[{"@type":"java.net.URL","val":"http://dnslog"}] YES Set[{"@type":"java.net.URL","val":"http://dnslog"} YES {"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}} NO {{"@type":"java.net.URL","val":"http://dnslog"}:0 YES 这些判断方法是否可以进行通用型判断? 比如 fastjson >1.2.43 判断版本的方法只有两条,在fastjson >1.2.68中8条判断方法。 我的理解:判断fastjson >1.2.68的方法就是至少有三条poc能用,那么fastjson 版本就是大于1.2.68;如果只有fastjson >1.2.43的那两条可以用,那么fastjson 版本就是大于1.2.43

2、在后面的利用中没有找到大于1.2.68的利用方法,并且通过搜索引擎并未相应的例子,是不是 fastjson > 1.2.68 不存在漏洞,那上面检测fastjson的版本 > 1.2.68 的作用是什么?用于判断是否放弃这个漏洞的利用?

3、因为刚开始研究fastjson,对出不出网很迷,该如何利用fastjson漏洞判断出不出网? 在网上发现一篇【fastjson 不出网利用总结】的文章,我理解的就是先通过dnslog能够正常获取IP,然后在利用过程发现rmi能获取请求但http服务无请求,即为fastjson不出网的情况。是否只有这一种判断方法?

这个项目是我之前学习,随便记的一点笔记。有很多细节已经记不得了。简单回答一下吧。

  1. 版本判断不是百分百准确,我也只试过几个关键版本,只能当个参考。主要就是利用各个类被加入黑名单的方式进行判断的。如不了解黑名单是什么,自行了解。
  2. 不出网就是目标机器不出网。不止fastjson,别的漏洞也会遇到。既然不出网,dnslog肯定是收不到的,可用bcel来打。bcel也需要注意版本,高版本被移除了。

@s1g0day
Copy link
Author

s1g0day commented Dec 18, 2021

嗯嗯,谢谢师傅解惑

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants