常见web逻辑漏洞
订单任意金额修改
常见表示金额的参数:
rmb
value
amount
cash
fee
money
等
再提交订单的时候抓包或者直接前端修改代码
防御思路
多重校验
人工审核
验证码回传
通常发生在前端验证处,位置一般为
账号密码找回
账号注册
支付订单等
验证码发送途径:
邮箱邮件
手机短信
一般而言,被利用就是抓包,但是现在这种漏洞没怎么见了(可能我tcl),通常会进行加密处理
未进行登陆凭证验证
也就是能够未授权直接访问,缺少凭证校验,敏感目录没有限制访问
接口无限制枚举
对用户请求不进行限制而进行枚举
预防思路
- 在输入接口设置验证,如token,验证码等。
如果设定验证码,最好不要单纯的采取一个前端验证,最好选择后端验证。
如果设定token,请确保每个token只能采用一次,并且对token设定时间参数。
注册界面的接口不要返回太多敏感信息,以防遭到黑客制作枚举字典。
验证码请不要以短数字来甚至,最好是以字母加数字进行组合,并且验证码需要设定时间期限。
优惠券,VIP卡号请尽量不要存在规律性和简短性,并且优惠券最好是以数字加字母进行组合。
以上这是部分个人建议,实际方案需要参考业务的具体情况。
cookie设计缺陷
cookie中的漏洞大多都是属于一个越权漏洞。越权漏洞又分为平行越权,垂直越权和交叉越权。
平行越权:权限类型不变,权限ID改变
垂直越权:权限ID不变,权限类型改变
交叉越权:即改变ID,也改变权限
预防思路
1.cookie中设定多个验证,比如自如APP的cookie中,需要sign和ssid两个参数配对,才能返回数据。
2.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。
3.用户的cookie的生成过程中最好带入用户的密码,一旦密码改变,cookie的值也会改变。
4.cookie中设定session参数,以防cookie可以长时间生效
找回密码存在设计缺陷
1.auth设计缺陷
大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768,所以这个auth的值是可以被枚举的。
2.对response做验证
单纯读取内存值数据来当作用户凭证
产生这个漏洞的主要原因是程序在确定一个用户的登陆凭证的时候主要是依靠内存值中的某个value来进行确认,而不是cookie。但是内存值是可以更改和查看的。其流程图如下:
reference:
Author: damn1t
Link: http://microvorld.com/2019/12/23/漏洞挖掘/logic-vuln/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.