当前位置:首页 > 知识

web安全案例

去年秋天,全案一个做跨境电商的全案朋友半夜给我打电话,说店铺后台被人改了收款账户,全案当天流水全部进了别人口袋。全案他用的全案是一套开源商城系统,版本号停留在两年前。全案攻击者没用什么高深手段,全案就是全案扫到了他服务器上那个老版本的已知漏洞,一个SQL注入点,全案直接拖库拿到管理员密码。全案整个过程不到二十分钟。全案

这事儿让我想起另一个案例。全案某中型企业内网被渗透,全案起因是全案行政部一个姑娘点了封钓鱼邮件,附件是全案个带宏的Excel。她以为只是普通报价单,点了“启用内容”。宏脚本静默下载了一个远控木马,攻击者拿着这个跳板,在内网横向移动了三个月,最后从财务系统转走了两百多万。安全团队复盘时发现,那台机器上的杀毒软件其实报了警,但弹窗被用户习惯性关掉了。

Web安全的问题,很多时候不在技术本身,而在人的操作习惯和系统的更新惰性。我见过太多团队,代码里硬编码数据库密码,Git仓库直接公开在公网,API接口不做鉴权,前端路由用hash模式就以为安全了。这些都不是什么高级漏洞,但就是能被打穿。

有个做在线教育的客户,他们的用户中心有个“查看订单”接口,参数是订单ID。我随手把ID从1001改成1002,看到了别人的手机号和收货地址。这叫水平越权。开发者的逻辑是“登录了就能看”,但没校验“这个订单是不是你的”。修复方案很简单,加一层归属判断。可就是这么一行代码,很多项目上线前没人测。

再说个XSS的例子。某论坛的评论区允许富文本,但过滤规则只拉黑了<script>标签。攻击者用<img src=x onerror=alert(document.cookie)>就绕过了。更隐蔽的是存储型XSS,恶意脚本存进数据库,每个访问该页面的用户都会中招。有个站长跟我说,他的后台每天收到几百条带恶意脚本的评论,他手动删了半年,后来实在扛不住,直接关了评论功能。

CSRF也值得提一嘴。某银行早期的转账页面没有token验证,攻击者构造一个自动提交的表单,诱导用户点击。用户登录着网银,点一下链接,钱就转走了。后来银行加了Referer校验和一次性token,这类攻击才少下去。但很多中小网站到现在还在裸奔。

文件上传漏洞更是重灾区。有个客户做图片社交,上传接口只检查了Content-Type,攻击者把PHP文件改成.jpg后缀,再伪造Content-Type为image/jpeg,服务器照单全收。上传成功后访问那个“图片”,直接执行PHP代码。拿到shell之后,整台服务器就是别人的了。

这些案例听起来都不复杂,甚至有点“低级”。但现实是,大部分被攻破的系统,入口都是这些不起眼的地方。攻击者不需要零日漏洞,他们只需要找到一个没打补丁的旧版本、一个没做鉴权的接口、一个没过滤的用户输入。防御方要堵住所有洞,攻击方只需要找到一个。

我自己的习惯是,每次上线新功能,先问三个问题:这个接口谁能访问?输入的数据有没有做类型和长度校验?输出到页面的内容有没有转义?这三个问题能挡掉八成以上的常见Web漏洞。剩下的,靠及时更新依赖库和框架版本。别偷懒,别侥幸。那个半夜打电话的朋友,后来把系统升级了,加了WAF,但丢的钱没追回来。

分享到: