今天看啥  ›  专栏  ›  珂技知识分享

web选手入门pwn(15) ——off by null

珂技知识分享  · 公众号  ·  · 2024-06-24 17:21

文章预览

夕阳下的舞者(off by null) https://www.polarctf.com/#/page/challenges 困难题,2.23,保护全开。先看add() sub_B34()中限制了8个chunk。先创建0x20的chunk作为struct(结构体),然后输入size存储在v2并malloc(v2),接着malloc(0x80),malloc(0x20),最后向malloc(v2)和malloc(0x20)写值,也就是name和mark。 也就是说v2这个struct构成大概是这样的。 size malloc(v2) #name malloc(0x20) #mark malloc(0x80) #esg gdb上更直观,add(0x20)的heap如下。 其中有个问题就是malloc(0x80) #esg并没有写值,以及sub_B74是封装了个read,实际上是个off by null。 read都很熟悉,a2是a1的size,a1[a2]就是a1的边界的下一个字节,*result & = 0xFEu;则是按位与操作,由于0xFE的二进制是1111 1110,所以结果就是清零。 那么这次add(0x18),可以发现PREV_INUSE位被清零了。 再看delete() 可以发现free一个清一个指针,但唯独chunklist[v1] + 24并没有清空,也就是malloc( ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览