天天看點

對某SQcms進行代碼審計

今天對某(SQ)cms進行代碼審計

審計工具:rips

輸入代碼檔案路徑,點選scan進行掃描,發現的兩個漏洞,一個是任意代碼寫入,另一個是檔案包含。

對某SQcms進行代碼審計
對某SQcms進行代碼審計

第一個漏洞,從上面的圖檔看,它把送出的資料直接拼接到檔案内容,再寫入到boos.php。我們打開第一個漏洞所在的代碼檔案,看看有沒有其他過濾條件。這是$_POST[‘username’]第一次出現的位置,判斷這個變量是否存在。

對某SQcms進行代碼審計

繼續跟蹤,可以看到第二次出現的位置就直接拼接到檔案内容裡面去了,然後就直接寫到檔案裡面去,并沒有任何過濾。

對某SQcms進行代碼審計
對某SQcms進行代碼審計

接着我們把漏洞複現一下

管理者賬号改為 localhost’);@eval($_GET[‘pass’]);//

對某SQcms進行代碼審計
對某SQcms進行代碼審計

因為該檔案包含了boss.php,是以通路時加上pass變量。複現成功

對某SQcms進行代碼審計

繼續看第二個,我們可以看到 産生包含漏洞的點是$C_T_0,$C_T_0的産生鍊是$C_T_0<—$C_T[0]<—$C_T<—$_GET[‘m’]

對某SQcms進行代碼審計

我們先打開index.php檔案,追蹤一下造成該漏洞的元兇,$_GET[‘m’]

對某SQcms進行代碼審計

$_GET[‘m’]在該檔案隻出現了兩次,第一是判斷是否存在,第二次是存在時指派給$C_T,接着追蹤$C_T

對某SQcms進行代碼審計

看紅圈部分,explode函數将$C_T的内容以‘.’為分隔符進行分隔,傳回一個數組,下一句代碼将‘.’前面的内容重新指派給$C_T,接着以‘-’為分隔符進行分隔,指派,在判斷‘-’前面的内容是否存在,存在的話指派給$C_T_0。

追蹤$C_T_0,注意看,$C_T_0跳到了switch進行判斷,而switch條件有個default,在switch中,如果case都沒有命中的話就會執行default條件的内容,是以經過這裡之後,$C_T_0隻能為case語句或default語句指派給它的内容

對某SQcms進行代碼審計

接着就到了include

對某SQcms進行代碼審計

由此可看,該漏洞應該為誤報

繼續閱讀