【ksnctf】#6Loginやってみた

問題

ksnctf.sweetduet.info

とりあえず

とりあえずIDはadminとのことなのでSQLインジェクションをやってみる。

'or 1=1;--

レスポンス

ログインには成功したのでクリアかな?と思えば答えは'admin'のパスワードだよ^^と言われてPHPのコードを見れるので読んで見る。

情報整理

この段階で使えそうな情報はこんな感じ?

  • adminのパスワードが答え
  • adminのパスワードはuserテーブルの中
  • SQLインジェクションが可能
  • ID,PasswordはPOSTで投げられている

SQL文を考える

上記の情報を踏まえて、$passにadminのパスワードを特定するSQLを投げれば良さそう。(下はパスワードが20桁以上あることの確認)

'or (select length(pass)from user where id =='admin')>20;--

まずこのSQLをつかってadminのパスワードの長さを特定する。 (下はパスワードの1文字目がFか確認している。)

'or substr((select pass from user where id = 'admin'),1,1) = 'F';--

次にこのSQLを使ってadminのパスワードのn文字目を取り出しレスポンスから正しいか確認する。手作業でやるとハゲるので、プログラムを書こう・・。

プログラム

gistebb073e0719d4fba634a3f91af2209d0