ホームページ  >  記事  >  バックエンド開発  >  独自の PHP 半自動コード監査ツールを構築する

独自の PHP 半自動コード監査ツールを構築する

WBOY
WBOYオリジナル
2016-06-23 13:20:06972ブラウズ

0x00 コード分析 (動的分析) 用の PHP 拡張機能

1. 基本環境

#!bashapt-get install php5apt-get install php5-devapt-get install apacheapt-get install mysql

2. 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

3. テスト

#!php<?php for($i=0;$i<100;$i++){    echo $I;    sleep(1);}?>

CLI

りー

apache

#!shellphp test.php &ps -axu|grep php./phptrace -p pid

Four.phptrace解析

実行されたコードは次のとおりです:

#!bashcurl 127.0.0.1/test.phpps -aux|grep apache./phptrace -p pid

実行順序は次のとおりです:

#!php<?phpfunction c(){    echo 1;}function b(){    c();}function a(){    b();}a();?>

パラメータの意味:

lineno1行番号この関数に対応するログ出力: そうです
Name Value 意味
シーケンス int| 実行された関数の数
type 1/2 1 は呼び出し元の関数を表し、2 は関数の戻り値を表します
level -10 実行の深さ (例: 関数 a) bを呼び出すと、aのレベルは1、bのレベルは2となり、順番に増加します
func eval 呼び出される関数の名前
st 1448387651119460 タイムスタンプ
params string 関数のパラメータ
file c.php
5. 論理分析

1. 監視プロセスを解析します

バックグラウンドプロセスを開き、トレーサーのないプロセスがある場合は、すぐにホストします

2.json 抽出

を抽出します。各ファイルの json の抽出プロセスは次のとおりです:

すべてのファイルに便利

ファイルを読み取る
  1. json を抽出し、seq で並べ替える
  2. type=2 と type=1 を抽出してマージする
  3. 同じものを保存する上司部下関係のレベルに応じて辞書を作成
  4. seqでソートし、ヘッダ関数を取り出して出力
  5. 悪意のある関数を抽出し、level=0までレベルを抽出
  6. 対応する関数は以下の通りです:
  7. #!basha>b>c>echo
  8. 3. データレビュー

人間によるレビューの前に、危険な関数を追跡し、関数が実行される前に出力の関係を整理します。

デモを入れます

6. XDEBUGを使用します

インストール

#!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 }

php.iniを変更します

#!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=

いくつかのデモ画像を入れます:

7.メリットとデメリット

デメリット

人の関与 それは強力すぎるため、手動操作なしに単独で実行することはできません。

利点

精度が高く、オブジェクト指向コードとプロセス指向コードの両方を分析できます。

0x01 構文解析 (静的解析)

ケース:

http://php-grinder.com/

http://rips-scanner.sourceforge.net/
  • 1 php-parser を使用します。
  • はじめに:

http://www.oschina.net/p/php-parser

https://github.com/nikic/PHP-Parser/

  • 2. インストール
  • #!bashapt-get install php5-xdebug
  • PHP >= 5.3; PHPからPHP5.6
  • PHP&GT;
#!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"
を抽出します

その後、結合した後、元のステートメントが以下であることがわかります:

#!shellgit clone https://github.com/nikic/PHP-Parser.git & cd PHP-Parsercurl -sS https://getcomposer.org/installer | php

4. 論理分析

コード分析

ライブラリによる構文分析

結果を抽出する

危険な関数を抽出する

危険な関数に存在する変数を抽出

上記からこの変数の代入方法を抽出

制御可能な結果を​​解析
  1. 結果を出力
  2. 5. メリットとデメリット
  3. デメリット
  4. オブジェクト指向プログラム比較的弱いです。
  5. 利点
  6. 大量の自動分析に適しており、手動操作なしで単独で実行できます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。