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