【筆記】從0開始的程式碼審計
程式碼審計思路
敏感函式回溯引數呼叫過程
- 首先特別關注程式敏感函式點,如:SQL語句拼合處、call_user_func、eval、unserialize、HTTP_CLIENT_IP等
- 然後回溯引數呼叫過程檢視是否全部過濾或者過濾不全,如:程式可能開啟magic_quotes_gpc(轉義大部分符號),但是部分資料流經過$_____SERVER變數,$_____SERVER並不受gpc的影響
優點
- 能夠快速挖掘想要的漏洞,具有定向挖掘特點
缺點
- 沒有精讀程式碼,對程式的整體框架了解不夠深入
- 很難挖掘到邏輯漏洞
通讀全文
- 根據檔案建立的時間、目錄大小、目錄型別、核心目錄去閱讀
- 注意程式功能說明文件
- 公共函式檔案:common、function、include資料夾,一般包含程式檔案公共呼叫的函式庫
尋找方法:開啟index.php,找到頭部包含的檔案
- 配置檔案:config資料夾,包含程式的資料庫,配置選項等資訊
- 安全過濾檔案決定漏洞是否能夠利用成功
透過命名為filter,safe,check等關鍵字
主要針對SQL、XSS、檔案等進行過濾
常用過濾函式addslashes()
- index檔案
程式入口檔案
優點
- 能夠對程式框架能夠整體認識
- 深入瞭解程式的運轉流程
- 挖掘高質量的邏輯漏洞
缺點
- 耗時較長
程式碼審計工具
環境搭建
搭建思路
- 環境搭建過程儘量以簡單易管理為主
- 環境應該支援多種版本
- 環境具有可擴充套件性
Phpstudy
支援windows和linux
整合Apache、lis、Nginx
支援切換PHP多種版本
預設安裝mysql資料庫
程式碼編輯工具
Notepad++
- 開源純文字編輯
- 體積輕巧,啟動速度快
- 支援多種語言程式碼高亮、程式碼摺疊
- 支援宏和外掛更多外掛
(宏是C語言中的一種預處理功能,可以將識別符號替換為字串,實現簡單的程式碼複用和最佳化。本文介紹了宏的定義、引數、多行、條件、檔案包含等用法,以及宏的優缺點和常見錯誤。)
Zend Studio
- 與PHP出自同一家公司
- 目前PHP開發使用者量相對最高的使用
- 具備專業的程式碼編輯和除錯工具
- 支援windows,Linux,Mac
Phpstorm
- JetBrains公司開發的商業級PHP整合開發工具(有學生郵箱可以免費使用)
- 支援多種語言混合
- 支援語法高亮、自動補全、能夠快速檢測編寫程式碼中的語法錯誤
- 輕量級IDE
- 支援本地除錯和遠端除錯
漏洞驗證工具
程式碼審計工具(白盒)
RIPS
- 基於PHP開發的專門用於審計PHP程式碼的軟體
- 程式大小隻有450kb
- 亮點在於呼叫PHP內建解析器介面token_get_all,並且使用Parser做語法分析
- 誤報率相對較低
- 2013.2暫停更新
Seay
阿里巴巴尹毅使用C#開發的針對PHP程式碼安全審計軟體
執行在windows系統
執行審計常見Web安全漏洞,並且能夠進行程式碼除錯、函式定位、語法高亮
輔助工具
BrupSuite
Firefox瀏覽器擴充套件
- Hackbar
- F12除錯
編碼轉化
POST資料
正則除錯
Seay
線上除錯
動態除錯
資料庫執行監控
Seay
phpstorm
動態除錯環境搭建
PHP Xdebug除錯原理
Xdebug介紹
- xdebug是PHP的擴充套件協助除錯和開發
- 包含一個用於IDE的單步偵錯程式
- 具有記錄每個函式呼叫和磁碟變數賦值的功能
- 瀏覽器傳送Cookie中帶有XDEBUG_SESSION引數的請求到伺服器,伺服器接收後轉到後端PHP處理
- 如果後端開啟了xdebug模組,則將請求轉發到除錯IDE所對應的埠上
- IDE作出除錯處理,然後將結果返回給xdebug除錯模組
- 除錯模組將結果返回到伺服器,伺服器將資料下發到瀏覽器
PHP Xdebug除錯環境搭建
配置
- PHP
- Xdebug
- phpstorm
PHP預設沒有安裝xdebug外掛,首先需要下載外掛PHP
https://xdebug.org/download.php (xdeug3)
https://xdebug.org/wizard.php (安裝指南)
下載
- xdebug(按照自己php版本來下載)
https://xdebug.org/download/historical
- PHPStudy
https://www.xp.cn/
- vscode
開啟phpstudy的xdebug遠端除錯
開啟phpstudy,開啟apache和mysql服務,並選擇PHP版本:
進入phpstudy中下載PHP的路徑:phpstudy_pro\Extensions\php\php7.3.4nts
我們建立一個網站,在網站根目錄下新增phpinfo.php頁面,內容如下:
<?php phpinfo();
我們訪問該網頁,觀察版本資訊,ctrl+A選中頁面全部內容進行復制
將內容貼上到這個網站(安裝指南)中:https://xdebug.org/wizard
指南將自動分析應該下載的xdebug的版本
按照指南的步驟先將檔名改為"php_xdebug.dll"
將檔案複製到phpstudy_pro\Extensions\php\php7.3.9nts\ext
在小皮皮膚中的軟體管理的php擴充套件元件中開啟XDebug除錯元件:
此時重啟apache服務可以在phpinfo頁面看到這個:
在vscode中安裝php-debug
在外掛中搜尋“php debug”
檢視細節,我們需要再php.ini檔案中進行配置,我們的Xdebug是3.1.6版本因此需要在php.ini檔案中新增上面的內容
xdebug.mode = debug
xdebug.start_with_request = yes
在vscode中配置php路徑
首選項 ->設定,搜尋php,在以下頁面點選“Edit in setting.json”,新增PHP路徑
{
"php.validate.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\ph7.2.9nts\\php.exe"
}
在以下頁面點選“Edit in setting.json”,新增PHP路徑
"php.debug.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\php7.2.9nts\\php.exe"
建立launch.json檔案
開啟php工作資料夾,在除錯一欄選擇建立launch.json檔案
我們配置遠端除錯埠
現在就可以實現動態除錯功能了,我們修改原始碼並設定斷點,Xdebug開啟監聽,我們訪問網頁發現網頁沒有回顯,Xdebug成功進行了攔截方便我們做動態除錯: