pyjailの世界へようこそ
print(eval(f"# {input('> ')}\\n'Hi!'"))
コメント行から脱出する問題。
コメント脱出といえばSECCON beginners CTF 2024のcommentatorが思い出されます。
上記の問題にあるように、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苦手なことから入門とはいえ比較的難易度は高かったようです。