- Web代碼安全漏洞深度剖析
- 曹玉杰 王樂 李家輝 孔韜循編著
- 1427字
- 2021-09-26 16:05:14
2.1 代碼調試工具phpStorm+Xdebug
使用phpStorm編輯器可以很直觀地看到開源代碼文件的結構,使用Xdebug可以方便地、更好地查看可控參數到漏洞產生點的執行過程。將phpStorm與Xdebug結合在一起,可使代碼審計效率有極大的提升,如能夠快速設置斷點、代碼高亮、模塊跟蹤等。
1.phpStorm簡介
phpStorm是JetBrains公司開發的一款商用PHP集成開發工具,可隨時幫助用戶對其程序在開發過程中的編碼進行調整,運行單元測試或者提供可視化Debug功能。
phpStorm提供了必不可少的工具,如自動化重構、深層代碼分析、聯機錯誤檢查和快速修復等。
筆者在審計程序時,常用到的功能是代碼追蹤,且使用echo、die、var_dump等PHP基礎語句來進行調試輸出,以便定位代碼中有安全隱患的位置。
2.Xdebug簡介
Xdebug是一個開源的PHP程序調試器(即一個Debug工具),可以用來跟蹤、調試和分析PHP程序的運行狀況。
本章程序運行環境是用phpStudy集成包搭建的。此處將用phpStorm+Xdebug+phpStudy 2018來演示Xdebug如何輔助進行代碼審計。
2.1.1 配置
這里用的PHP版本是5.3,具體配置步驟如下:
1)打開phpStudy,點擊“其他選項”菜單,選擇“PHP擴展及設置→PHP擴展”,選中Xdebug。
2)回到“其他選項”菜單,選擇“打開文件位置→PHP”,找到php-5.3.29-nts文件夾里的php.ini,搜索Xdebug。在Xdebug模塊后面追加(注意,是追加的方式)以下內容:

由此得到xdebug.dll的絕對路徑,如下所示,這個路徑是筆者自己的路徑。

重啟一下phpStudy,看一下phpinfo,出現如圖2-1所示的界面,表明Xdebug開啟成功。

圖2-1 Xdebug開啟成功
3)打開phpStorm,在菜單欄處依次選擇File→Settings→Languages & Frameworks→PHP,設置PHP版本,結果如圖2-2所示。

圖2-2 在菜單欄中選擇PHP版本
其中,PHP language level選擇5.3;CLI Interpreter中如果沒有顯示PHP5.3,則點擊當前框后面的按鈕,出現對話框,再點擊綠色“+”,填寫Name為PHP5.3,PHP executable為PHP5.3的php.exe文件的路徑,結果如圖2-3所示,然后點擊OK。

圖2-3 php.exe物理路徑配置
4)選擇Languages & Frameworks→PHP→Debug port,填寫Debug port端口為9000。結果如圖2-4所示,然后點擊OK。

圖2-4 填寫端口
5)在IDE key中填寫PHPSTORM,與php.ini填寫的一致。結果如圖2-5所示,然后點擊OK。

圖2-5 IP與端口配置
6)載入要審計的程序。在菜單欄處選擇File→Open,選擇要審計的程序的文件夾,載入程序后,找到Edit Configurations。結果如圖2-6所示。
7)點擊Edit Configurations,點擊左側的綠色“+”,選擇PHP Web Page(與PHP Web Application一樣),點擊Server框右側的按鈕。結果如圖2-7所示。

圖2-6 配置編輯

圖2-7 PHP應用配置
點擊Server框右側的按鈕后出現對話,點擊左側的綠色“+”,在Name中填寫test8(因為載入的程序是在根目錄的test8文件夾下,所以筆者就設置了這個名字),在Host中填寫localhost/test8(這是程序訪問路徑),在Port中填寫80,Debugger默認為Xdebug。結果如圖2-8所示,然后點擊OK。

圖2-8 調試端口設置
8)回到圖2-7所示的頁面,選擇Server為test8,Browser為Chrome。結果如圖2-9所示,點擊OK,配置完成。

圖2-9 調試時默認瀏覽器的選擇
2.1.2 使用
測試一下test8程序首頁的搜索功能,打開/test8/framework/www/search_control.php,如圖2-10所示。
在箭頭1處,使其為綠色表示開啟Xdebug監聽模式(可單擊變換)。在箭頭2處,點擊第26行的紅點處,使其出現紅點,設置為斷點(再點擊一下紅點則取消斷點設置)。在箭頭1、箭頭2處操作完后點擊箭頭3指向的按鈕,跳轉到如圖2-11所示的頁面,并進行如下訪問測試:http://localhost/test8/?XDEBUG_SESSION_START=11593,證明Xdebug監聽成功。在搜索框中隨意輸入字符,例如dsada,點擊“搜索”按鈕就可以在phpStorm上監聽了。

圖2-10 功能測試

圖2-11 測試正常
再次回到phpStorm,可以看到如圖2-12所示的監控狀態。“2”處為關鍵詞到第26行設置斷點處之前調用的所有方法,可以選中每個調用方法,點擊查看具體代碼。
右側Variables為請求的參數數據,點擊“1”處的按鈕后可以重新開啟Xdebug監聽模式。也可以在設置其他斷點后,點擊“1”處的按鈕重啟Xdebug監聽模式。這樣我們就可以觀察到可控參數到漏洞執行處所經過的各方法調用的全過程。

圖2-12 監控狀態