天天看點

深入解析PHP代碼審計技術與實戰【網絡安全】

作者:KaliMa

前言

登入某個網站并浏覽其頁面時,注意到了一些看起來不太對勁的地方。這些迹象可能是該網站存在漏洞或被黑客入侵的标志。為了確定這個網站的安全性,需要進行代碼審計,這是一項專門針對軟體代碼進行檢查和分析的技術。在本文中,我們将深入探讨代碼審計的重要性和如何進行有效的代碼審計。

1.目錄周遊漏洞

進入模闆功能-模闆管理功能處。

這裡說句題外話,之前有不少小夥伴私信我要網絡安全相關的資源,我這裡都整理好了,需要的私信我自取 《黑客&網絡安全入門&進階學習資源包》免費領取

發現此處的功能點可以周遊目錄下的檔案,接下來我們抓包檢視目前功能點的代碼。

深入解析PHP代碼審計技術與實戰【網絡安全】

通過路由找到對應的檔案 template.php ,然後接着通過 mudi=manage 進行分支選擇進入到對應的函數中。

深入解析PHP代碼審計技術與實戰【網絡安全】

進入template.php檔案。

深入解析PHP代碼審計技術與實戰【網絡安全】

在 manage() 函數中,首先傳入了兩個參數, dirStr 參數則是控制路徑的參數,而 sel 參數則是控制是否進入代碼的if,而最後将路徑傳入到File類下的 GetDirList() 函數中。跟進GetDirList() 函數

深入解析PHP代碼審計技術與實戰【網絡安全】

發現使用 opendir() 函數列出目錄下的檔案

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

進入模闆管理功能處,然後進行抓包。

深入解析PHP代碼審計技術與實戰【網絡安全】

抓包之後,進行測試。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後在dirStr使用.../../來測試目錄穿越。

深入解析PHP代碼審計技術與實戰【網絡安全】

2.任意檔案讀取漏洞

全局fread() 函數,發現Read()函數中調用了 fread() 函數。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後搜尋 Read() 函數的調用情況。

深入解析PHP代碼審計技術與實戰【網絡安全】

進入classFile.php檔案。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後搜尋fread()函數的用法。

深入解析PHP代碼審計技術與實戰【網絡安全】

發現在 sysCheckFile_deal.php 檔案中調用了 File::read() 函數,跟進該函數。

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

根據路由,去構造url路徑,然後通路。

深入解析PHP代碼審計技術與實戰【網絡安全】

接着抓包,配合../進行目錄穿越讀取檔案。

深入解析PHP代碼審計技術與實戰【網絡安全】

3.任意檔案删除漏洞

在測試模闆管理功能點處,發現該處存在一個删除的功能點,發現存在任意檔案删除漏洞。

深入解析PHP代碼審計技術與實戰【網絡安全】

首先我們通過路由找對相應的源代碼 template_deal.php 檔案,且這裡的路由指向為 DelFile() 函數,該函數中接收了三個參數,其中filePath參數為主要控制路徑的參數,将filePath參數帶入到File::Del()中進行删除。跟進 del() 函數

深入解析PHP代碼審計技術與實戰【網絡安全】
深入解析PHP代碼審計技術與實戰【網絡安全】

該函數很簡單,首先判斷路徑是否為空,不為空修改權限最後進行檔案的删除操作。

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

進入功能點處。然後點選X号。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後在根路徑寫入一個xxx.txt檔案。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後在filepath參數後配合../來删除檔案。

深入解析PHP代碼審計技術與實戰【網絡安全】

4.msql_getshell

在 黑盒 測試中中存在一個 SQL語句調試 的功能點,該處沒有對SQL語句關鍵字的過濾而造成SQL語句的任意執行,導緻getshell。

進入功能點處。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後執行簡單的SQL語句進行測試。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後使用抓包工具來定位路由。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後看一下代碼,發現檔案的開頭以條件分支來選擇對應要執行的功能點,由于上述 mudi=sql ,是以我們找到該處要執行的sql所對應的函數

深入解析PHP代碼審計技術與實戰【網絡安全】
深入解析PHP代碼審計技術與實戰【網絡安全】

通過 OT::PostStr 方法傳入五個參數,其中 sqlContent 中是需要傳入的SQL語句,而下面對

