ffly学姐太阴险了,不管是这次的还是上次的ezshellcode,都存在一些很难发现的地方,如果只凭第一印象的感觉(之前学了一个词叫hack feel)做题,就会变成🤡
这道题假如不是我某一次在exp中删除一些先前的一些尝试操作漏删掉了了一个show,结果执行的时候莫名其妙的出现了地址(我看到这串地址的时候还以为是出现魔法了哩,按照我之前的想法是绝不可能发生的),我恐怕不知道要多长时间才能发现,我估计会找各种各样的方式来做,但是实际上并不需要很高深的做法,仅仅只需要认真阅读好反汇编
真正迷惑了我的是在delet函数中
其中有一个ptr = 0的操作,我第一次一看到我就确信,这次绝对没有UAF漏洞了,毕竟在上一道堆题中就已经是有UAF漏洞了,考过数学的兄弟们都知道同一个知识点是不会即出现在选择题压轴题中又出现在填空题压轴题中的,但如果仔细看,相信大家很快就会发现,ptr是一个栈上的数据,ptr = 0不过只是在栈上清空了这个临时变量,我之所以说ffly学姐“阴险”,是因为假如指针没有真正置零,在上一道题目的add函数中就会检测到这个page已经被add了,不管你是否将它del掉,所以ffly姐在这个add函数中并没有加入这一层的检测,让我深深的确信指针已经被置零了,好在误打误撞的发现了。
之后就很简单了,难度和之前那道题目差不多了,唯一有一点点区别的是,这道题目没有专门的edit函数来写malloc到的空间了,写入操作和add操作合并了,这时候需要使用fastbin的double free,只需要在两次free操作之间插入一个其他的free就可以实现double free,然后再用两个malloc操作两次同一个区域,第一次操作就将指针改写成__hook_free函数的地址,第二次的再获得时就是获得了存在于__hook_free上的空间,再用system函数改写地址,再free(“/bin/sh\x00”)即可
exp如下
准备阶段
泄露地址