blog

データ・セキュリティ - ダブル・クエリ・インジェクション分析

ダブルクエリインジェクションの紹介、ダブルクエリインジェクションの意味は、これは少し難しい説明ですが、一般的な用語では、ネストされたサブクエリです。サブクエリを理解し、クエリのキーワードはselect...

Jul 16, 2025 · 4 min. read
シェア

これは、2,4,5,6,7,8がリターンビットであることを示しています。

また、mysqlのエラープロンプトに返さなければならないことですが、phpの戻りエラープロンプトの2種類があり、次の図を見てください。

これは mysql が返すエラーです。

これはphpが返すエラーです。

floor()、rand()、count()などなど!

しかし、concat()関数は、仮にconcatが複数の文字を連結することができる連結関数であるとします。

1concat("abc", "123")="abc123"

アスキーコードもサポートしています:

1concat("abc",0x22, "123")=abc "321

(0×22は二重引用符。セパレータとして使用可能)

ここで mysql に次のように入力します。

1select concat())

concatでクエリを実行するには、クエリを括弧で囲み、返されるデータが1つだけであることを確認します。

このステートメントにfromを追加すると、テーブル内のレコード数、つまりレコード数がバージョン番号の何倍かを返します。

まだ上映されていないんですよ!!!」!

したがって

1select concat(),floor(rand()*2)) from mysql.user;

(ここでは、ユーザーテーブルに4つのレコードを持つmysqlのデータベースを使用しています)

floor(rand()*2)は0/1の2つの乱数値を生成します)

注意:ここに表示されている値は、バージョン番号にrand()を加えたものです。

テーブルから始めると、その中に多くの行があり、ランダムな値が生成される可能性があるからです。

ここでは、彼は十分なレコードを持っているので、取得するために情報_schema.tablesを使用して、前の文のように、それを知ることができます!

グループ・バイの方がずっと爽やかです。

の文を見てください。

1select concat(),floor(rand()*2))a from information_schema.tables group by a;

ここで太字のaはaとして省略され、持っている、グループバイと言う、この役割は5.1.69-0ubuntu0.10.04.10をグループに、5.1.69-0ubuntu0.10.04.11をグループにすることです

(編集部注:もし読者の皆さんがここで何が起こっているのか分からない場合は、以下のリンクを実行してください。

1select concat(),floor(rand()*2)) from information_schema.tables

クリア)

最後に、このcount()関数にたどり着きました。

1select count(*),concat(),floor(rand()*2))a from information_schema.tables group by a

バック・コンカットの内容が返されます。

ERROR 1062 : キー 'group_key' のエントリ '15.1.69-0ubuntu0.10.04.1′ が重複しています:

この話はこのためだけにあるんです!!!」!

さて、あなたに小さなデモ(最後にこの記事でデモ)を与えるために、しかし、リターンのビットが表示されません得ることができないので、ほんの少しの

1union select 1 from ,concat(floor(rand(0)*2)),)a from information_schema.tables group by a)b

ここでは、データベースのいくつかのパラメータを設定し、yi.phpとして保存し、デモが正式に開始されます次のデモになります!

これが普通の状況です:

シングルクォートで。

1, 最初にデータベースのバージョン、ユーザー、現在のライブラリ名を読み込みます。

データベースのバージョンはこちら: 5.1.28-rc-community

ユーザーは root@localhost です。

データベース名: test

2、そして、データベースを読み込む何ライブラリ

ここで、sql文は複数のレコードを返すので、返される項目の数を制限するためにlimitを使用することに注意してください、limit 0,1は最初のレコードです。

limit 1,1は2番目のレコード

(編集者注:データベース名を1つずつ表示するように制限を制御することにより、前の0または1を無視してください)

3.次に、利用可能なテーブルを調べます。

dvwaのデータベースがあるので、それをデモに使います。

太字はdvwaの16進数値で、dvwaのユーザーテーブルを示します。

4.次に、利用可能なフィールドを確認します。

次に、user,passwordフィールドを取得するためにlimitの値を変更します。

5、そしてフィールドの値を読み取ります。

このようにしてフィールドの値を取得し、データベースをまたいでデータを読み込む場合は、データベース名とその後にテーブル名。現在のデータベースはtestで、dvwaライブラリのusersテーブルを読み込むので、dvwa.usersと書く必要があります。

まあ、基本的にはそれだけです。

予防的アプローチ:

ひとつはフィルター。

もうひとつは、パラメータ化されたクエリで、クエリ文に渡される値が何であろうと、クエリ文を実行するための変数としてしか扱われない、死ぬまで固定されたクエリ文の一種です。

デモのソースコード:

<?php 
$dbuser = "root"; 
$dbpwd = "";     //以下はmysqlのパスワードだ。 
$db = "test"; 
$conn = mysql_connect("localhost",$dbuser,$dbpwd) or die("error"); 
mysql_select_db($db,$conn); 
$id = $_GET['id']; 
$query = "select * from test where id =$id"; 
$result = mysql_query($query) or die(mysql_error()); 
print_r(mysql_fetch_array($result)); 
//ちょっとしたメモ 
?> 

[via@Guangwai Cyber Security Group_台湾鳩].

Read next

Yahoo newsダイジェストのニュースアプリへの示唆

[]\nインターネットには「断片的な情報」があふれています。読者の情報過多の問題を緩和するために、伝統的メディアとオンラインメディアは2つの異なる道を試みてきました。\nThe Economistに代表される伝統的なメディアは、ニュースの作成が速く、意見が多いほど、専門的な報道とその能力によって、読者が必要な情報にアクセスしやすくなると考えています。

Jul 16, 2025 · 4 min read