Author: tr1ple
這部分主要分析scanner.php的邏輯,在token流重構完成後,此時ini_get是否包含auto_prepend_file或者auto_append_file
取出的檔案路徑將和tokens陣列結合,每一個檔案都為一個包含require+檔名的token陣列
接著回到main.php中,此時呼叫scanner的parse開始解析,這裡的一個設計點問題就是要掃描漏洞,此時已經需要準備好的有哪些東西
1.file_scanning:
這裡實際上就代表的是將要進行掃描的檔案,在這裡實際上是對每個待掃描的php檔案都將呼叫parse進行解析,files就是前端指定的目錄位置,勾選subdirs就包括其子目錄的php檔案
2.scan_functions:
掃描的結果顯示級別是根據前端verbosity來進行選擇,掃描函式是根據vuln type來選擇
主要分為兩個大類,客戶端攻擊和服務端
客戶端主要包括
a.xss
主要是以下函式在輸出時可能存在xss,其中每種函式都對應一個陣列,0代表跟蹤該函式所有引數,1代表跟蹤第一個,2代表第2個,
其中securing_xss為一些過濾函式,包括把字元轉為實體,將左右尖括號、單雙引號、&轉為html實體,所以這種防禦並不是百分百有效的
b.http 頭部注入
c.會話固定漏洞
服務端主要包括:
a.程式碼執行
這裡的securing_preg主要針對php5.x的e修飾符導致的程式碼執行,preg_quote將對正則進行轉義
b.反射注入
c.檔案讀取
securing_file主要包括以下三種
d.檔案系統操作相關和e檔案包含相關也都是用的相同的securing_file
f.命令執行相關
securing_function主要關注兩個命令轉義函式
g.sql操作相關:
securing_function:
h.xpath注入
securing_functions
i.ldap注入
j.連線相關的函式
k.php物件注入:
l.其他一些高危函式
因此以上一共是3種客戶端+12種服務端=15種預配置的漏掃型別,但是這些漏洞並沒有完全涵蓋比如csrf、ssrf、xxe以及無法檢測一些越權漏洞等邏輯漏洞,以及反序列化也不一定是unserialize,可能是phar反序列化
上面預先配置的這些函式也是作者對php的函式都做了相關的調查,建立在對php語言與漏洞本身的理解基礎上(白盒對基礎的要求還是高)
3.info_functions
info類中主要包括一些輔助審計的函式檢測,比如出現phpinfo,將對應phpinfo detected,以及不同資料庫用到的函式如果出現,則代表當前應用使用了哪些資料庫
4.source_functions
待掃描的函式初始化後,將初始化source點
source點主要包括:
a.otherinput 包括http頭部一些資訊,超全域性陣列變數等操作函式
b.從檔案中提取的輸入
c.從資料庫中提取的輸入
這些輸入點全部都定義在source.php,其中還包括userinput,http server相關的一些引數,不過這兩類輸入在初始化時並未加入source_functions陣列
info中還包含了常用的一些pop鏈構造需要的一些gadget方法