Challenge

pyjailの世界へようこそ

print(eval(f"# {input('> ')}\\n'Hi!'"))

Solution

コメント行から脱出する問題。

コメント脱出といえばSECCON beginners CTF 2024commentatorが思い出されます。

上記の問題にあるように、pyjail問題では度々

input(">>> ").replace("\\r", "")

のように\\rが除去されます。

これは何故かというと、inputがLF \\n、CR \\r、CRLF \\r\\nを改行として扱うためです。 たとえば、DEL \\x7fやTAB \\tが入力されても行編集には使われず、文字として認識されるので、\\n\\rだけが特別になります。 さらに、同じ改行でも\\nはinputの区切りとなりますが、\\rは区切りとなりません。 そのため、\\r で改行を行い、コメント行を脱出できることになります。

脱出後は

[入力]
'Hi'

という形を、式として評価させる必要があります。

行を跨ぐためにバックスラッシュ、式をつなぐためにor を用いると次のように書けます。

__import__("os").system("cat /flag-*") or \\
'Hi'

こうなる入力が回答となります。

補足

LLMがjail苦手なことから入門とはいえ比較的難易度は高かったようです。