Jail Escape 와 관련된 문제
Hard 로 분류된 만큼 조금 어려운 문제였다.
대회 당시에는 못풀었는데 계속 시도해보다가 풀어버렸다.
#!/usr/bin/env python3
from string import ascii_letters
code = input('> ')
if any(c in ascii_letters for c in code):
print('You will never leave this place!')
elif any(c in '.:;,-_@"=/%\\' for c in code):
print('You will never reach this point, but still, you CANNOT leave!')
else:
exec(code)
문제에서 주어지는
HellJail.py 의 내용은 위와 같다.
사용자의 입력을 받아 code 에 저장하고
두 번의 필터링을 거친다.
첫번째는 입력값에 ascii_letters 가 있는지 검사한다.
이 부분때문에 기본적으로 알파벳은 못쓰게 된다.
두번째 필터링에서는 .:;,-_@"=/%\ 같은 특수기호들을 필터링 하고 있다.
모든 필터링을 다 우회해야 exec(code) 를 실행시킬 수 있다.
명령어 수행을 위한 웬만한 입력을 다 필터링 하기 때문에
우회가 불가능해 보이지만 우회할 수 있다.
첫번째 조건문 우회 방법은 이텔릭체를 사용하는 것이다.
아까랑 똑같이 id 를 입력해봤는데
아까랑 다르게 You wil never leave this place! 라는 문구가 나오지 않는것을 볼 수 있다.
이텔릭체는 온라인 에서 쉽게 변환할 수 있다.
(https://exotictext.com/ko/italic/)
두번째 조건문 우회 방법은
입력값을 exec(input()) 으로 주는 것이다.
새롭게 받아들인 input() 값은 필터링에 적용을 받지 않는다.
위에서 보이는것 처럼
exec(input()) 다음에 입력을 ;: 를 주었다.
두번째 조건문에서 필터링하는 특수문자이기 때문에
You will never reach this point, but still, you CANNOT leave!
문구가 출력되어야 정상이나,
exec(;:) 가 실행되어서 SyntaxError 가 나는 모습이다.
exec(input()) 먼저 입력하고, OS 명령어를 입력하면 문제를 해결할 수 있다.
이렇게 새로운 input() 에
import os;os.system('명령어') 라고 넣어주면
그 실행결과가 출력되게 된다.
'CTF > MISC' 카테고리의 다른 글
[n00bzCTF] Google Form 2 - MISC / ChatGPT (89) | 2023.06.25 |
---|---|
[n00bzCTF] Google Form 1 - MISC (79) | 2023.06.24 |
[DanteCTF] Hanging Nose - MISC / 3D / STL (70) | 2023.06.19 |
[DanteCTF] Flag Fabber - MISC / PCB (73) | 2023.06.17 |
[Really Awesome CTF] Missing Tools - MISC / Jail Escape (69) | 2023.06.09 |