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苦手なことから入門とはいえ比較的難易度は高かったようです。