into_outfile 、 global general_log 等SQL關鍵字進行了過濾

深入解析PHP代碼審計技術與實戰【網絡安全】
深入解析PHP代碼審計技術與實戰【網絡安全】

在下面檢測你填入的背景密碼是否正确,如果正确繼續執行下面代碼,在代碼中執行了我們輸入

的SQL語句。未對其進行過濾完全,導緻我們可以繞過過濾,來執行SQL語句。

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

首先去開啟資料庫日志功能,發現有過濾。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後我們構造payload成功繞過過濾。

深入解析PHP代碼審計技術與實戰【網絡安全】

然後我們寫入phpinfp檔案。

深入解析PHP代碼審計技術與實戰【網絡安全】

構造payload,成功寫入。

深入解析PHP代碼審計技術與實戰【網絡安全】

通路之後,成功getshell。

深入解析PHP代碼審計技術與實戰【網絡安全】

5.xss漏洞

進入users_deal.php

深入解析PHP代碼審計技術與實戰【網絡安全】

檢測type是否為數組中的固定值,不是則帶入AlertEnd方法中 跟進AlertEnd方法

深入解析PHP代碼審計技術與實戰【網絡安全】

發現type被帶<script>标簽,使用AlertFilter函數處理後直接alert,跟進AlertFilter函數

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

構造payload,成功實作彈窗。

深入解析PHP代碼審計技術與實戰【網絡安全】

6.xss漏洞2

進入read.php

深入解析PHP代碼審計技術與實戰【網絡安全】

發現在GetCityData函數中,idName參數沒有做任何處理,帶入GetCituOptionJs函數中跟進該方法

深入解析PHP代碼審計技術與實戰【網絡安全】

該方法中idName參數被直接帶入DOM方法中輸出

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

要調用GetCityData函數需mudi參數,然後在idName處輸入XSS的payload。

成功實作彈框。

深入解析PHP代碼審計技術與實戰【網絡安全】

7.ssrf漏洞

在浏覽代碼過程中,發現該處使用curl_exec()函數來執行指令。

在函數UseCurl中,調用curl_exec函數執行了一個curl會話,隻有$url參數可控,即可造成ssrf漏洞

深入解析PHP代碼審計技術與實戰【網絡安全】

進入info_deal.php

深入解析PHP代碼審計技術與實戰【網絡安全】

跟進AddOrRev函數

深入解析PHP代碼審計技術與實戰【網絡安全】

接着跟進PostStr函數,發現其調用了post函數。

深入解析PHP代碼審計技術與實戰【網絡安全】

跟進post函數。

深入解析PHP代碼審計技術與實戰【網絡安全】

$img參數通過POST方式傳入,并且無過濾措施 繼續跟進SaveRemoteFile函數

深入解析PHP代碼審計技術與實戰【網絡安全】

第二個參數被帶入GetUrlContent函數,跟進GetUrlContent函數

深入解析PHP代碼審計技術與實戰【網絡安全】

根據可控參數的帶入,跟進UseAuto函數,并且此處傳入3個參數 0,GET,$url

深入解析PHP代碼審計技術與實戰【網絡安全】

根據傳入第一個參數$seMode為0,會調用UseCurl函數,即進入漏洞關鍵函數

目前已知漏洞觸發鍊條,接下來隻需要根據進入函數的條件,構造poc即可

首先需要進入AddOrRev函數,隻需$mudi值為add

深入解析PHP代碼審計技術與實戰【網絡安全】

然後需要滿足進入SaveRemoteFile函數的條件

深入解析PHP代碼審計技術與實戰【網絡安全】
深入解析PHP代碼審計技術與實戰【網絡安全】

發現輸入的參數為http://,接着來複現漏洞。

深入解析PHP代碼審計技術與實戰【網絡安全】

漏洞複現:

通路url位址,使用post方式,在img參數後面輸入dnslog位址。

深入解析PHP代碼審計技術與實戰【網絡安全】

成功收到監聽。

深入解析PHP代碼審計技術與實戰【網絡安全】

##總結 代碼審計可以幫助發現各種類型的漏洞。這些漏洞可能包括輸入驗證問題、授權問題、會話管理問題、跨站點腳本漏洞、SQL注入漏洞等。

深入解析PHP代碼審計技術與實戰【網絡安全】

繼續閱讀