[ksnctf] John

投稿日: 更新日:

問題

文字列が与えられました。一番下のuser99だけ少し違いURLがあります。

文字列が与えられた

解法

Jhonというタイトルとuser99のSHA512IsStrongからハッシュ値とJhonに何か関係があると思い調べてみると、Linuxのユーザーパスワード解析の記事が出てきました。
さらに調べると文字列の内容は/etc/shadowの内容であることが分かりました。
user99のリンクのテキストには英単語が並べてあったので辞書攻撃をすればよさそうです。
以下のプログラムを作成してWSLで実行しました。そうすると一致した文字列が出力されFLAGを得ることができました。

import crypt
import re

with open("dict.txt", "r") as f:
    dicts = f.read().split("\n")

#問題のテキストを読み込む
with open("text", "r") as f:
    texts = f.read().split("\n")

for text in texts:
    text = text.split(":")[1]

    salt = re.findall(r"^\$6\$.+\$", text)[0][:-1]
    pass_hash = text.replace(f"{salt}$", "")

    for s in dicts:
        hash = crypt.crypt(s, salt)
        if hash == text:
            print(s)
            break

参考

【CentOS】/etc/shadowのハッシュ化パスワードについて https://www.unknownengineer.net/entry/2017/08/16/184537
(2022/03/11閲覧)

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人