CTF/MISC

[DanteCTF] HellJail - MISC / Jail Escape

SecurityMan 2023. 6. 20. 11:00

 

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('명령어') 라고 넣어주면

 

그 실행결과가 출력되게 된다.

반응형