KSNCTF #14 John
問題
考えたこと
ぱっと見てわからなかったので意味ありそうなタイトル John でググるけど John が一般的すぎてそれっぽいのはひっかからない。
問題文見てたら user00, 01, ..., 20 ときていきなり 99 になっているのでなんだろうと思ったらメッセージだった。
user99:$6$SHA512IsStrong$DictionaryIsHere.http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt:15491:0:99999:7:::
SHA512 is strong. Dictionary is here: http://ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt
と読める。見てみたら単語がずらっとならんでて前問を思い出した。
どうやら何かが SHA512 で暗号化されているらしい。SHA512 は解けなさそう。
この辺でググりなおしてみる。john dictionary, john sha512 ときたところでそれっぽいのが出た。
John the Ripper というパスワードクラッカーがあるらしい。apt-get john
で簡単にインストールできる。
John the Ripper のパスワード解析には
- ユーザーネームからパスワードを推測する方法
john --single myPasswordFile
- 辞書を用いて攻撃する方法
john --wordlist=myDictionaryFile myPassswordFile
- ルールを指定して総当り
john --incremental:Rule myPasswordFile
の3通りあるらしく、単に john myPasswordFile
とすると john 側で持ってる辞書とかを使いながら全部の方法でパスワードを推測するらしい。
今回は dictionary というファイルが与えられているので辞書だけ使ってアタックする。問題文を users, 上の URL から拾ってきた辞書を dictionary として保存して john --wordlist=dictionary users
実行したら5秒くらいで解析終わった。結果を見るには john --show users
でOK
user00:FREQUENT:15491:0:99999:7:::
user01:LATTER:15491:0:99999:7:::
user02:ADDITIONAL:15491:0:99999:7:::
user03:GENDER:15491:0:99999:7:::
user04:__________:15491:0:99999:7:::
...21 password hashes cracked, 1 left
解析できてないのは user99 だけなので問題ない。どう考えても頭の文字を拾っていけば旗取れそうなので適当にコード書いたら旗取れた。
begin File.open 'result' do |file| file.each do |line| line.match(/^user\d\d:(.*)/) {|match| print match[1][0] } end puts end rescue => e puts e.message end
思ったこととか
問題文見た時なんかのデータベースかな〜とか思ってたけど、途中で Linux のアカウント情報であることを知った。せっかくなので調べてみた。
参考になるページ
何も知らない人間にとってはググってツール使って終わりみたいな感じになってしまうけど、それじゃあ意味ないので、問題見るたびにいろいろ調べてみたい。ちゃんとわかってる人にとっては最後のメッセージなくても SHA512 で暗号化されてるアカウント情報だってわかる。ググって解けるかどうかよりそういうところが重要な気がする。