コードの実行は何です:
ときにアプリケーションを使用すると、番号がコード関数の文字列に変換することができ呼ぶとき、ユーザはコードインジェクションの脆弱性になります。この文字列を制御することができるかどうかを考慮しませんでした。
コードの実行機能:
- PHPで:evalを、アサート、にpreg_replace( '/ * / E'、 ' データ)。
- ASPで:evalを、exevute、executeglobal
- JSPで:いいえJSP、PHPのeval関数において、反射など0GNL、SpeIで、MVELなどの反射機構、に基づいて、エンジンの式を使用して、使用することができます
発見された脆弱性:
由于thinkphp存在代码执行漏洞,我们可以使用谷歌语法来搜索这类网站。
如:inurl:think.php
学习代码审计,自己找一些代码执行漏洞
実験環境:
- PHPstudy
- Firefoxの
シミュレーション
直接実行- wwwディレクトリに2つのPHPファイルを作成し、それぞれのURLを追加し、簡単なコードを書く?data=phpinfo();
に
eval()
関数の例:
<?php
$data = $_GET[ 'data'] ;
eval ("\$ret = $data;") ;
echo $ret;
?>
preg_replace()
関数の例:
<?php
$data = $_GET['data'] ;
echo preg_replace("/test/e",$data,"jutst test");
?>
シンプルバイパス-入力?data=");phpinfo();//
に
eval()
関数の例:
<?php
$data = $_GET['data'];
eval("\$ret = strtolower(\"$data\");");
echo $ret;
?>
防衛のコードの実行方法
1、JSONバックアップアレイを使用して、evalを読んで使用する必要はありません
2を、ローカルにevalを使用しなければならないが、我々は厳密にユーザーデータを処理しなければならない(ホワイトリスト、ブラックリスト)
3は、制御可能な単一引用符文字列コードを含み、使用にaddslashesを挿入する前(にaddslashes、合計相場、はhtmlspecialchars、にhtmlentities、mysql_real_escape_stringの)エスケープ
(preg_replace_callback())を置き換える)(preg_replace_callbackを使用して、電子のにpreg_replace剤の使用を放棄するために4
。5 Eにpreg_replace修飾子場合、使用されなければなりません単一引用符に包まれたオブジェクトは、確かに定期的(にpreg_replace +定期的に)一致します