当前位置:首页 > 休闲

漏洞种类

缓冲区溢出排得上漏洞界的漏洞种类元老。程序往一个固定大小的漏洞种类数组里塞数据,不检查长度,漏洞种类多出来的漏洞种类部分就漫到相邻内存区域去了。1988年的漏洞种类莫里斯蠕虫就是靠这个席卷了六千多台机器,放到今天看规模不大,漏洞种类但当时整个互联网也就几万台主机。漏洞种类缓冲区溢出的漏洞种类可怕之处在于,攻击者可以精心构造溢出内容,漏洞种类覆盖函数返回地址,漏洞种类让程序跳去执行自己的漏洞种类代码。C和C++里这类问题至今没断过,漏洞种类strcpy、漏洞种类sprintf这些函数每次出现都让人捏把汗。漏洞种类

SQL注入是漏洞种类另一种思路。它不跟内存较劲,直接骗数据库。用户输入拼进SQL语句里,如果没做转义,输入 ' OR '1'='1 这种字符串就能让验证逻辑形同虚设。早年很多网站后台登录框都栽在这上面。我印象很深的一个案例是某电商平台的搜索接口,攻击者通过注入把整个用户表拖了下来,包括手机号和密码哈希。防御手段其实不复杂——参数化查询,但遗留系统里手工拼接SQL的代码太多了,改起来费时费力。

跨站脚本攻击,简称XSS,走的是浏览器这条路。攻击者往页面里注入JavaScript,其他用户访问时脚本就在他们浏览器里跑起来。反射型XSS需要诱导点击特定链接,存储型XSS更狠——恶意脚本直接存进数据库,每个访问该页面的用户都会中招。2018年某社交平台就出过一次存储型XSS,攻击者在个人签名里嵌入脚本,凡是查看他主页的人都自动转发了一条推广链接。这种蠕虫式传播在社交网络上扩散极快。

权限提升漏洞往往出现在系统设计层面。一个普通用户通过某种操作获得了管理员权限,或者一个容器里的进程逃逸到了宿主机。Docker早期版本有过runC逃逸漏洞,攻击者从容器内部拿到宿主机的root shell。这类漏洞的根因通常是权限边界定义模糊,或者某个系统调用没做充分检查。它不像缓冲区溢出那样有几十年的历史,但云原生架构普及之后,影响面反而更大。

逻辑漏洞容易被忽视,因为它不依赖技术层面的缺陷。比如某网站的重置密码功能,验证码是四位数字,但服务端没有限制尝试次数,暴力枚举几分钟就能通过。再比如订单系统里把价格参数放在前端,抓包改成负数就能白拿商品。这类漏洞没有固定模式,每个业务系统都可能长出不同的变种。扫描器基本扫不出来,只能靠人工测试和代码审计。

供应链漏洞这几年越来越显眼。Log4j那个事大家都还记得,一个日志库的JNDI功能被 abused,全球多少系统连夜打补丁。问题在于现代软件依赖层层嵌套,你用的框架依赖某个库,那个库又依赖另一个库,任何一层出问题都会波及整个链条。npm生态里恶意包投毒的事件也发生过多次,攻击者上传一个名字跟热门包很像的包,等着开发者打错字装上去。

漏洞分类的方式很多,按成因、按利用方式、按影响范围都行。实际工作中遇到的漏洞往往是混合型的——一个注入点可能同时存在XSS和SQL注入,权限提升可能结合了逻辑缺陷和内存破坏。理解每种漏洞的底层机制比记住分类名称重要得多。工具能帮你发现一部分问题,但真正判断一个漏洞能不能利用、影响有多大,还是得靠人去看代码、搭环境、动手试。

分享到: