当前位置:首页 > 综合

漏洞怎么查

去年秋天,漏洞查一个朋友让我帮忙看他的漏洞查电商网站。他说后台总有人能改商品价格,漏洞查把一块钱的漏洞查东西改成零元下单。我打开日志翻了半小时,漏洞查发现他在商品编辑接口里只校验了用户是漏洞查否登录,没校验这个用户是漏洞查不是管理员。任何注册用户抓个包,漏洞查把价格参数一改,漏洞查就能把标价两千的漏洞查耳机改成零元购。这就是漏洞查最典型的越权漏洞——系统问了"你是谁",但没问"你配不配"。漏洞查

查漏洞的漏洞查第一步不是打开扫描器,是漏洞查搞清楚这个系统"本来应该怎么跑"。你得先当个正常用户,漏洞查把核心流程走一遍:注册、登录、下单、支付、退款。走的时候打开浏览器的开发者工具,看每个请求发了什么参数、返回了什么。这一步叫"摸清正常行为",没有这个基准,你根本不知道什么叫"异常"。

摸清之后,开始改参数。最常见的入口是URL里的数字ID。比如`/order/detail?orderId=1001`,你把它改成1002,如果能看到别人的订单,就是水平越权。再把`userId`从自己的改成别人的,试试能不能看到别人的收货地址。这类测试不需要什么工具,浏览器地址栏就够了。我见过一个后台系统,把URL里的`role=user`改成`role=admin`,直接进了管理页面。开发人员觉得前端隐藏了入口就安全了,这种想法跟把钥匙藏在门垫下面差不多。

参数改完,试注入。在输入框里敲一个单引号,看页面报不报数据库错误。如果报错信息里出现了`SQL syntax`之类的字样,基本可以确定存在注入点。更隐蔽的是盲注,页面不回显错误,但你可以用`and 1=1`和`and 1=2`对比返回内容是否不同。有个做CMS的朋友,他的搜索框用了拼接SQL,我输入`%' or '1'='1`,直接把整张用户表拖了出来。他后来跟我说,那个搜索功能三年没人动过。

文件上传是另一个重灾区。很多系统只检查文件扩展名,你传一个`shell.php.jpg`,后端如果按黑名单过滤,可能只拦了`.php`而放过了`.php.jpg`。更粗暴的是改Content-Type,把`application/x-php`改成`image/jpeg`,有些老框架直接信这个头。我测试过一个论坛,上传头像时抓包把文件名改成`../../config.php`,虽然没成功覆盖,但返回的报错路径暴露了服务器目录结构。这种信息泄露本身不算漏洞,但它是下一步攻击的梯子。

逻辑漏洞最容易被忽略,因为扫描器扫不出来。比如密码找回功能,验证码是四位数字,没有尝试次数限制,你可以写个脚本从0000跑到9999。再比如优惠券,领一张用一张,但如果你在支付请求里把优惠券ID重复提交,有些系统会多次抵扣。我见过一个外卖平台,满减活动可以叠加使用同一张券,下单一千块的东西实付三块。这种漏洞靠工具发现不了,得靠人脑去推演业务流程里的每一步。

工具要用,但别依赖。Burp Suite的主动扫描能发现一些常见问题,但误报率高得离谱。它说存在XSS的地方,可能只是返回了你的输入但做了转义。它说安全的接口,可能只是没测到那个参数。我习惯用工具做初步筛选,然后手动验证每一个可疑点。就像用金属探测器找钥匙,响了还得自己弯腰去挖。

最后说一个反直觉的事:很多漏洞不是技术问题,是流程问题。开发环境数据库里留着测试账号,密码是123456,上线时忘了删。运维把`.git`目录部署到了生产环境,任何人访问`/.git/config`就能下载整个源码。这些跟代码写得好不好没关系,纯粹是上线前少检查了一遍。查漏洞的人得有点强迫症,看到`/admin`就想访问一下,看到备份文件就想下载看看,看到报错信息就想读完整。

查漏洞这件事,说到底是在找"开发者没想到的地方"。开发者想的是功能怎么实现,你想的是功能之外还能干什么。这个思维切换不过来,工具再多也是白搭。

分享到: