午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

一文教你學(xué)會(huì)java代碼審計(jì)

 zZ華 2024-06-23 發(fā)布于廣東

一、前置知識(shí)

本文主要講解基礎(chǔ)的代碼審計(jì)思路與方法技巧,適合有一定java基礎(chǔ),無審計(jì)經(jīng)驗(yàn)的同學(xué)學(xué)習(xí)。

二、漏洞挖掘

1、配置信息

先看pom.xml,了解到使用了哪個(gè)依賴庫以及版本,從而可以確定是否存在漏洞。

圖中Shiro<=1.2.4版本,存在shiro550反序列化漏洞,

圖片

圖片

application.yml

該配置文件可能存在數(shù)據(jù)庫或其他組件的連接信息,如數(shù)據(jù)庫連接信息。

圖片

漏洞關(guān)鍵字:Fastjson <=1.2.83 Jackson <=2.9.2 POI < 3.11 DOS XXEShiro <= 1.24 Spring 5.0.x < 5.0.6 1Spring 4.3.x < 4.3.7

2、配置不當(dāng)

2.1swagger接口文檔泄露

圖下的就是將com.sky.controller.admin包下的所有接口掃描成swagger接口調(diào)試文檔。

圖片

這就是訪問swagger調(diào)試文檔訪問地址。

圖片

圖片

在項(xiàng)目審計(jì)中,swagger接口文檔是不應(yīng)該被用戶訪問的,接口文檔可直接就是存在漏洞問題。

搜索關(guān)鍵字:doc.htmlswaggeraddResourceHandlersDocket

2.2 springboot-actuator接口未授權(quán)


