二.使用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
三.测试 #!phpb>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.soxdebug.auto_trace = onxdebug.auto_profile = onxdebug.collect_params = onxdebug.collect_return = onxdebug.profiler_enable = onxdebug.trace_output_dir = /tmp/ad/xdebug_logxdebug.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
三.测试 #!phpcreate(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])
四.逻辑分析 代码解析 通过该库进行语法分析 提取结果 提取危险函数 提取危险函数中存在的变量 从上文中提取此变量的赋值方式 分析出可控结果 输出结果 五.优缺点 缺点 对于面向对象的程序进行分析比较弱。
优点 适合大批量的自动化分析,可以脱离人工操作进行独立执行
