- 单字节溢出
- 产生环境:
1.不注意数组长度,循环次数不注意
2,字符串操作失误,如:忘记字符串在你输入后会加上’\x00’来截断
产生的影响:
虽然只能覆盖掉一个字符,但也能发挥强大的威力。
就从null-off-by-one开始看。
那么该如何利用呢?
- chunk overlapping
- unlink触发(unlink的话还没搞懂,懂了再写一遍说说)
关于chunk overlapping
思路:
分配一个新的块A,利用A的数据块去覆盖一个正在使用的块B,
然后通过编辑A的数据块,将B中的数据块指针换成我们指定的地址,然后就通过编辑B的数据块
获得任意地址写的能力。
- 基础知识:注意chunk中size的最低位。注意inuse位就好了,1就是说明前一个块正在使用。其他的可以先不用太过于注意。
实现步骤(借用某位dalao的图)
off-by-one null byte
https://www.anquanke.com/post/id/84752
A是有洞的堆,而B,C是已经分配了的,
现在要去攻击C块。
产生场景:
demo:
attackbuffer=malloc(32)
if(strlen(str)==32)
{
strcpy(attackbuffer,str);
}
可以看出后面会溢出一个’\x00’,这也是很多初学者容易犯的错误。
攻击后的:
攻击操作:
\1. off-by-one覆盖B,目的是覆盖掉B的inuse位
\2. free B
\3. malloc b1,malloc b2
\4. free C
\5. free b1
\6. malloc B
\7. overlapping b2
从而来获得对b2的任意读写。