二进制漏洞原理--整型溢出漏洞

本文深入探讨了整型溢出漏洞,包括有符号和无符号整数溢出的情况。重点关注基于栈和堆的整型溢出实例,通过具体例子解释了如何利用这种漏洞。在栈溢出中,通过控制输入长度来改变变量值,而在堆溢出中,溢出导致错误的堆块大小分配,从而影响堆管理结构。
摘要由CSDN通过智能技术生成

整型溢出

整数分为有符号和无符号两类,有符号数以最高位作为符号位,正整数最高位为1,负整数最高位为0,不同类型的整数在内存中有不同的取值范围,unsigned int = 4字节,int = 4字节,当存储的数值超过该类型整数的最大值就会发生溢出。

在一些有符号和无符号转换的过程中最有可能发生整数溢出漏洞。

请添加图片描述
在这里插入图片描述

基于栈的整型溢出

以例子来说明

例1:基于栈的整型溢出利用

https://buuoj.cn/challenges#[BJDCTF%202nd]r2t3

图中的字节应该改为字长

在这里插入图片描述
04931856.png)]

v3的字节长度为1 ,所以取值为0-2^8也就是0-255

当v3的取值大于255发生整型溢出时,v3=256实际上时v3=0,v3=257时实际上是v3=1,依次类推。

此题中v3的值是我们输入的buf字符串,后面的if语句会判断它的值,如果在4-8之间才会执行下面的return语句将我们输入的字符传给dest

所以我们将输入的字符长度设置为长度为260-264之间就可以。

dest距离ebp17个字节,所以我们需要在输入的第17+4=21个字节开始输入后门函数的地址,之后再补全字符到长度为260-264之间即可。

脚本如下:

from pwn import *
io=remote('node3.buuoj.cn',25414)
elf=ELF('./r2t3')

system = 0x804858b
payload = (cyclic(17+4)+p32(system)).ljust(262,b'a'</
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值