banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

一道CTFのSQLインジェクション問題

事情起因#

ある内部テストのターゲットから、登録は公開されていないですが、バイトパルスのlationさんに復元してもらい、学びの姿勢で再現してみました。ターゲットのアドレス

注入方法の探求#

ターゲットを開くと、以下のようになっています:

image

見た目は「簡単な」ログインボックスです。burpを使ってrepeaterを開始して探求します。

image

見た目は普通で、usernamepasswdの 2 つのフィールドしかありません。まずはユニバーサルパスワードを試してみましょう。

image

ログインに失敗しました。ここで小技を紹介しますが、burpでパラメータを変更する際には、自分で追加した部分を選択してctrl+Uで URL エンコードを行うことをおすすめします。

adminにシングルクォートを追加しても何の反応もありませんでした。後ろにand 1=1and 1=2を追加しても何の反応もありませんでした。

passwdフィールドにシングルクォートを追加しても何の反応もありませんでした。

image

エラーインジェクションを試してみます:

image

これも何の反応もありませんでした。ワイドバイトインジェクションを試してみます:

image

エラーが発生しました。エラーステートメントを閉じるために試してみます:

image

テストの結果、--+の他にも#-- -も閉じることができることがわかりました。

インジェクションデータ#

いつものように、列数をクエリします:

image

エラーが発生しましたが、エラーメッセージにnear 'der by 3と表示されているので、私たちのorが消えてしまったことがわかります。ダブルワイトで回避してみましょう:

image

image

order by 3は問題ありませんが、order by 4でエラーが発生しました。union selectでエコーフィールドを確認します:

image

直接エコーされるのは「ログイン成功、flag は flag1 テーブルにあり、列名は key1」と表示されます(ここでは少し重なって表示されています)。値を確認しましょう。

image

変化はありませんでした。

エラーインジェクションの場合、information_schemaデータベースへの読み取り権限が必要です。

information_schemaデータベースへの読み取り権限がない場合、列名とテーブル名を推測する必要があります(難しいです)。

それでは、以前のエラーインジェクションを使用してデータをクエリしましょう:

image

注意:%df%27の後ろには%があります。

参考記事:

以上です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。