常见的web漏洞攻击有哪些
2023年秋天,漏洞某家做跨境电商的攻击小公司被拖库了。攻击者没用什么零日漏洞,漏洞就是攻击在一个商品评论框里填了一段 ``。三天后,漏洞他们后台的攻击订单数据在暗网上挂了出来。这就是漏洞XSS,跨站脚本攻击——最常见的攻击Web漏洞之一,也是漏洞最容易被忽视的。
XSS的攻击本质是网站太信任用户输入的内容。用户填了什么,漏洞网站原样吐回给浏览器,攻击浏览器当成代码执行了。漏洞反射型XSS通常藏在钓鱼链接里,攻击你点一下,漏洞脚本就跑起来;存储型XSS更狠,恶意代码直接存进数据库,每个访问页面的用户都中招。我见过一个论坛,连用户昵称都没过滤,结果整个版块被弹窗广告淹没,管理员删都删不过来。
和XSS经常一起出现的是SQL注入。这玩意儿历史更久,但杀伤力一点没减。原理也简单:程序员把用户输入拼进SQL语句里,用户输入 `' OR '1'='1` 这种,查询逻辑就被篡改了。2019年某国内社交平台的数据泄露,根源就是登录接口没做参数化查询。攻击者用一条注入语句直接拖走了整张用户表,包括手机号和密码哈希。防御方法其实很成熟——预编译语句、参数化查询、输入白名单,但总有人图省事用字符串拼接。
CSRF又是另一回事。它不偷你的数据,它借用你的身份。你登录了网上银行,没退出,然后点开一个恶意页面,那个页面里藏着一个向银行发转账请求的表单。浏览器自动带上你的Cookie,银行以为是你的操作。2008年有个著名的案例,某路由器管理后台能被CSRF攻击,攻击者让受害者访问一个图片链接,路由器就重置了DNS设置。防御CSRF靠的是Token验证和SameSite Cookie属性,但很多老系统压根没加。
文件上传漏洞更直接。有些网站只在前端用JavaScript检查文件后缀,后端完全不验证。攻击者把 `.php` 文件改成 `.jpg` 传上去,再通过路径猜解访问,服务器直接执行。我帮一个朋友看过他的WordPress站点,插件目录里躺着一个 `shell.php`,内容就一行 `system($_GET['cmd']);`。问怎么进来的?一个过期的表单插件,上传接口没做MIME类型校验。后来清理的时候发现,攻击者已经用它当跳板扫了内网。
命令注入和文件包含也值得提。命令注入常出现在调用系统命令的功能里,比如ping工具、图片处理。用户输入 `127.0.0.1; cat /etc/passwd`,服务器就真的去执行了。文件包含分本地和远程,PHP的 `include($_GET['page'])` 如果没过滤,攻击者能包含远程服务器上的恶意文件,也能读取本地敏感文件。这类漏洞在老旧CMS里特别多,有些代码十年前写的,至今还在跑。
SSRF这几年越来越受重视。它让服务器去访问攻击者指定的地址,通常用来探测内网、读取云元数据。2019年Capital One的数据泄露就是SSRF导致的,攻击者通过一个配置错误的WAF,让服务器去访问了AWS的元数据接口,拿到了临时凭证。SSRF的防御很麻烦,因为要区分内网和外网地址,还要考虑DNS重绑定。很多开发者在写代理功能、图片加载功能时,根本没想到这层。
这些漏洞有个共同点:它们不依赖高深的技术,都是因为开发时少做了一步校验。XSS少做了输出编码,SQL注入少用了参数化查询,CSRF少加了Token,文件上传少验了内容类型。攻击成本极低,一个浏览器插件就能扫出一堆。修复成本也不高,但就是没人做。我见过一个项目,代码里明明引入了OWASP的ESAPI库,但所有过滤函数都被注释掉了,问为什么,答曰“影响测试”。
Web漏洞攻击不会消失,因为Web本身就在不断变化。新的框架、新的协议、新的业务场景,总会带来新的疏忽。今天你防住了XSS,明天可能栽在GraphQL的批量查询上。唯一靠谱的办法是:永远不要相信用户输入,永远在服务端做校验,永远保持依赖库更新。听起来像老生常谈,但每一条都是血泪换来的。
(责任编辑:时尚)