這個(gè)配置確實(shí)是將所有 Actuator 端點(diǎn)都暴露出來,包括了 /actuator/* 下的所有端點(diǎn)。這意味著所有的監(jiān)控和管理端點(diǎn)都會(huì)對(duì)外公開,包括健康檢查、信息顯示、配置信息、metrics 等。某些端點(diǎn)可能包含敏感信息,比如 /actuator/env 端點(diǎn)可能會(huì)暴露應(yīng)用程序的環(huán)境變量。

圖片

搜索關(guān)鍵字:management.endpoints.web.exposure.include=*endpoints.env.enabled=trueendpoints.enabled = truemanagementactuator

3.未授權(quán)訪問

3.1過濾器:

該方法判斷了請(qǐng)求url是否包含了/login.html或者register.html,如果包含就放行。

所以我們可以http://127.0.0.1/login.html/../admin/test的方法繞過過濾。

圖片

關(guān)鍵字:doFilterFilter

3.2攔截器:

如果路徑的開頭是以/admin開頭并且Session中的loginUser屬性為 null,就會(huì)判斷是否登錄。

利用:構(gòu)造結(jié)構(gòu)路徑為/;/admin或//admin后訪問(不影響解析),即可繞過登錄限制。

圖片

關(guān)鍵字:InterceptoraddInterceptors

3.3shiro:

在shiro過濾器中對(duì)所有路徑配置了anon匿名攔截器,即不需要認(rèn)證校驗(yàn)。

圖片

關(guān)鍵字:anonauthcshiro

4、SQL注入

現(xiàn)在大部分項(xiàng)目都是基于mybatis操作數(shù)據(jù)庫,不使用預(yù)編譯的情況就可能會(huì)導(dǎo)致sql注入漏洞。

簡單介紹一下預(yù)編譯與拼接:

占位符:#{},預(yù)編譯指的是在執(zhí)行 SQL 語句之前,先將 SQL 語句中的占位符(如 ?)替換為占位符對(duì)應(yīng)的實(shí)際值,然后將這個(gè)已經(jīng)編譯好的 SQL 語句發(fā)送給數(shù)據(jù)庫執(zhí)行。

拼接符:${},可以用來替換 SQL 語句中的任何部分,包括表名、列名、條件等等。在執(zhí)行 SQL 語句之前,MyBatis 會(huì)將 ${} 中的內(nèi)容替換為相應(yīng)的參數(shù)值,然后將得到的 SQL 語句發(fā)送給數(shù)據(jù)庫執(zhí)行。

mybatis中有些地方不能使用預(yù)編譯的,這種場(chǎng)景下就容易出現(xiàn)sql注入漏洞:

    動(dòng)態(tài) SQL 中的表名、列名:如果在動(dòng)態(tài) SQL 中使用 ${} 來表示表名、列名等標(biāo)識(shí)符,因?yàn)檫@些標(biāo)識(shí)符是在 SQL 解析階段確定的,無法使用預(yù)編譯參數(shù)來替換。動(dòng)態(tài) SQL 中的 SQL 語句片段:例如在 <sql> 或 <selectKey> 等元素中使用 ${},這些片段是在 SQL 解析階段確定的,也無法使用預(yù)編譯參數(shù)來替換。動(dòng)態(tài) SQL 中的 ORDER BY 字段:如果在 ORDER BY 子句中使用 ${} 來表示排序字段,因?yàn)榕判蜃侄问窃?SQL 解析階段確定的,同樣無法使用預(yù)編譯參數(shù)來替換。LIKE 操作中的模糊查詢字符串:如果在 LIKE 操作中使用 ${} 來表示模糊查詢的字符串,因?yàn)檫@個(gè)字符串是直接拼接到 SQL 語句中的,不會(huì)被預(yù)編譯。

如圖:模糊查詢處無法直接使用預(yù)編譯,直接使用預(yù)編譯會(huì)報(bào)錯(cuò)。

圖片

安全寫法:使用concat將%%與預(yù)編譯組合起來。

圖片

根據(jù)此處的sql語句,跟進(jìn)查看哪個(gè)函數(shù)調(diào)用了該sql。

圖片

進(jìn)行跟進(jìn)

圖片

發(fā)現(xiàn)了是page調(diào)用了list,而且name可控,繼續(xù)跟進(jìn)是哪個(gè)函數(shù)調(diào)用了page。

圖片

發(fā)現(xiàn)了是controller層的page調(diào)用了,訪問的接口為emps,即http://127.0.0.1/emps,而且name參數(shù)可控。

圖片

漏洞點(diǎn)2:


order by后是無法使用預(yù)編譯的,這種地方也容易存在sql注入。

圖片

通過上面說的方法,一步一步跟,查看是那個(gè)訪問接口調(diào)用了該sql語句(此處省略)

此處asc參數(shù)為漏洞點(diǎn)。

圖片

輸入asc=asc,id,(asc=asc,sql列名),回顯正常。

圖片

輸入asc=asc,xxx,(asc=asc,不存在的sql列名),無回顯數(shù)據(jù)。

圖片

將數(shù)據(jù)包放到sqlmap跑一下

圖片

圖片

5.ssrf

現(xiàn)在大部分java代碼中的ssrf漏洞都不支持偽協(xié)議,基本只能進(jìn)行內(nèi)網(wǎng)探測(cè),危害也相對(duì)較低。


漏洞示例,httpclients:

圖片

這段代碼只支持http請(qǐng)求,無法進(jìn)行偽協(xié)議。

關(guān)鍵字:HttpClientHttpClientsHttpURLConnectionopenConnection
支持偽協(xié)議函數(shù):openConnectionURLConnectionopenStream

6.文件操作類型漏洞

文件操作類型漏洞包括:文件上傳,文件下載,文件讀取,文件刪除等。

漏洞示例:文件名file可控而且沒有對(duì)后綴進(jìn)行過濾,存在文件上傳漏洞,文件操作類型漏洞在白盒中還是挺多的,大多都是文件上傳目錄穿越。

圖片

圖片

關(guān)鍵字:new FileOutputStreamdownloaduploadFile.createTempFiletransferTonew FileInputStreamIOUtils.readFullyIOUtils.writeFileReaderfs.openfile.exists()file.delete()

7.XXE

xxe漏洞現(xiàn)在已經(jīng)不多了,遇到的次數(shù)也很少,一般出現(xiàn)在支持xml文件導(dǎo)入或者csv,xslx文件導(dǎo)入(POI組件)的地方。

漏洞示例:這段代碼讀取xml文件,但沒有明確禁用外部實(shí)體解析,所以存在xxe漏洞。

圖片

修復(fù)方法:

SAXReader reader = new SAXReader();// 這是優(yōu)先選擇. 如果不允許DTDs (doctypes) ,幾乎可以阻止所有的XML實(shí)體攻擊setFeature('http:///xml/features/disallow-doctype-decl', true);// 如果不能完全禁用DTDs,最少采取以下措施,必須兩項(xiàng)同時(shí)存在setFeature('http:///sax/features/external-general-entities', false);// 防止外部實(shí)體POCsetFeature('http:///sax/features/external-parameter-entities', false);// 防止參數(shù)實(shí)體POC
關(guān)鍵字:SAXReaderSAXBuilderXMLReaderFactory.createXMLReader();DocumentBuilderFactoryXPathExpressionDocumentHelper.parseTextTransformerFactoryUnmarshallerStringReader組件:POI < 3.11 DOS XXE

8.RCE

存在可以執(zhí)行命令或者代碼的函數(shù)就可能存在RCE漏洞。


漏洞案例:

在該接口中將接口傳參未做過濾直接傳遞到繼承了FelEngineImpl類的工具類中執(zhí)行并返回結(jié)果,可以通過傳入如導(dǎo)致代碼注入從而執(zhí)行任意命令

圖片

圖片

圖片

圖片

關(guān)鍵字:ProcessBuilderexecsystem()command    Runtime.getRuntime().exec()ProcessUNIXProcessProcessImplProcessBuilder.start()GroovyShell.evaluate()evalclassLoader$$BCEL$$ServiceLoaderToolProvider.getSystemJavaCompiler()getSystemClassLoaderJavaFileObjectJdbcRowSetImplTemplatesImplTransformerFactoryImplresolveClassloadClassjavax.el.ELProcessor

9.邏輯缺陷

邏輯缺陷一般出在判斷條件處,例如esle if,動(dòng)態(tài)sql中的if判斷。若開發(fā)寫的if判斷條件有邏輯問題,就會(huì)出現(xiàn)漏洞。

漏洞案例:


這段動(dòng)態(tài)sql語句中的if判斷條件,判斷id是否為空,不為空就刪除指定id的數(shù)據(jù)。但是如果用戶輸入的id參數(shù)為空,這會(huì)導(dǎo)致生成一個(gè)類似于 delete from dish where id 的 SQL 查詢語句。在這種情況下,沒有指定具體的條件來限制刪除操作,因此這個(gè)刪除語句會(huì)刪除整個(gè)表中的數(shù)據(jù),而不管 id 參數(shù)是否為空

圖片

無具體關(guān)鍵字,需要對(duì)項(xiàng)目代碼逐條分析查看,判斷是否存在邏輯問題。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多