提取权限漏洞,何查说白了就是询否限漏你能不能拿到本不该属于你的那份数据。我上周刚帮朋友排查过一个真实案例:他写了个文件下载接口,存提参数里带着文件名,取权后端直接拼接路径就返回文件内容。何查结果用../../etc/passwd一试,询否限漏系统文件全裸奔出来了。存提这种问题在实战里出现的取权频率,比你想象的何查夸张得多。
想验证自己系统有没有这类洞,询否限漏别急着上扫描器。存提先把手头接口捋一遍——凡是取权接收文件名、ID、何查编号这类参数的询否限漏,全列出来。存提我见过太多人栽在“我觉得这个参数不会被乱传”的侥幸心理上。你手动改一个参数值试试,比如把file=report.pdf改成file=../../../../etc/passwd,看返回包是不是变了。变了就说明后端没做边界校验,十有八九存在提取漏洞。
光测路径穿越不够,还得测越权。这俩经常被混为一谈,但本质不同。路径穿越是横向捞文件,越权是纵向捞别人的数据。举个具体场景:你登录A账号,抓到一条查询订单详情的请求,URL里带着order_id=1001。退出登录,换B账号,直接拿这个请求改改cookie重放一遍。如果B账号能查到A的订单,那完蛋,水平越权实锤了。垂直越权更阴险——普通用户角色直接调管理员接口,比如把role=user改成role=admin,看后台数据接口是否响应。
有个细节容易被忽略:权限校验不能只放在前端按钮显示上。后端每个接口都得独立判断当前会话的权限。我见过某系统把菜单隐藏了就当防越权,结果别人直接构造URL就访问到管理页面。这种低级错误比想象中普遍,别笑,你自己接口里可能就有。
测完接口,再挖挖云存储。现在很多系统把文件丢OSS或S3上,URL签名过期时间设个几十年。你拿到一个下载链接,把路径里的文件名改成同目录下其他对象的key,看看能不能下载。有些团队配了私有读写权限但忘了给目录加访问控制策略,导致ListObjects都能枚举出所有文件。拿curl发个GET请求到存储桶根路径,如果返回XML格式的文件列表,那漏洞比提取权限还严重,直接信息泄露。
最后说个野路子:搜下前端JS代码。很多开发者把调试用的隐藏接口写在源码里,比如/api/exportAll这种。打开浏览器开发者工具,过滤.js文件,全局搜download、export、file关键词。运气好能挖到未鉴权的批量导出接口——那种返回整个数据库备份的接口。我上次就是这么在某个开源项目里挖到个backup.sql直链的,提交漏洞报告时对方脸都绿了。
真测出问题了,别慌着发漏洞报告。先确认影响范围——是只有特定参数受影响,还是整个接口层都裸奔。用Burp Suite的Intruder模块批量测几个边界值,记录响应状态码差异。200和403的分布能帮你判断是单个接口疏忽,还是权限中间件整体失效。修复时记得统一走白名单校验,别只堵住你测出来的那条路径,攻击者换个编码方式(比如URL双重编码)就能绕过黑名单。
测试归测试,生产环境别乱搞。挂个只读账号去测,别真把客户数据下载下来。我见过有人验证越权漏洞时把全量用户手机号导出来,结果自己先踩了法律红线。点到为止,确认存在漏洞就收手,截图留证,剩下的交给修复流程。