VolgaCTF 2019 writeup

Shadow cat

  • /etc/shadowencrypted.txtが渡される
  • /etc/shadowには、1文字のユーザ名とその暗号化されたパスワードなどが乗っており、encrypted.txtにはその1文字で構成される文字列が含まれており、単一替え字暗号だとわかる
  • /etc/shadowのパスワードを総当たりで解き、得れた替え字表を使って置換するコードを書いて実行したらFLAG
#!/usr/bin/env ruby

require 'unix_crypt' # gem install unix-crypt
org = []
ans = []
lines = File.read("./shadow.txt").split("\n")
lines.each do |line|
  org << line.split(":")[0]
  enc = line.split(":")[1]
  salt = line.split("$")[2]
  
  0x1f.upto(0x7e) do |i|
    hashpass = UnixCrypt::SHA512.build(i.chr, salt)
    if hashpass == enc
      ans << i.chr
      puts "Passed"
      break
    end
  end
end

encrypted = File.read("./encrypted.txt").chomp
puts "VolgaCTF{#{encrypted.tr(org.join(""), ans.join(""))}}"
  • VolgaCTF{pass_hash_cracking_hashcat_always_lurks_in_the_shadows}