隐藏域漏洞
凌晨两点,隐藏域漏我盯着屏幕上的隐藏域漏404页面发呆。不是隐藏域漏网站崩了,是隐藏域漏攻击成功了——通过一个连开发者自己都忘了的隐藏域。
那个字段叫“user_role”,隐藏域漏藏在注册表单的隐藏域漏第三页。正常情况下,隐藏域漏用户根本看不到它,隐藏域漏浏览器也不会提交。隐藏域漏但谁规定必须用正常方式?隐藏域漏我用浏览器开发者工具删掉它的hidden属性,把值改成“admin”,隐藏域漏点提交。隐藏域漏服务器愣了半秒,隐藏域漏然后给了我一个管理后台的隐藏域漏欢迎语。
这事发生在去年测试一家SaaS公司时。隐藏域漏他们的程序员把用户权限存在前端表单里,以为藏起来就安全了。幼稚得可爱。隐藏域(hidden input)本来是用来传会话ID、时间戳这类无关紧要的数据,结果被塞进了权限判断——等于把保险柜钥匙贴在门框下面,还用块小石子压着。
更讽刺的是,这类漏洞至今还在批量生产。我见过电商网站把商品价格塞进隐藏域,用户改成0.01元下单;见过投票系统把选手编号放隐藏域,刷票刷到服务器报警;还见过一个医疗系统,把患者ID藏在隐藏域里,改个数字就能看别人的病历。
问题出在哪?开发者的惯性思维。框架默认表单提交,后端省事直接读参数,没人想过前端传来的东西都能被篡改。隐藏域对浏览器是透明的,可对攻击者来说,它就是一张写着“来改我”的便利贴。
我有个朋友,专门写脚本扫描这种漏洞。他说这活儿比挖矿轻松多了——打开网页源码,搜“type=hidden”,挨个改值试,命中率惊人。他靠这个拿过好几家知名公司的漏洞赏金,最贵的一条值两万美金。那家公司的安全团队事后复盘,发现这个隐藏域是五年前加的,中间换了三轮开发,没人动过它。
修复方法简单到可笑:后端重新校验权限,别信前端传的任何角色字段;价格、金额、ID这些关键数据要么加密签名,要么直接从会话里取。可现实里,很多团队连这个都懒得做——他们更愿意相信“用户看不到就不会改”。
写这段文字的时候,我又想起那个凌晨。管理员面板里空荡荡的,只有一行欢迎词:“您已登录,请选择操作。”我什么都没点,截了个图就关了。第二天告诉他们的CTO时,他第一反应是“不可能”,第二反应是“你怎么发现的”。我把截图发过去,他沉默了很久,最后说:“那个字段,是我刚入职时写的。”
你看,漏洞从来不是技术问题,是人性问题——我们总以为自己藏得够深,其实只是没人愿意低头看。
本文地址:http://www.79wt.cn/news/429e0699564.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。