久しぶりに自力で解けたので考えたことなどをメモ。write-upと呼んでいいのかわからないが・・・
環境
- Windows10 Home
バージョン: 21H2 - Windows Terminal
バージョン: 1.11.3471.0
問題文
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
を用いて攻撃したいので、以下の手順に沿って使用した。
- 問題文を適当なtxtファイルに保存する。ここではファイル名を
shadow.txt
とした。 http://ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt
の全内容を適当なtxtファイルにコピペする。ファイル名はdic.txt
とした。john shadow.txt --wordlist="./dic.txt"
を実行すれば解析が始まる。1分ほど待つ。- 解析が終わったら
john shadow.txt --show
で内容を確認。
john shadow.txt --show
で表示された内容のどこかにFLAGが隠れているのでそれを提出すれば終了である。
書いていいのかわからないのでヒントは書かないが、よく眺めれば気づくはず。