metasequoia_2020_samsara
查看保护
分析
case1:这里面没有什么 ,就是不能大于7次申请,申请时大小为malloc(0x8),上自动化函数
1 | def add(): |
case2:指针没有清0,uaf
1 | def delete(index): |
case3:修改函数
1 | def edit(index,content): |
case4:输出v7的地址
1 | def show(): |
case5:将v9给v7
case6:当v8等于0xdeadbeef的时候触发后门
漏洞利用思路
因为有uaf,并且创建堆为malloc(8)所以可以double free让v7输出,算出v8,覆盖v8 get flag
编写exp
直接一次完整double free
1 | add() |
再申请两个add,此时可以输入v9,从而给v7值,然后调用case4可以输出v7地址,得出v8地址
1 | add() |
修改chunk0的fd地址,再连续申请两次,就可以控制v8里面的数据了
1 | edit(0, v8_addr) |
add()第一次拿掉0x555555606010,第二次拿掉0x7fffffffde40,add()第二次的id为5,所以可以直接edit(5)就可以控制v8的数据了
1 | r.sendline('6') |
exp
1 | from pwn import * |