1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GoogleCTF #beginners/misc-media-db

Posted at

image.png

問題

image.png

解いてみた

通信先として書かれている以下にアクセスしてみます。

image.png

対話できるやつです。
歌手と曲を登録したり、ランダムに歌手を選んだりできるシステムのようです。

そして、添付ファイルをダウンロードして開いてみます。

image.png

Pythonのファイルでした。
内容を見る限り、さっきの接続先に置かれているPythonファイルっぽいので、このソースから脆弱な部分を見つけてflagをgetするという流れになりそうです。

ソースを見るとoauth_tokenというファイルに書かれているflagをoauth_tokensというテーブルに書き込んでいます。
歌手と曲はmediaというテーブルに書き込んだり読み出したりしているようです。

SQLインジェクションをどうやってやるかというところが問題な気がします。
SQL文を見てみます。

image.png

2や3が一番手っ取り早そうですが、「'」を空に置換している処理があることがわかりました。
なので

' or 1 = 1 --

のようなことができないということです。

よく見ると1も置換しているものの「'」は置換していないことが分かります。
そして4を見ると歌手をselectして、その文字列でさらにselectしていることが分かります。

ということはやりたいことは以下の流れでしょうか。

  • 1でSQLインジェクションできる文字列を歌手としてDBに保存する
  • 4でその歌手をselectして、SQLインジェクションをして、flagをgetする。

音楽テーブルとflagのテーブルが異なるのでunionを使用する必要がありそうです。
テーブルのカラムについてはCREATE TABLEのところを見れば書いてあるのでわかりました。
まとめますとどのようなSQLを投げたいかというと

SELECT artist, song FROM media WHERE artist = '' union SELECT 1, oauth_token FROM oauth_tokens --

というような感じでしょうか。
実際にやってみます。

image.png

できました。

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?