首页 > 其他分享 >C代码审计之缓冲区溢出漏洞及修复方案

C代码审计之缓冲区溢出漏洞及修复方案

时间:2023-03-17 17:55:44浏览次数:38  
标签:destination 空字符 char 漏洞 strcpy 缓冲区 溢出 size

当在某特定数据结构的内存空间的边界之外写入数据时,即会发生缓冲区溢出。

 

本篇主要针对字符串操作错误引发的漏洞。

1、无界字符串复制

发生于从源数据复制数据到一个定长的字符数组时

1.1 使用gets()从标准输入读取数据到一个定长的缓冲区中

// gets()函数读取输入时不会判断上限,很容易造成缓冲区溢出
char buf[8]; gets(buf);


修复方案:使用getchar()获取输入,并确保赋值给缓冲区的字符数不超过缓冲区的大小

    char buf[SIZE];
    int index = 0;
    while((ch = getchar()) != '\n'){
        if (index < SIZE -1 )
          buf[index++] = ch;
    }
    buf[index] = '\0'; //超过分配的缓冲区大小时截断

 

1.2 复制和连接字符串。

//strcpy()、strcat()执行无界复制操作,同样不会检测上限
char s[128];
strcpy(s, argv[0]);
修复方案1:给数组动态分配适当的大小 char *s = (char *)malloc(strlen(argv[0]) + 1); //分配空间,加一是为了容纳空字符\0 if (s != NULL) strcpy(s, argv[0]); free(s);
修复方案2:使用strlcpy()、strlcat()代替strcpy(),这两个函数可指定目标缓冲区的大小,只复制前size个 strlcpy(char *dest, const char *src, size_t size) strlcat(char *dest, const char *src, size_t size)

 

2、空字符结尾错误

字符串没有正确地以空字符\0结尾。

 

//strncpy()、strncat()都可指定目标缓冲区的大小,但是它们不会在结尾为字符串添加空字符
char destination[MAX_SIZE]; strncpy(destination, source, sizeof(destination)-1); strcpy(c, destination); //执行到strcpy,destination结尾没有空字符,因此内存里\0前的内容都会复制给c,导致内存泄漏 修复:在结尾添加\0 destination[sizeof(destinatin) - 1] = '\0'

 

标签:destination,空字符,char,漏洞,strcpy,缓冲区,溢出,size
From: https://www.cnblogs.com/jimmy-hwang/p/17227643.html

相关文章

  • Web漏洞-CSRF及SSRF漏洞案例讲解
      CSRF漏洞解释,原理CSRF:跨站请求伪造,是一种网络的攻击方式(核心:伪造请求)黑客利用某网站用户的登陆状态,然后伪造请求的链接,造成对登录态用户的修改等各种危险操作被......
  • Web漏洞-XSS跨站之代码及httponly绕过
    进入后台获得后台权限:cookie权限进入后台;直接账号密码登录Str-replace   关键字过滤什么是httponly如果在cookie中设置了httponly属性,那么通过js脚本将无法读取到co......
  • Nacos身份认证绕过漏洞复现笔记
    0X00漏洞描述Nacos是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。 Nacos身份认证绕过漏洞(QVD-2......
  • p标签单行文本溢出和多行文本溢出显示省略号解决方法
    单行p{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}多行//多行显示省略号,数字3为超出3行显示,p{ display:-webkit-box; -webkit-box......
  • SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
    解决办法 工具下载地址NartacSoftware-IISCrypto ......
  • OpenSSH相关漏洞处理(转载)
    原文链接:https://www.lmlphp.com/user/57828/article/item/2348688/OpenSSH(OpenBSDSecureShell)是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。当前低......
  • 【漏洞复现】Fantastic Blog CMS SQL注入漏洞(CVE-2022-28512)
    FantasticBlogCMSSQL注入漏洞(CVE-2022-28512)0x01靶场介绍FantasticBlog(CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客......
  • 漏洞插件更新源收集
    长亭XRAY:https://github.com/chaitin/xray/releases开源扫描器Nuclei:https://github.com/projectdiscovery/nuclei-templates/国家漏洞信息库:https://www.cnvd.org.cn......
  • CVE-2023-22809 Sudoedit提权漏洞分析
    TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianC......
  • 怎么避免服务内存溢出?
    在高并发、高吞吐的场景下,很多简单的事情,会变得非常复杂,而很多程序并没有在设计时针对高并发高吞吐量的情况做好内存管理。自动内存管理机制的实现原理做内存管理,主要考......