后端开发|php教程
打造自己的php半自动化代码审计工具
后端开发-php教程
0x00 PHP扩展进行代码分析(动态分析)
php社区源码 手机版,ubuntu 启用独显,如何搭建前端本地tomcat,itunes 爬虫 协议,php接口常量的应用,seo布局技巧lzw
一.基础环境
#!bashapt-get install php5apt-get install php5-devapt-get install apacheapt-get install mysql
二.使用PHPTracert
#!bashmkdir godheadwget /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 ,增加:
吃喝玩乐网站源码,VScode怎么关闭工作区,ubuntu创c,Tomcat能运行的,爬虫创建函数,php如何多线程,四川seo推广公司,手机电脑一体化网站,metinfo6.2商业模板下载lzw
#!bashextension=trace.so
三.测试
#!php<?php for($i=0;$i
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分析
执行的代码如下:
管理客户系统源码,Ubuntu创建菜单窗口,tomcat为什么一闪而过,爬虫 摄像头,php图像识别技术原理学习,seo技术报告lzw
#!php
执行顺序是:
#!basha>b>c>echo
参数含义:
日志输出:
#!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] #evallevel4:[seq,type,func,param,return]}list2=
3.数据查看
通过追踪危险函数,然后将其函数执行之前的关系梳理出来进行输出,然后再进行人工审查。
放上demo
六.使用XDEBUG
安装
#!bashapt-get install php5-xdebug
修改 php.ini
#!bash[xdebug]zend_extension = "/usr/lib/php5/1226/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-/ http://rips-/
一.使用php-parser
介绍:
/p/php-parser /nikic/PHP-Parser/
二.安装
#!shellgit clone /nikic/PHP-Parser.git & cd PHP-Parsercurl -sS /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 = \;$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])
四.逻辑分析
代码解析
通过该库进行语法分析提取结果提取危险函数提取危险函数中存在的变量从上文中提取此变量的赋值方式分析出可控结果输出结果
五.优缺点
缺点
对于面向对象的程序进行分析比较弱。
优点
适合大批量的自动化分析,可以脱离人工操作进行独立执行
如果觉得《打造自己的php半自动化代码审计工具》对你有帮助,请点赞、收藏,并留下你的观点哦!