""具体分析就不说了,其余师傅讲得好,说下关键理解:
对于add()函数:
固定创建一个0xc大小的chunk,而后根据要输入的内容是否决定再创建chunk:
如果是输入数值则不创,如果输入字符串,则保存字符串的指针在首个chunk中,而后将字符串输入往第二个chunk中。
关键在于这里,分析IDA后发现存在system函数,那么不必泄露libc地址,直接利用elf.plt[“system”]
这个records[v0]+4就是free函数的地址,如果改为system_plt,再往其后的records[v0]指向的地方输入“/bin/sh\x00”那么就解决了。dele功能被执行时,执行的就是system(“/bin/sh\x00”)了
本题利用的是fastbin attack的这个性能:释放某个大小chunk时,申请同样大小的chunk。在申请的时候向相应chunk输入以上提到的值。
像这种在程序执行中利用到的函数地址:被放在了chunk里头或者某个地址的–容易被修改从而执行别的函数。