日記

日本語の勉強のためのブログ

【ksnctf】Q14 Johnを解いた

久しぶりに自力で解けたので考えたことなどをメモ。write-upと呼んでいいのかわからないが・・・

環境

問題文

FAQによると問題文の転載もOKとのことなのでありがたく使わせていただく(ありがとうございます)。

問題のリンク: https://ksnctf.sweetduet.info/problem/14

user00:$6$Z4xEy/1KTCW.rz$Yxkc8XkscDusGWKan621H4eaPRjHc1bkXDjyFtcTtgxzlxvuPiE1rnqdQVO1lYgNOzg72FU95RQut93JF6Deo/:15491:0:99999:7:::
user01:$6$ffl1bXDBqKUiD$PoXP69PaxTTX.cgzYS6Tlj7UBvstr6JruGctoObFXCr4cYXjIbxBSMiQZiVkKvUxXUC23zP8PUyXjq6qEq63u1:15491:0:99999:7:::
user02:$6$ZsJXadT/rv$T/2gVzYwMBaAsZnHIjnUSmTozIF/ebMvtHIJjikFehvB8pvy28DUIQYbTJLG6QAxhzJAKOROnZq0xV4hUGefM1:15491:0:99999:7:::
user03:$6$l0NHH5FF0H/U$fPv3c5Cdls/UaZmglR4Qqh8vhpIBsmY1sEjHi486ZcDQ2Vx5GY0fcQYSorWj6l42jfI47w437n.NBm8NArFyT/:15491:0:99999:7:::
user04:$6$wAnAP/NMiLa/yE$.gi4r3xYuPTg5z2S59z2EzFbqpmwZYy1tBSVA9/hqTFnWY0tHqXbwL.dFQwHzKTuzXV6WMgjEZlyzUPGzVtPb0:15491:0:99999:7:::
user05:$6$jTgFhKHk/$xQIdn7snYAAGvifxC02YLXcAKkiuPbJ3KBkH2Q8BZ12TL2aepaUJotgfKfNSPCXWebyCY/skOmOymok.KIm5D0:15491:0:99999:7:::
user06:$6$8LXZt/zPbLtIn1o$ynsZxueG88Kz0vDr3cyK.21cv4GWw9iaW9oYZcmZ9SY5UpMQS1wl2/dbXGyR8WzVBKKP/6k8VYvWuiNQ3We52/:15491:0:99999:7:::
user07:$6$jnA8m/S5aU0/$PGrG8mDy.vs3W9xhG1qd56eOEainH9xntY48.duznt989TXMn6J.scOBqp4BWg3fHWxoFgBn26LYvcnqWGcoF1:15491:0:99999:7:::
user08:$6$ITB7n/qsP$fmrmItHX9B96PmhsxIX21vdYDvFHiIPnyzRFjWIbcd3y/DRHCm0lzyJEnWlQChdDAiFUFXtqwoTbEdREXQ99M.:15491:0:99999:7:::
user09:$6$LpgLJrjPV$6sa0KW08Q10S.C/BSUHlHaQZT5n8uIygZSsWP5drdmuhI7c17wWCK/GEzQS7g8EL//5bqdjo1C90smTDhLEcF1:15491:0:99999:7:::
user10:$6$0VSPwOzcL//6QR$RgtMpkfVPb5Cli7cjVE5jMgJlN10xY1R3jxRNrY0l/84R3.NvxP3I8XtkMkonU6DKhge0JGp54DZLQqUN9kL7/:15491:0:99999:7:::
user11:$6$zryub/lvSKj7Xl$eazV2fmcJa5M3qMovQqARGK59Qxtfv2zjUJvphKNnyUMVyBn.SjEFhRT/mAjz3QFroNbwmrYLtrpyxjH.q64n/:15491:0:99999:7:::
user12:$6$tAkM0dDUFe76d8K/$OnNGFEuIf1seMlLHb.8.y5/cpmBUcMbhLhOfFdd0E/DKASXPS4riB4uz2Fg3om9Atg.g7s.JFoKV0uuJ461KV/:15491:0:99999:7:::
user13:$6$0cCdE5Nfqu/HFS$PwnLdS.chtm6qGwf2Uuiko7V3fMwjcQ52M8hslvoReFQ9XOBXw603Ok20VJwWAwR6RNv6adn6a6kuRm5Y3.ge1:15491:0:99999:7:::
user14:$6$RgPs7j4eSa/v$71CeLB9Z1Fafi6vi2ou5LzRz5xXWTzvZeZgelnm2przx.JQYp21p8h2BCyTYFd10MKD/cquPvn42vSzlJJJ8Q1:15491:0:99999:7:::
user15:$6$1uhGQ/5DwMp/$UjYTEVaChEzmUITvWpaZVvYYDLBULpI4IEyieClSsyC2NHwEnaDx6xwtUVpQPxEhi6R7OQhX68Oo5CfilYqDQ.:15491:0:99999:7:::
user16:$6$V/InSacMp8U$UpDgdL/GS/kdFmn1rO97YkLAeTgofu4fDVUGoV1PWnVFxUtVyx24ix5hJp53FkBuqdzmXgwGcb6MU5AWJWjaB1:15491:0:99999:7:::
user17:$6$d6mWSrE8vxDe$UqTgKPfKxm0/Aboz8DeFNNiZsFBYyE6iGpqUzSX4UpWSDfXt1DERBtI29H2Gz5q.6ls3730naAo31wAacvs/L0:15491:0:99999:7:::
user18:$6$ulcKu/ddomcNGRJj$i8XB1D4YtLGbAHX0XHX88ObUWw8dQsrTqoliGAU//zGHNLmLeWd.4k5YHViNSy3rlGTQSRPtutlKnub8aRnzy0:15491:0:99999:7:::
user19:$6$cVnhE9CwfSIIA$wrn6p3cgfz.JOc6KVkieNCtc.FzkjUdcDDlivn0APnYv9/z4tt7hUpPft5T8kMmnx/hiF92vjnDxcauVyQySp.:15491:0:99999:7:::
user20:$6$2Pg2VxXg$K8AqsCMPAFiXSxNjETBWqEHQom9Q5dDIz9/nItxpQatrG9gvv9CRJP3kQzKLbRf13FxfOXpeEYIpOEK.2i1HP0:15491:0:99999:7:::
user99:$6$SHA512IsStrong$DictionaryIsHere.http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt:15491:0:99999:7:::

