Pwn(整数溢出漏洞)

本文介绍了整数溢出漏洞的概念,包括有符号数和无符号数的溢出情况,以及溢出可能导致的数据截断、宽度溢出、符号改变等问题。详细解释了整数溢出在不同场景下的危害,并通过实验展示了如何利用溢出来实现getshell。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞介绍
整数就是没有小数的数字
在计算机中。有符号数用二进制表示。表示负数的时候。将二进制最高为来表示数字的符号,最高为是1就是负数。最高位是0就表是正数

当然。还有无符号数。也就是没有负数。
当我们尝试将一个数字范围为0-255的数字。
输入256时。就会溢出。返回0
输入257时。返回1
当有符号数溢出时。会从最小的值开始,-xxxxx然后依次+1
以下是各类符号范围大小

漏洞危害
1:
数据截断
当发生溢出时。数据会被截断。
a\b\r为3个8位无符号整数。范围大小为0-255
a=11111111
b=00000001
r=a+b=100000000
由于a和b相加的值超出了8位。发生溢出。截取8位。r就变成了0
2:
宽度溢出
当一个较小宽度的操作数被提升到了较大操作数一样的宽度。然后进行计算。如果计算结果放在较小宽度那里
那么长度就会被截断为较小宽度。比如一个32位的运算结果。放到了16位寄存器。那么就会取后16位

3:
改变符号
有符号整数溢出时。就会改变正负。
0x7fffffff+1=0x80000000=-2147483648
4:
无符号与有符号转换
将有符号数赋给无符号数后。会从-1变成无符号数的最大数
当把无符

### 关于64位系统PWN溢出漏洞利用 #### 函数调用约定差异 在32位和64位Linux环境中,函数参数传递方式存在显著不同。对于64位系统而言,前六个整数或指针类型的参数通过寄存器(`rdi`, `rsi`, `rdx`, `rcx`, `r8`, `r9`)而非栈来传递[^1]。 #### 地址空间布局随机化(ASLR) 现代操作系统引入了地址空间布局随机化技术,使得每次启动进程时内存中的各个部分位置都会发生变化。这增加了预测返回地址难度,在一定程度上缓解了传统栈溢出攻击方法的有效性[^2]。 #### 返回导向编程(Return-Oriented Programming, ROP) 面对启用NX bit保护机制以及开启ASLR的情况下,ROP成为一种有效的绕过策略。该技巧涉及寻找并链接一系列存在于合法二进制文件内的短小指令序列(gadgets),最终构建起能够执行恶意操作的代码片段[^3]。 #### 利用流程实例解析 假设目标应用程序存在未受限制的strcpy()调用,则可能允许攻击者覆盖存储于栈帧底部附近的返回地址。此时如果已知libc库加载基址或其他有用信息的话,就可以尝试构造payload以跳转至system("/bin/sh")这样的敏感API入口处[^4]。 ```python from pwn import * # 建立远程连接对象 conn = remote('target_ip', port) # 构造Payload offset = 0xdeadbeef # 替换成实际偏移量 ret_addr = pack('<Q', target_function_address) nop_sled = asm('nop') * (offset - len(ret_addr)) shellcode = asm(shellcraft.sh()) payload = nop_sled + ret_addr + shellcode # 发送Payload给服务端 conn.sendline(payload) # 进入交互模式等待命令执行结果 conn.interactive() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值