CTF/MISC

[DCTF] Safe Space - MISC / Pyjail

SecurityMan 2022. 4. 19. 14:30

 

이번 대회에 MISC 문제들은 다 어려웠던것 같다.

 

MISC는 miscellaneous의 약자로 여러가지 잡다한 이라는 의미를 가지고 있다.

 

해킹이라고 보긴 좀 뭐하고 해킹할때 쓰일수도 있는 잡다한 기술을 쓸수있는지 물어보는 문제이다.

 

반응형

 

문제 설명을 읽어보면 safe space에 플래그를 숨겨두었다고 한다.

 

그리고 자기 콘솔에 접속할수 있도록 해준다고 적혀있다.

 

빨간색으로 적혀있는 nc 51.124.222.205 13379 가 이 문제의 접속 주소와 포트이다.

 

nc 명령어를 이용해서 접속이 가능하다.

 

 

문제 서버에 접속하면 사용자의 입력을 받는다.

 

시험삼아서 cat flag / import os 이런 명령어들을 쳐봤는데

 

필터링이 걸려있는지 제대로 동작을 하지 않았다.

 

일단 문제 설명을 봤을때 사용자 입력을 받는 부분은 python 쉘인거 같다.

 

문제 출제자가 이런 쉘에다 여러가지 제약조건을 걸어놓는데, 

 

이런 제약조건들을 다 우회해서 플래그를 읽는 이런 유형의 문제를

 

Pyjail 또는 Python sandbox escape 라고 한다.

 

 

구글에 좀 검색해보니 pyjail 문제를 풀때는 __builtins__ 를 많이 사용한다고 한다.

 

built-in 함수라고 해서 파이썬에 기본으로 내장되어 있는 함수들을 접근할수 있도록 해준다고 한다.

 

이번 문제에도 서버에 접속해서 __builtins__ 라고 입력해보니 위처럼 출력값이 나왔다.

 

{'open': <built-in function open>, 'print': <built-in function print>, 'list': <class 'list'>, 'FILE': 'flag.txt'}

 

이번 문제에서는 위에 있는 네가지만 쓸 수 있는듯 하다.

 

그런데 이상한게 open, print를 각각 입력해봤더니 Yeah no. 라고 출력이 나왔다.

 

정확하게 무슨 의미인진 모르겠지만 no 라고적힌거 보니 필터링이 걸려있나보다.

 

list는 입력했을때 <class 'list'> 라고 출력되는걸로 보아 사용이 가능한거 같고,

 

FILE은 입력해보면 flag.txt 라고 출력이 되는걸로 보아 전역변수처럼 사용이 가능한거 같다.

 

구글에 검색해보니 __builtins__.__dict__['__import__'] 이런식으로 많이 쓰던데

 

이번 문제에서는 적용이 안됐다.

 

왜냐하면 위 사진처럼 __builtins__ 를 제외하고 "_" (언더바) 를 입력하면

 

Not gonna let you use that. 이라는 문구가 출력되면서 필터링이 됐음을 알려주기 때문이다.

 

 

list를 써봐야겠다고 생각하면서 이것저것 해보다가

 

list(__builtins__) 라고 입력했더니

 

위처럼 출력이 나왔다.

 

뭔가 배열처럼 접근이 가능할 것 같았다.

 

 

맨 처음에 __builtins__ 를 입력했을때 출력이

 

"key":"value" 인 dict 형태로 출력되었으니

 

위에서 list(__builtins__) 에서 values() 를 붙여 value 값들을 뽑아냈다.

 

이렇게 한건 open 함수를 쓰기 위해서이다.

 

 

[0]을 붙혀서 뽑아낸 value 값 중 open을 선택해주고

 

 

FILE 변수를 집어넣어서 flag.txt를 열도록 지정했다.

 

list(__builtins__.values())[0] 이 부분이 open 이 되는거고

 

(FILE) 이 부분이 ('flag.txt') 가 된다고 생각하면 된다.

 

간단하게 쓰면 open('flag.txt') 이다.

 

이제 여기서 파일 내용을 읽어야 하는데

 

처음에 나왔던 print를 꼭 사용해서만 읽어야 하는줄 알고

 

이것저것 삽질을 많이했다.

 

 

혹시몰라서 마지막에 .read() 를 붙여봤더니

 

플래그를 찾을 수 있었다.

반응형