堆的off-by-one

  • 单字节溢出
  • 产生环境:

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

http://p3.qhimg.com/t010c5431ea156fa6ad.png

A是有洞的堆,而B,C是已经分配了的,

现在要去攻击C块。

产生场景:

demo:
attackbuffer=malloc(32)
if(strlen(str)==32)
{
	strcpy(attackbuffer,str);
}

可以看出后面会溢出一个’\x00’,这也是很多初学者容易犯的错误。

攻击后的:

http://p1.qhimg.com/t019ad7e192ca1f6bf0.png

攻击操作:

\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的任意读写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值