当前位置: 首页 > 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.dtcms.com/a/311487.html

相关文章:

  • 基于LSTM模型与加权链路预测的动态热门商品成长性分析
  • SpringBoot相关注解
  • 项目管理平台是什么?概念、定义、作用、主流厂商解读
  • docker:将python开发的大模型应用,打成docker容器
  • C#中的除法
  • PostGIS面试题及详细答案120道之 (081-090 )
  • cuda编程笔记(12)--学习cuFFT的简单使用
  • 【Mybatis】MyBatis分页的三种实现方式,Log4j的使用
  • Elasticsearch 混合检索一句 `retriever.rrf`,把语义召回与关键词召回融合到极致
  • 模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20
  • 题解:P4447 [AHOI2018初中组] 分组
  • 归并排序(简单讲解)
  • [论文阅读] 人工智能 + 软件工程 | GitHub Marketplace中CI Actions的功能冗余与演化规律研究
  • 【RK3568 看门狗驱动开发详解】
  • Kubernetes Gateway API 详解:现代流量路由管理方案
  • 【最后203篇系列】030 强化学习探索
  • 浏览器及java读取ros1的topic
  • 重生之我在暑假学习微服务第八天《OpenFeign篇》
  • 暑期算法训练.13
  • cv弹窗,退款确认弹窗
  • 数据结构(12)二叉树
  • 深入 Go 底层原理(六):垃圾回收(GC)
  • 数据资产是什么?
  • MySQL 内置函数
  • npm安装下载慢问题
  • 离线安装docker和docker-compose
  • 【人工智能agent】--服务器部署PaddleX 的 印章文本识别模型
  • JVM 调优中JVM的参数如何起到调优动作?具体案例,G1GC垃圾收集器参数调整建议
  • Junit5+Maven+RestAssured+Allure接口自动化框架
  • VScode对Ubuntu用root账号进行SSH远程连接开发