【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

【ksnctf】 #9 Digest is secure!をやってみた。

ksnctf.sweetduet.info

 

  • Digest認証

問題文からDigest認証使うのだろうということで調べてみると、Wikipediaに分かりやすい解説が書かれていた。

Digest認証 - Wikipedia

WikipediaからDigest認証をパスするためには以下の値を揃えないといけないことがわかるので探していこう。

ユーザ名
 パスワード
 response
 nonce
 nc
 cnonce
 qop
 HTTPメソッド
 コンテンツURI
  • パケット調べる

f:id:Hpaeboiptle:20161118233325p:plain

 Wiresharkを使って配布されたパケットを開いてみるとNo.7,9,14,16でHTTP通信があり以下の値がGetできる。

ユーザ名  q9
 パスワード ???
 response

c3077454ecf09ecef1d6c1201038cfaf

 nonce bbKtsfbABAA=5dad3cce7a7dd2c3335c9b400a19d6ad02df299b
 nc

00000001

 cnonce  9691c249
 qop  auth
 HTTPメソッド  GET
 コンテンツURI

/~q9/flag.html

www.kiyori.co.jp

MD5は既に破られているので逆変換ができるのではないかと思ったので調べたら見つかった!!これでパスワードなくてもHash(A1)が使える!!

  • プログラム

Digest認証に必要な値は揃ったのであとは、サーバから受け取るnonceを受け取ってresponseを計算したら完成だろうということでプログラムを書いて終了!

CTF-Digest is Secure!!

  • 感想

Basic認証に比べDigest認証ではパスワードをそのまま送信せずMD5を使っていることから安全だと思ったが、MD5が既に破られてしまっているようなので、ログインするために別ページを設けるべきなんだろうと思った。

 

John

  • 問題

ksnctf.sweetduet.info

  •  とりあえず読む

なんかややこしそうな文字列が並んでるなー?暗号解読系かな?と思いつつ読んでみると??ん?これどこかで見た気がする・・

あ、Shadowファイル!!???

そしてuser99を見ると辞書ファイルはここだよーて親切に書いているのでjohn使って解析することがわかった。

f:id:Hpaeboiptle:20161121160211p:plain

  • John

今回私はLinuxKali上で作業してたのでインストールは不要でしたが、もし必要な場合はapt-getコマンドでインストールできると思います。

 

使い方が分からないので man john で使い方を見ます。

f:id:Hpaeboiptle:20161121161532p:plain

ほうほう、いくつかモードあるみたいですが今回は辞書ファイルの場所が示されているので--wordlistでできそうてことで、コマンドを叩く。

 

  • john --wordlist=shadowfile password.dic
  • john --show shadowfile

※shadowfileは問題文より抽出したuser00:~~~のファイル,password.dicは指定された辞書ファイルをDLしたものになります。

f:id:Hpaeboiptle:20161121162159p:plain

※画像は少し省略しています。

最初の1文字ずつ読んで行けばフラグになりそう。できた!