天创培训:您身旁的信息安全培训专家!
金沙88128线路检测
栏目列表
金沙澳门官网4166
开班方案金沙贵宾会网址
主讲教师   张教师、高教师等
开课工夫   2019年7月22日-30日
培训方法   实地/面授
讲课天次   9天
上课工夫   09:00 -- 17:00
主讲教师   张教师、王教师等
开课工夫   2019年7月16日-21日
培训方法   实地/面授
讲课天次   培训5天+测验半天
上课工夫   09:00 -- 16:30
最新更新
手艺中心您当前位置: >  > www.js77999.com

打造本人的php半自动化代码审计东西

作者:天创培训  滥觞:px.tcnet.com.cn  更新工夫:2016-01-15  关键词:,

一.根底情况
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"
七.优缺点
缺陷
报酬到场力度较大,无法停止离开野生的操纵停止自力施行。
长处
精准度高,关于面向工具和面向历程的代码都能够停止阐发。
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/
二.安装
git clone https://github.com/nikic/PHP-Parser.git & cd PHP-Parser
curl -sS https://getcomposer.org/installer | php
PHP >= 5.3; for parsing PHP 5.2 to PHP 5.6
php composer.phar require nikic/php-parser
PHP >= 5.4; for parsing PHP 5.2 to PHP 7.0
php composer.phar require nikic/php-parser 2.0.x-dev
三.测试
include '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();
}
输出以下:
Array
(
    [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
                )
 
        )
 
)
因而可知,我们需求提取出
[0] => PhpParser\Node\Expr\Eval_ Object
[name] => _POST
[parts] => Array
                                        (
                                            [0] => c
                                        )
然后停止拼接以后便可发明原始语句是:
eval($_POST[c][/c])
四.逻辑阐发
代码剖析
经由过程该库停止语法分析
提取成果
提取伤害函数
提取伤害函数中存在的变量
从上文中提取此变量的赋值方法
分析出可控成果
输出成果
五.优缺点
缺陷
关于面向工具的法式停止阐发比力弱。
长处
合适大批量的自动化阐发,能够离开野生操纵停止自力施行
 




0

上一篇:

推荐浏览

金莎娱乐场官网
 |   |   |   |   |   | 
版权所有:江苏天创科技有限公司 苏ICP备16028135号-2
姑苏总部地址:江苏省苏州市十梓街327号 电话:0512-65129087 传真:0512-65157410 邮编:215000
南京分公司地址:南京珠江路88号新世界中心A座 电话:025-84533276 传真:025-84533286 邮编:210000