打造自己的php半自动化代码审计工具
0x00 PHP扩展进行代码分析(动态分析)
一.基础环境
#!bashapt-get install php5apt-get install php5-devapt-get install apacheapt-get install mysql
二.使用PHPTracert
#!bashmkdir godheadwget https://github.com/Qihoo360/phptrace/archive/v0.3.0.zipunzip v0.3.0.zipcd ./phptrace-0.3.0/extensionphpize5./configure --with-php-config=/usr/bin/php-configmake & make installcd ../cmdtoolmake
编辑 php.ini ,增加:
#!bashextension=trace.so
三.测试
#!php<?php for($i=0;$i<100;$i++){ echo $I; sleep(1);}?>
CLI
#!shellphp test.php &ps -axu|grep php./phptrace -p pid
apache
#!bashcurl 127.0.0.1/test.phpps -aux|grep apache./phptrace -p pid
四.phptrace分析
执行的代码如下:
#!php<?phpfunction c(){ echo 1;}function b(){ c();}function a(){ b();}a();?>
执行顺序是:
#!basha>b>c>echo
参数含义:
名称 | 值 | 意义 |
---|---|---|
seq | int|执行的函数的次数 | |
type | 1/2 | 1是代表调用函数,2是代表该函数返回 |
level | -10 | 执行深度,比如a函数调用b,那么a的level就是1,b的level就是2,依次递增 |
func | eval | 调用的函数名称 |
st | 1448387651119460 | 时间戳 |
params | string | 函数的参数 |
file | c.php | 执行的文件 |
lineno | 1 | 此函数对应的行号 |
日志输出:
#!js{"seq":0, "type":1, "level":1, "func":"{main}", "st":1448387651119445, "params":"", "file":"/var/www/html/2.php", "lineno":11 }{"seq":1, "type":1, "level":2, "func":"a", "st":1448387651119451, "params":"", "file":"/var/www/html/2.php", "lineno":11 }{"seq":2, "type":1, "level":3, "func":"b", "st":1448387651119452, "params":"", "file":"/var/www/html/2.php", "lineno":9 }{"seq":3, "type":1, "level":4, "func":"c", "st":1448387651119453, "params":"", "file":"/var/www/html/2.php", "lineno":6 }{"seq":4, "type":2, "level":4, "func":"c, "st":1448387651119457, "return":"NULL", "wt":4, "ct":4, "mem":48, "pmem":144 }{"seq":5, "type":2, "level":3, "func":"b, "st":1448387651119459, "return":"NULL", "wt":7, "ct":6, "mem":48, "pmem":144 }{"seq":6, "type":2, "level":2, "func":"a, "st":1448387651119459, "return":"NULL", "wt":8, "ct":8, "mem":80, "pmem":176 }{"seq":7, "type":2, "level":1, "func":"{main}, "st":1448387651119460, "return":"1", "wt":15, "ct":14, "mem":112, "pmem":208 }
五.逻辑分析
1.解析监控进程
开一个后台进程一直刷新进程列表,如果出现没有tracer的进程就立即进行托管
2.json提取
通过对每一个文件的json进行提取,提取过程如下:
- 便利所有文件
- 读读取文件
- 提取json,按照seq排序
- 提取 type=2 的与 type=1 的进行合并
- 按照level梳理上下级关系存储同一个字典
- 按照seq排序,取出头函数进行输出
- 提取恶意函数往上提取level直到 level=0
函数对应如下:
#!pythonlist1={ level1:[seq,type,func,param,return] level2:[seq,type,func,param,return] level3:[seq,type,func,param,return] #eval level4:[seq,type,func,param,return]}list2=
3.数据查看
通过追踪危险函数,然后将其函数执行之前的关系梳理出来进行输出,然后再进行人工审查。
放上demo
六.使用XDEBUG
安装
#!bashapt-get install php5-xdebug
修改 php.ini
#!bash[xdebug]zend_extension = "/usr/lib/php5/20131226/xdebug.so"xdebug.auto_trace = onxdebug.auto_profile = onxdebug.collect_params = onxdebug.collect_return = onxdebug.profiler_enable = onxdebug.trace_output_dir = "/tmp/ad/xdebug_log"xdebug.profiler_output_dir = "/tmp/ad/xdebug_log"
放上几个demo图片:
七.优缺点
缺点
人为参与力度较大,无法进行脱离人工的操作进行独立执行。
优点
精准度高,对于面向对象和面向过程的代码都可以进行分析。
0x01 语法分析(静态分析)
案例:
- http://php-grinder.com/
- http://rips-scanner.sourceforge.net/
一.使用php-parser
介绍:
- http://www.oschina.net/p/php-parser
- https://github.com/nikic/PHP-Parser/
二.安装
#!shellgit clone https://github.com/nikic/PHP-Parser.git & cd PHP-Parsercurl -sS https://getcomposer.org/installer | php
PHP >= 5.3; for parsing PHP 5.2 to PHP 5.6
#!bashphp composer.phar require nikic/php-parser
PHP >= 5.4; for parsing PHP 5.2 to PHP 7.0
#!bashphp composer.phar require nikic/php-parser 2.0.x-dev
三.测试
#!php<?phpinclude 'autoload.php';use PhpParser\Error;use PhpParser\ParserFactory;$code = '<?php eval($_POST[c][/c])?>';$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);try { $stmts = $parser->parse($code); print_r($stmts); // $stmts is an array of statement nodes} catch (Error $e) { echo 'Parse Error: ', $e->getMessage();}
输出如下:
#!jsArray( [0] => PhpParser\Node\Expr\Eval_ Object ( [expr] => PhpParser\Node\Expr\ArrayDimFetch Object ( [var] => PhpParser\Node\Expr\Variable Object ( [name] => _POST [attributes:protected] => Array ( [startLine] => 1 [endLine] => 1 ) ) [dim] => PhpParser\Node\Expr\ConstFetch Object ( [name] => PhpParser\Node\Name Object ( [parts] => Array ( [0] => c ) [attributes:protected] => Array ( [startLine] => 1 [endLine] => 1 ) ) [attributes:protected] => Array ( [startLine] => 1 [endLine] => 1 ) ) [attributes:protected] => Array ( [startLine] => 1 [endLine] => 1 ) ) [attributes:protected] => Array ( [startLine] => 1 [endLine] => 1 ) ))
由此可见,我们需要提取出
#!js[0] => PhpParser\Node\Expr\Eval_ Object[name] => _POST[parts] => Array ( [0] => c )
然后进行拼接之后即可发现原始语句是:
#!phpeval($_POST[c][/c])
四.逻辑分析
代码解析
- 通过该库进行语法分析
- 提取结果
- 提取危险函数
- 提取危险函数中存在的变量
- 从上文中提取此变量的赋值方式
- 分析出可控结果
- 输出结果
五.优缺点
缺点
对于面向对象的程序进行分析比较弱。
优点
适合大批量的自动化分析,可以脱离人工操作进行独立执行

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
