漏洞思路分享-水平越权
不秃头的安全
记一次外出渗透项目的水平越权漏洞记录分享,本人安全技术的一名小学生,仍在学习中,大佬有意见可指点,不喜勿喷,感谢指点!!!
1
漏洞描述
由于应用系统中Id参数可控并未经校验导致信息被越权修改,攻击者可通过遍历Id参数批量删除、更改其他用户数据。
2
漏洞记录
(1).一个购物服务平台,首先创建了两个账户分别为cs1与cs,
页面中加入购物车,burp拦包后看到账户
cs1的userId=ef49e5124fc44ab38701566
2f6fb8195、账户cs的userId=497b596cd042
419583e8cfb7b94b6eac,在看到这里时想到的就是能否去实现水平越权操作,
用户为cs1,添加商品数量为3,添加购物车拦包将userid值改为用户cs的userid,放包,
放包后发现userid为原测试账户cs1的,再次更改为cs的userId放包,页面显示添加成功,
发现原用户cs1购物车中没有商品,
而用户cs的购物车中出现该商品数量为3。
(2).无独有偶,也是一个综合服务平台,但是和上面有一点不太一样的地方是这里不仅修改了id值,还将返回错误的500和false修改成正确响应码的状态码200及true信息,下面是具体记录,涉及敏感信息就打了厚码。
刚开始客户给了两个账户分别为test2、test3,test2的id值为14e6d3b9a
3bc43ca90338ac9ad5f04b8,
test3的id值为a726c28802744d17
bc2df108f36adafc,
在test3个人信息修改账户用户名处随意输入为test5并抓包,
并修改test3的id值为test2的id值后,拦截返回包请求,当看到这里时明显就一种感觉可以水平越权成功,不要问是为什么,可能就是第六感(手动狗头)
修改返回包中信息为200、true、修改成功,放包,
在登录处使用原来用户名test2登录发现用户名不存在,使用test5可以登录,
使用用户名test5,test2原密码可直接登录原test2账户,登录成功。
3
解决方案
在进行每个敏感操作时判断用户登录状态和权限,避免越权修改信息
水平权限参数不要用自增值,用id加密、随机数或GUID,但搜索引擎或攻击者可以同样用这个随机数和连接去进行操作
web层检查发起请求的用户权限,比如从session信息中获取
数据库表增加ownerId字段,增删改查询时加上其作为where语句条件(即每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问)
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放