整数型溢出

参考xctf的一道整数型溢出
整数溢出三种类型:
1、溢出
只有有符号数才会发生溢出。有符号数最高位表示符号,在两正或两负相加时,有可能改变符号位的值,产生溢出。
溢出标志 OF 可检测有符号数的溢出。
2、回绕
无符号数 0-1 时会变成最大的数,如 1 字节的无符号数会变为 255,而 255+1 会变成最小数 0。
进位标志 CF 可检测无符号数的回绕。
3、截断
将一个较大宽度的数存入一个宽度小的操作数中,高位发生截断。
参考下图的回绕可有助于了解
在这里插入图片描述

xctf的这道int_overflow就是利用了回绕
PS:具体图片网上都有,就懒得截图了。
观察ida的login函数可以看到用来表示密码变量的buf设置的长度极长,这就提供了回绕的空间;
在check_passwd函数中更是发现了传递buf变量值的S变量是无符号整型,基本确定是回绕,ida中显示判断条件为3到8,所以构造字节大小应为(256+3)~(256+8),且S覆盖到的dest变量的长度为0x14;
在整体观察函数时,发现一个get_flag函数,于是利用这个函数的返回地址构造payload;
PS:get_flag的返回地址不是command那个,而是在该函数的上层函数what_is_this里面的一个返回地址。
在观察这个地址时还发现了leave(出栈),所以要在溢出时多分配四个字节,所以构造payload为**'a’0x14+'a’4+p32(get_flag address)+‘a’(256+(3~8) - 0x14 - 4 - 4)**。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值