【世界獨家】玩轉CodeQLpy之代碼審計實戰案例

2023-01-12 10:29:25 來源:51CTO博客

0x01 背景介紹


(資料圖)

CodeQLpy是一款半自動化的代碼審計工具,能有效提高代碼審計的效率,目前項目仍處于測試階段。項目地址https://github.com/webraybtl/CodeQLpy,在github主頁有對應的安裝和使用介紹,如圖1.1所示。

-t: 指定待掃描的源碼路徑。支持文件夾,jar包和war包,如果是文件夾,則必須是網站跟目錄。

-d: 指定待掃描的CodeQL數據庫。

-c: 指定待掃描的源碼是編譯前源碼還是編譯后源碼。

-s: 指定是否跳過環境檢查,本項目運行依賴于codeql和java環境,首次運行建議不跳過。

-v: 指定待測試源碼的jdk版本,目前支持6,7,8,11。默認為8。

這里以某通用WEB應用為例,通過指紋body="changeAccount(\"varAccount\")" || body="KoronCom.TrustedSites"可以在資產測繪平臺上找到近3000個資產。

0x02 工具使用

該系統的源碼是主要由jsp文件和class文件組成,其中部分源碼經過混淆,如圖2.1所示。其中類名稱和字段名稱的可讀性很差,不方便閱讀,而且該系統的代碼量較大,大約有4600個文件。如果通過傳統的方式來進行代碼審計,對審計人員的要求將會非常高。

圖2.1 經過混淆的源碼

使用CodeQLpy可以方便的幫助審計人員從大量源碼中發現可能存在的安全隱患,使用步驟如下。

Step1:生成數據庫初始化

python3 main.py -t /Users/xxx/Downloads/OAapp/ -c

圖2.2 數據庫初始化

最終運行成功之后會相應下一步進行數據庫創建的命令。

Step2:生成數據庫

這一步直接使用上一步命令最終返回的生成數據庫的命令在cmd/bash環境中運行即可

mac命令如下

arch -x86_64 codeql database create out/database/OAapp --language=java --command="/bin/bash -c /Users/xxx/CodeQLpy/out/decode/run.sh" --overwrite

windows命令如下

codeql database create out/database/OAapp --language=java --command="run.cmd" --overwrite

生成的過程中會報很多錯誤,可以忽略,如圖2.3所示。因為這一步創建的數據庫是用上一步反編譯的源碼進行編譯,反編譯的源碼不能保證完全正確,所以會有錯。但是有錯的源碼仍然可以創建數據庫,不影響我們進行代碼審計。

圖2.3 創建數據庫

Step3:代碼審計

這一步需要使用上一步命令最終相應的生成數據庫的路徑,如圖2.4所示。

python3 main.py -d /Users/xxx/CodeQLpy/out/database/OAapp/

圖2.4 使用ql插件分析可能存在的漏洞

最終得到的結果是csv文件,保存路徑在out/result/目錄,打開對應的文件,如圖2.5所示。

圖2.5 掃描結果內容

0x03 結果驗證

掃描出來的結果很多,我們挑選幾個有代表性的進行驗證。

1)BeanShell遠程命令執行漏洞

相關存在漏洞的文件在com/menyi/web/util/UtilServlet.class,如圖3.1所示。從圖中可以看出用戶可控的輸入value,傳入了Interpreter類的eval方法,導致BeanShell任意代碼執行。

圖3.1 BeanShell遠程命令執行漏洞

在測試平臺上利用此漏洞,如圖3.2所示。

圖3.2 BeanShell遠程命令執行漏洞exp

2)FilePathInjection任意文件讀取漏洞

相關存在漏洞的代碼在com.menyi.web.util.ReportServlet.class。如圖3.3所示。

圖3.3 任意文件讀取漏洞

在測試平臺上利用此漏洞,如圖3.4所示。

圖3.4 任意文件讀取漏洞Exp

3)SQL注入漏洞

漏洞文件是在com.koron.oa.workflow.OAMyWorkFlowAction.class。如圖3.5所示。

圖3.5 用戶可控輸入tablename

繼續跟進getOAMyWorkFlowInfo,如圖3.6所示。

圖3.6 tableName參數傳遞到SQL語句

標簽: 代碼審計 審計人員 可能存在

上一篇:熱門:Modbus Slave緩沖區溢出漏洞CVE-2022-1068分析與復現
下一篇:Python網絡編程之多任務版TCP服務端程序開發