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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM