セカンダリurldecodeインジェクションの原理
現在のほとんどのWebプログラムは、通常、addslashes()、mysql_real_escape_string()、mysql_escape_string()を使用するか、または注入を防ぐためにGPCをオンにして、パラメーターフィルタリングを実行します。urldecodeまたはrawurldecode関数がどこかで使用されると、セカンダリデコードが発生します。インジェクションをトリガーする単一引用符を生成します。
用下面的代码我们简单的了解一下。
<?php
$w = addslashes($_GET['id']);
$p = urldecode($w);
echo '$w = '.$w.'<br / >';
echo '$p = '.$p;
?>
/1.php?id=1%2527を送信します。これは、送信したパラメーターに単一引用符がないため、最初のデコード後の結果はw = 1 w = 1%27であり、%25は%としてデコードされます。プログラムがurldecodeまたはrawurldecode関数を使用してidパラメータをデコードします。デコード後の結果はw=1 p = 1 '単一引用符が正常に注入をトリガーしました。
原理が理解できたので、使い方はとても簡単です。
セカンダリurldecodeインジェクションの利用
二次urldecode注入的利用
<?php
$conn = mysqli_connect('127.0.0.1','root','root','qingfeng');
$uid = addslashes($_GET['id']);
$a = urldecode($uid);
$sql = "select * from news where id = '$a'";
$result = mysqli_query($conn,"$sql");
@$row = mysqli_fetch_row($result);
echo ('当前SQL语句:'.$sql.'<br />结果:');
print_r($row);
?>
Webページを開いてコンテンツを確認します(下の画像)。
以前の原則を見ると、単一引用符を%2527で置き換えると注入がトリガーされる可能性があることはすでにわかっているので、ここでは直接使用します。
クローズとコメントが正常に実行され、通常のSQLインジェクションのように結合クエリを使用できます。
id = 1%2527および1 = 2 union selectユーザー名、adminからのパスワード、
正常に挿入されたデータ、管理者のアカウントパスワード。
セカンダリurldecodeインジェクションに対する防御
- 実行のために渡されるパラメーターを決定するために循環し、外部から送信されたデータに注意することができます。
- データベースからデータをフェッチする場合、クエリしたデータを簡単に信頼することはできません。同じエスケープまたは差別を行う場合
は、グループに参加して一緒に学習できます。!!