zoukankan      html  css  js  c++  java
  • java代码审计之路

    一、前言

           首先,本文不是技术文章,主要给出大家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 查找类或方法在哪被使用
    

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

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


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


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


    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,这里就不给出了。Alt text新手尤其不建议直接研究JDK7u21,底层jdk的gadget,里面涉及到的知识量太大了,以后一点点逐步的把ysoserial中的gadget都搞懂,还有marshalse的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、廖师傅写的文章
           当把fastjson所有漏洞都调试一遍,这时候在看jackson、XStream、yaml的漏洞就不难了。接下来,可以入手复现一下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漏洞,如下格式整理,漏洞描述、漏洞模块、漏洞成因、漏洞影响范围和参考链接
    Alt text
           总结完成后,向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年有人就提交了。
    Alt text
    Alt text
           后来准备毕业的一些事情,上面也就是我当时研究的整个思路,挺感谢ADlab的哥和姐的,在那里学到不少渗透、审计的知识。

    五、总结

    最后,嘱咐大家纸上得来终觉浅,所有案例都要调试一遍,整就牛,OVER!

  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/afanti/p/13156152.html
Copyright © 2011-2022 走看看