[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閲覧)