当前位置: 首页 > news >正文

C语言输入安全10大边界漏洞解析与防御

在CVE漏洞数据库中,输入处理漏洞占比超过23%,其中边界问题是最主要的根源。本文将深入解析C语言输入处理的10种致命陷阱,并提供可落地的安全编码方案。

一、未限定长度的字符串复制

漏洞代码
char buf[64];
gets(buf);  // 致命危险!
漏洞形成机制
  1. 栈内存结构

    | buffer[0-63] | EBP | 返回地址 | 参数... |
    ↑              ↑
    ESP            EBP
    
  2. 溢出过程

    • 输入超过63字符时,\0终止符被覆盖
    • 继续写入会覆盖EBP和返回地址
    • 攻击者精心构造的64-72字节可完全控制返回地址
  3. 利用技术

    # 攻击载荷构造
    payload = (b"\x90"*40 +            # NOP雪橇shellcode +              # 恶意机器码b"A"*(64-40-len(shellcode)) # 填充struct.pack("<I", 0xffffd3a0) # 覆盖返回地址
    )
    
防范原理

fgets()的安全机制:

char* fgets(char* s, int size, FILE* stream) {int c;char* p = s;while (--size > 0 && (c = getc(stream)) != EOF) {*p++ = c;if (c == '\n') break; // 关键:遇到换行终止}*p = '\0'; // 确保终止符return (c == EOF && p == s) ? NULL : s;
}

二、strncpy未添加终止符

漏洞代码
char dest[32];
strncpy(dest, src, sizeof(dest));  // 可能无终止符
漏洞形成机制
  1. 内存布局示例

    dest: [d][a][t][a][...][?]   // 无终止符
    后续变量: [v][a][l][u][e]      // 被当作字符串延续
    
  2. 信息泄露场景

    printf("Data: %s", dest); // 打印dest及后续内存
    
    • 输出可能包含密码、密钥等敏感数据
  3. 崩溃原理

    • 无终止符的字符串操作会持续读取
    • 直到遇到随机\0或触发页错误
防范原理

双重保障策略:

// 方案1:预置终止符
dest[sizeof(dest)-1] = '\0'
http://www.xdnf.cn/news/1230481.html

相关文章:

  • PyTorch 中 Tensor 统计学函数及相关概念
  • 数据结构初学习、单向链表
  • chrome的数据采集插件chat4data的使用
  • Oracle 11g RAC集群部署手册(三)
  • 12:java学习笔记:多维数组1
  • 面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答
  • JavaScript:Ajax(异步通信技术)
  • 用 JavaSwing 开发经典横版射击游戏:从 0 到 1 实现简易 Contra-like 游戏
  • Highly Compressed Tokenizer Can Generate Without Training
  • 【数据结构初阶】--排序(二)--直接选择排序,堆排序
  • 2025 年 VSCode 插件离线下载硬核攻略
  • 数字化生产管理系统设计
  • vue3渲染html数据并实现文本修改
  • 关于人工智能AI>ML>DL>transformer及NLP的关系
  • docker 容器常用命令
  • 用Unity结合VCC更改人物模型出现的BUG
  • 网络安全基础知识【6】
  • Linux 高级 I/O 系统调用详解
  • [硬件电路-114]:模拟电路 - 信号处理电路 - 放大器的种类与比较
  • kotlin小记(1)
  • lumerical——布拉格光栅(2)
  • WAIC引爆AI,智元机器人收购上纬新材,Geek+上市,157起融资撑起热度|2025年7月人工智能投融资观察 · 极新月报
  • 【机器学习】“回归“算法模型的三个评估指标:MAE(衡量预测准确性)、MSE(放大大误差)、R²(说明模型解释能力)
  • webpack面试题及详细答案80题(61-80)
  • linux eval命令的使用方法介绍
  • USB Device(VID_1f3a_PID_efe8) 驱动叹号
  • Kubernetes Gateway API 详解:现代流量路由管理方案
  • 除数博弈(动态规划)
  • wxPython 实践(六)对话框
  • 【05】OpenCV C#——OpenCvSharp 图像基本操作---转灰度图、边缘提取、兴趣区域ROI,图像叠加