欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

打造自己的php半自动化代码审计工具

来源:本站整理 作者:佚名 时间:2016-01-05 TAG: 我要投稿

一.基础环境
apt-get install php5
apt-get install php5-dev
apt-get install apache
apt-get install mysql
二.使用PHPTracert
mkdir godhead
wget https://github.com/Qihoo360/phptrace/archive/v0.3.0.zip
unzip v0.3.0.zip
cd ./phptrace-0.3.0/extension
phpize5
./configure --with-php-config=/usr/bin/php-config
make & make install
cd ../cmdtool
make
编辑php.ini,增加:
extension=trace.so
三.测试
for($i=0;$i$i++){
    echo $I;
    sleep(1);
}
?>
CLI
php test.php &
ps -axu|grep php
./phptrace -p pid
apache
curl 127.0.0.1/test.php
ps -aux|grep apache
./phptrace -p pid
四.phptrace分析
执行的代码如下:
function c(){
    echo 1;
}
function b(){
    c();
}
function a(){
    b();
}
a();
?>
执行顺序是:
a>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
此函数对应的行号
日志输出:
{"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
函数对应如下:
list1={
     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
安装
apt-get install php5-xdebug
修改php.ini
[xdebug]
zend_extension = "/usr/lib/php5/20131226/xdebug.so"
xdebug.auto_trace = on
xdebug.auto_profile = on
xdebug.collect_params = on
xdebug.collect_return = on
xdebug.profiler_enable = on
xdebug.trace_output_dir = "/tmp/ad/xdebug_log"
xdebug.profiler_output_dir = "/tmp/ad/xdebug_log"
放上几个demo图片:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载