思考内容

1. user99

まず気になったのが、問題文末尾に書かれている文SHA512IsStrongと、URL http://ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt である。リンク先は何やらよくわからない単語の羅列となっている。以下にその内容の先頭を示す。

finding
EACH
respond
THING
PROBATIONARY
ABUSE
secretly
encyclopedia
SADIST
obvious
disrespectful
GROUND
japanese
black
arrives
international
they
possess
CASTS
(以下略)

2. $6$

訳が分からず正直この時点でやめたくなったが、もう少し問題文を観察してみた。
するとuserXX:に続く文字列がすべて$6$から始まっていることに気づいた。
そのまま検索しても何もヒットしなかったため、先ほど書かれていたSHA512からハッシュに関係するのではと連想し、$6$ hashと検索した。すると問題文はlinux/etc/shadowファイルに関係しているらしいことがわかった。

3. /etc/shadow

/etc/shadowはユーザ名とハッシュ化されたパスワードなどを記録しているファイルのようだ。

(手元のUbuntuでも確認しようとcat /etc/shadowを実行したが、エラーが出た。実はこのファイルは特権ユーザしか閲覧できないため、sudo cat /etc/shadowとすることで閲覧が可能となる。)

問題文が/etc/shadowファイルの中身を表しているので、ここに書かれたパスワードをどうにか復元すれば、何かがわかりそうだ。

4. 辞書攻撃

ハッシュ化されたパスワードの復元といったらブルートフォースや辞書攻撃があるなと考えていたところ、一番最初に提示した怪しげなURL http://ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt を思い出した。
URLにdictionaryと書いてあるので、おそらくリンク先の単語の羅列は辞書であり、この辞書を用いてパスワードを特定していくのだろう。

5. John the Ripper

/etc/shadow 辞書攻撃などで検索したところ、ピッタリなツールを発見した。それがJohn the Ripperである。

参考:https://zenn.dev/fire_fire_2/articles/7d1f5ecfdd1e85

5.1 インストール

自分の環境ではsudo apt install johnで簡単にインストールできた。

5.2 使用法

インストール後、とりあえずjohnと打ち込んだところ使用方法が表示された。

$ john
John the Ripper password cracker, version 1.8.0
Copyright (c) 1996-2013 by Solar Designer
Homepage: http://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]
--single                   "single crack" mode
--wordlist=FILE --stdin    wordlist mode, read words from FILE or stdin
--rules                    enable word mangling rules for wordlist mode
--incremental[=MODE]       "incremental" mode [using section MODE]
--external=MODE            external mode or word filter
--stdout[=LENGTH]          just output candidate passwords [cut at LENGTH]
--restore[=NAME]           restore an interrupted session [called NAME]
--session=NAME             give a new session the NAME
--status[=NAME]            print status of a session [called NAME]
--make-charset=FILE        make a charset, FILE will be overwritten
--show                     show cracked passwords
--test[=TIME]              run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..]  [do not] load this (these) user(s) only
--groups=[-]GID[,..]       load users [not] of this (these) group(s) only
--shells=[-]SHELL[,..]     load users with[out] this (these) shell(s) only
--salts=[-]N               load salts with[out] at least N passwords only
--save-memory=LEVEL        enable memory saving, at LEVEL 1..3
--node=MIN[-MAX]/TOTAL     this node's number range out of TOTAL count
--fork=N                   fork N processes
--format=NAME              force hash type NAME: descrypt/bsdicrypt/md5crypt/
                           bcrypt/LM/AFS/tripcode/dummy/crypt

5.3 使ってみる

今回は/etc/shadowファイルを、辞書http://ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txtを用いて攻撃したいので、以下の手順に沿って使用した。

  1. 問題文を適当なtxtファイルに保存する。ここではファイル名をshadow.txtとした。
  2. http://ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txtの全内容を適当なtxtファイルにコピペする。ファイル名はdic.txtとした。
  3. john shadow.txt --wordlist="./dic.txt"を実行すれば解析が始まる。1分ほど待つ。
  4. 解析が終わったらjohn shadow.txt --showで内容を確認。

john shadow.txt --showで表示された内容のどこかにFLAGが隠れているのでそれを提出すれば終了である。 書いていいのかわからないのでヒントは書かないが、よく眺めれば気づくはず。