搜索
    Hi~登录注册
    查看: 511|回复: 0
    收起左侧

    【转】团队老油条总结的java代码审计之路

    [复制链接]

    88

    主题

    0

    精华

    192 小时

    在线时间

    密圈

    积分
    71
    发表于 2022-6-6 17:19:30 | 显示全部楼层 |阅读模式

    本帖最后由 h88z 于 2022-6-6 05:33 PM 编辑

    本帖最后由 h88z 于 2022-6-6 05:32 PM 编辑

    本帖最后由 h88z 于 2022-6-6 05:21 PM 编辑

    一、前言

    首先,本文不是技术文章,主要给出大家java代码审计学习方向的资料、资源推荐,如何从小白一点一点成长。因为最近好多人私信我,怎么去学java代码审计,这里尽量把小白刚入门存在的问题给解答出来,没有考虑到的,可以评论区讨论。这也算是我的成长之路吧。

    二、初级

    首先,对于没有代码审计经验的,可以先从php代码审计入手,了解php语言特性,既然都在t00ls混了,大家肯定都会利用web常见漏洞:参考链接1,有了这个基础之后,可以尝试挖掘一些CMS或者框架的漏洞,php了解全面了,就可以从java入手,作为一个合格的安全工程师,代码审计应该是每个人都需要掌握的。

    1、java环境搭建 ,很多人即使有了java基础,在java 调试环境上还是不了解,这里极力推荐用IDEA作为IDE,了解一下IDEA快捷键有哪些,总结一下我用的最多快捷键:

    F7步入|F8步过|F9到下一个断点|ALT+F8评估表达式|Ctrl+F 文件内查找字符串|双击Shift 查找任何内容,可搜索类、资源、配置项、方法等,还能搜索路径|Ctrl + N 按类名搜索类|Ctrl + F12 查看当前类结构|Ctrl + H 查看类的层次关系|Alt + F7 查找类或方法在哪被使用

    查看一下继承关系,这也常用。剩下的参考这里

    [email]WX20220531-215103@2x.png[/email]

    [email]WX20220606-172327@2x.png[/email]

    知道IDEA怎么使用时候,就要学debug本地调试和远程调试,目前审一些cms、框架需要本地调试漏洞,本地调试有些CMS是maven开发的导入到IDEA就能运行,一般CMS怎么本地调试都有文档。一些web服务器、中间件需要远程调试,比如weblogic、tomcat、confluence和jboss,远程调试参考这篇文章

    2、java基础学习 ,推荐去慕课网上学习,这里比较重要的把java反射机制、JAVA动态代理机制 、java设计模式 多花点功夫,下面给出我之前学的视频:

    [email]WX20220531-220329@2x.png[/email]

    3、java框架学习 因为只有有正向开发的基础,才能审计基于java的CMS,我这里主要看了Struts2和SpringMVC的资料,知道了java web是怎么开发的,后面又学习了mybatis和Hibernate ORM框架,紧接着就是学习SSH和SSM是如何整合的。

    [email]WX20220531-220445@2x.png[/email]

    4、java CMS代码审计 ,有了正向开发基础后,有php审计的经验,在学习点java安全的trick ,审计这些CMS就不是难事了,在渗透过程中,遇到源码泄露,自己也有能力去挖掘,下面给出我之前看过的案例分享。

    CMS审计文章1

    CMS审计文章2

    CMS审计文章3

    CMS审计文章4

    javasec项目

    极力推荐园长写的文章

    orich1师傅的文章

    大家也可看看看jkgh006写的文章,还有凌天实验室最近一直更java审计的文章。

    三、进阶

    上面讲的大部分都是初级的知识,漏洞类型跟常见的web漏洞一样了。下面可能涉及weblogic、spring、fastjson、jackson、solr、jboss、tomcat、struts2....这些web服务器、中间件、框架、类库的安全,这些大型的框架首先要确定漏洞类型有哪些,我简单总结一下:1、反序列化漏洞。2、表达式注入。3、JNDI注入。4、XXE、SSRF。5、协议漏洞(tomcat ajp、jmx协议等。6、逻辑漏洞(框架的一些目录变量、文件上传、任意文件删除、SSTI等)。了解完漏洞类型,要知道这些大的服务器代码量是很大的,前面基础中的设计模式的知识就体现出来了,所以要把前面基础打好。 这里进阶的重头戏来了,java反序列化 。 java反序列化,推荐学习路线, 首先我是从ysoserial简单的gadget看起的,新手可以看看下面我圈出来的gadget是这么构造出来的,自己debug一下,目前网上都有很多文章都有POC,这里就不给出了。

    [email]WX20220606-172850@2x.png[/email]

    新手尤其不建议直接研究JDK7u21,底层jdk的gadget,里面涉及到的知识量太大了,以后一点点逐步的把ysoserial中的gadget都搞懂,还有marshalsec的gadget,还有提醒一下反序列化不只是有RCE。像反序列化后的Fileupload(FileUpload1 gadgets)、xxe都是有可能的。 进阶我简单分为下面三个阶段,最简单的就是复现漏洞,有已知的POC,去理解漏洞成因,去debug一下。

    1、复现漏洞

    2、根据漏洞描述、patch能构造出poc

    3、自动化工具或者审计,独立的挖掘漏洞

    有了反序列化知识以后,可以先从fastjson入手复现漏洞,涉及到文章2时,又涉及到rmi的知识(内容自行查找),资料如下:

    1、fastjson反序列化TemplatesImpl

    2、fastjson反序列化JdbcRowSetImpl

    3、fastjson反序列化之Jackson-databind(CVE-2017-17485)

    4、廖师傅写的文章

    5、fastjson反序列化PoC汇总,含bcel触发的

    当把fastjson所有漏洞都调试一遍,这时候在看jackson、XStream、yaml的漏洞就不难了,把gadget理解的很透彻,在出的很多新洞时,会发现大部分都是老洞新用,可能是几个gadget组合着打。接下来,可以入手复现一下web服务器的反序列化漏洞,这里推荐先从weblogic开始学习,我是基本把所有weblogic的漏洞都复现一遍,还有说一下调试服务器就需要远程debug了,学习资料如下:

    1、weblogic之CVE-2016-0638反序列化分析

    2、weblogic之CVE-2016-3510反序列化分析

    3、weblogic之XMLDecoder RCE CVE-2017-10271

    4、weblogic之CVE-2017-3248,CVE-2018-2628,CVE-2018-2893,CVE-2018-3245反序列绕过分析

    5、weblogic之CVE-2018-3191漏洞分析

    6、 webLogic CVE-2019-2647 反序列化XXE POC构造

    7、welogic之CVE-2019-2725分析

    8、CVE-2019-2725反序列化漏洞补丁绕过分析

    9、教你一步一步构造CVE-2020-2555 POC

    提醒一点,上面一个漏洞的POC可能不只有一种(比如2019-2725)尽量把所有POC都调试或者构造出来,上面都是当时学习时,做的一点笔记,有很多疏漏,还请师傅们多担待。 有了以上基础,也就是第一个步骤:复现漏洞能力。接着入手一些框架的Stucts2 OGNL表达式注入复现Spring Boot Actuator via jolokia 等案例,后面就是有java漏洞就跟。 当复现漏洞越多时,可以开始尝试根据漏洞描述、patch能构造出poc的能力

    四、高级

    到这个阶段基本把所有国内java安全的文章能搞懂过一遍,去推特上关注一些国外大佬的文章,blackhat议题等,再进一步了解JDK底层的安全机制(JEP 290等),RASP技术等。再次进阶就可以自动化工具或者审计,独立的挖掘漏洞。 比如读一下gadgetinspector工具实现的源码:threedr3am师傅的文章使用codeql挖掘fastjson利用链抽象语法树分析寻找FastJSON的Gadgets等文章。接下来就是教大家如何从事安全研究工作,这也是我在湛卢实验室实习跟小伙伴学到的。 选择研究对象,比如我擅长web服务、框架漏洞挖掘,首先 需要总结TOP 10服务器有哪些,第二步 去漏洞公告中,总结近10年所有CVE漏洞,如下格式整理,漏洞描述、漏洞模块、漏洞成因、漏洞影响范围和参考链接。

    [email]WX20220606-172939@2x.png[/email]

    总结完成后,向IIS比较老的服务器。看漏洞成因能看出安全研究员研究方向的转变,这时候,可以选择擅长的领域,向一些比较新的产品往往很可能出现问题。我这里就以weblogic为例,说一下我的研究思路。还是总结weblogic历史漏洞,从漏洞类型上看,T3反序列化漏洞最多,但是要挖掘新的gadget,研究时间就可能比较长。第二个是从协议层面上挖掘,这就需要看weblogic的手册内容,我选择了审计基于RMI的JMX服务,weblogic默认会注册一些MBean,如果这些MBean中存在危险代码,外部还可以访问,第一个思路就是审计weblogic中默认注册的MBean中的代码,是否存在危险代码,然而,实际问题来了想操纵MBean,前提需要知道管理员的用户名和密码,即使RCE危害也不大,这条路就放弃了,第二个思路就是rmi-iiop协议,当时看blackhat议题,提到了这个,当时,只是在weblogic实现了rmi-iiop的demo,没深入研究下去,后来就有人在这里爆洞了(菜是原罪)。当时爆出反序列化XXE的CVE:CVE-2019-2647、CVE-2019-2648、CVE-2019-2649、CVE-2019-2650 比较多,直觉感觉应该还有遗漏的XXE。后来就写了个正则的扫描的工具,搞到EJBTaglibDescriptor这个类和一处比较鸡肋的XXE,后来我又去审计weblogic http协议的内容,找到一个XXE和一处SSRF。当时因为没打最新补丁,打了补丁后发现XXE已经被修补了。那处SSRF在debug版本存在。 下面是XXE的位置,貌似没看到过有这个漏洞的分析文章,但是查cnvd,2018年有人就提交了。

    [email]WX20220606-173017@2x.png[/email]

    [email]WX20220606-173138@2x.png[/email]

    后来准备毕业的一些事情,上面也就是我当时研究的整个思路,挺感谢ADlab的哥和姐,在那里学到不少渗透、审计的知识。

    五、总结

    嘱咐大家纸上得来终觉浅,所有案例都要调试一遍,调试的内容一定要有个笔记,记录自己的学习过程,有不懂的回来再看或者请教其他师傅。最后,整就牛,OVER!

    最后推荐以下java安全学习的博客: lucifaer师傅 c0d3p1ut0s师傅 ruilin师傅 b1ngz师傅 r4v3zn师傅 l1nk3r师傅 tomato师傅 bit4师傅 threedr3am师傅 angelwhu师傅 李三师傅 lufei师傅 kingkk师傅 四哥的博客 随风师傅 园长的博客

    JAVA安全的文章:https://pan.baidu.com/s/1xw2VrusjDZO4iq4dTXosbA 提取码:fhdd

    铁子们,感觉文章对你们有帮助的,麻烦帮忙顶一下帖子,还是新手上路惭愧啊。

    最近一口气连写了几篇研究类的文章,大家慢慢消化,也是我去年暑期的一点总结,发现论坛还是渗透类的文章受欢迎,研究类型的差不少,以后发帖子尽量发渗透结合代码审计、内网、域渗透的文章。

    WX20220531-220338@2x.png
    回复

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 获取账号

    快速回复 返回顶部 返回列表