【筆記】從0開始的程式碼審計

Super_Snow_Sword發表於2024-08-13

【筆記】從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的單步偵錯程式
  • 具有記錄每個函式呼叫和磁碟變數賦值的功能
  1. 瀏覽器傳送Cookie中帶有XDEBUG_SESSION引數的請求到伺服器,伺服器接收後轉到後端PHP處理
  2. 如果後端開啟了xdebug模組,則將請求轉發到除錯IDE所對應的埠上
  3. IDE作出除錯處理,然後將結果返回給xdebug除錯模組
  4. 除錯模組將結果返回到伺服器,伺服器將資料下發到瀏覽器

image-20240813105642422

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版本:

image-20240813103501503

進入phpstudy中下載PHP的路徑:phpstudy_pro\Extensions\php\php7.3.4nts

image-20240813103600904

我們建立一個網站,在網站根目錄下新增phpinfo.php頁面,內容如下:

<?php phpinfo(); 

我們訪問該網頁,觀察版本資訊,ctrl+A選中頁面全部內容進行復制

image-20240813151443850

將內容貼上到這個網站(安裝指南)中:https://xdebug.org/wizard

指南將自動分析應該下載的xdebug的版本

image-20240813151459217

按照指南的步驟先將檔名改為"php_xdebug.dll"

將檔案複製到phpstudy_pro\Extensions\php\php7.3.9nts\ext

在小皮皮膚中的軟體管理的php擴充套件元件中開啟XDebug除錯元件:

image-20240813162946720

此時重啟apache服務可以在phpinfo頁面看到這個:

image-20240813152249906

在vscode中安裝php-debug

在外掛中搜尋“php debug”

image-20240813160334660

image-20240813163236062

檢視細節,我們需要再php.ini檔案中進行配置,我們的Xdebug是3.1.6版本因此需要在php.ini檔案中新增上面的內容

xdebug.mode = debug
xdebug.start_with_request = yes

image-20240813163409463

在vscode中配置php路徑

首選項 ->設定,搜尋php,在以下頁面點選“Edit in setting.json”,新增PHP路徑

image-20240813163751480

{
    "php.validate.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\ph7.2.9nts\\php.exe"
}

在以下頁面點選“Edit in setting.json”,新增PHP路徑

image-20240813163845340

"php.debug.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\php7.2.9nts\\php.exe"

建立launch.json檔案

開啟php工作資料夾,在除錯一欄選擇建立launch.json檔案

image-20240813164134359

我們配置遠端除錯埠

image-20240813164309577

現在就可以實現動態除錯功能了,我們修改原始碼並設定斷點,Xdebug開啟監聽,我們訪問網頁發現網頁沒有回顯,Xdebug成功進行了攔截方便我們做動態除錯:

image-20240813165334078

相關文章