前言
什么是逻辑漏洞?逻辑漏洞是人编写程序时由于对某方面功能疏忽或者考虑不周全造成的漏洞,所以说逻辑漏洞利用的场景千奇百怪,逻辑漏洞利用的方法也要要结合具体场景来谈,下面我来举例一些常见的逻辑漏洞类型。
一、密码重置漏洞
1. 验证码爆破
某些网站发送手机验证码是四位数的验证码,这时我们可以使用字典爆破。
2. 验证码抓取
验证码由客户端生成的,我们可以利用抓包工具,在发送验证码的时候抓取验证码。
3.验证码不更新
获取验证码后,验证码不刷新且后端程序对验证码不校验,导致用A手机号成功重置密码的验证码可以在B手机号密码重置时使用,并且成功使B用户重置了密码。只用一个验证码,然后不断替换不同的手机号,可以实现批量密码重置。
4.删除验证码
抓取数据包然后把验证码删除,可以使服务器判断为正确的操作。
5.修改返回包
1.修改返回包里面的判断语句(将fail改为true);
2.修改返回的数据值(0、1、200);
3.替换判断性质的参数值。抓取正确的(A账号)返回包参数值,然后用来替换掉另一个抓取错误的(B账号)返回包的参数值;
4.删除判断语句;
6.cookie
1.删除cookie值
2.替换cookie值
7.链接修改
1.邮箱链接修改。
举例:A账户点击找回密码,网站会给你发一个重置密码的URL链接,URL链接里面会包含一串加密的字符串(通过服务器端的某种算法生成的用来验证用户身份的参数)和有uid,手机号,QQ邮箱的证明你身份的参数,这时候你把手机号,qq邮箱等信息改为B账号的,然后点击信息内容里密码重置的链接,成功重置B账号密码。
2.浏览器URL链接。
URL链接处明文显示用户参数以及你重置密码每一个步骤(1、2、3、4),你用A账号成功通过验证码步骤到达修改密码页面,然后B账号替换A账号。简单的来说,就是利用其他手段跳过验证码验证这一步骤。
8.在已登录状态下在修改密码处id进行替换
9.修复方案
1.设置复杂的验证码(6位验证码)
2.验证码设置有效时间
2.在链接里面添加token
3.避免客户端生成验证码
4.后端程序校验验证码与对应用户信息
5.验证码唯一性,一次性
6.后端避免返回明文响应包
二、信息轰炸
1.手机验证码轰炸
在注册账号或者重置账号密码时,获取验证码然后抓包,把数据包发送到重放器模块,不断重放数据包,就能不断使后端程序发送验证码。
2.邮箱轰炸
原理和手机验证码一样。
3.修复方案
- 获取验证码时需要进行人机验证
- 一定时间限定验证码请求数量
三、支付漏洞
1.修改订单金额
修改数据包内代表金额的参数为负数,为0,或者小金额,或者金额无穷大
2.修改订单数量
将数据包里面购买物品数量修改为负数,为0,为无限大,会使后端程序处理出错,导致支付金额为0
3.修改优惠券或者积分
在修改数据包代表优惠券或者积分的参数
4.修改使用时间
将试用产品改为无期限使用
5.删除数据包
删除数据包代表支付信息的一些参数
6. 修复方案
1.禁止支付参数值小于或等于0;
2.大金额订单需要人工审核。
四、越权漏洞
1.越权漏洞的概念
什么是越权?越权就是进行不在自己权限以内的操作。越权是指普通用户与普通用户之间、普通用户与管理员之间可以任意的进行信息的增、删、改、查。水平越权举例:用户A在查看自己个人资料时发现某一个代表身份的参数值(Uid、id等),然后修改这个参数值,发现自己居然可以查看到其他人的个人信息。而垂直越权的话就是普通用户可以进行一些管理员身份才能做到的操作。
2. 越权漏洞产生的原因
程序对用户发起的请求没有进行权限验证。
3. 越权的分类
水平越权:权限类型不变,权限 ID 改变。在网站中拥有同一种权限的用户可以任意的相互之间对对方的个人信息,资料进行增、删、改、查等操作。例如:普通用户A与普通用户B之间就是拥有同一权限的用户,而用户A在看自己个人资料时通过某种方法发现网站存在水平越权漏洞,然后A用户通过修改id(或者某个参数),从而看到了B用户的个人资料,不同的用户之间可以任意查看对方信息,这就是水平越权
垂直越权:权限 ID 不变,权限类型改变。低权限的用户可以进行只有高权限的用户才能进行的操作。举例:普通用户A与管理员C就是不同权限的人员了,一般情况下,只有管理员权限才能删除网站里面的用户账号而普通用户是不能删除别人的账号的,但是这时候,网站存在垂直越权漏洞,所以普通用户也能行使管理员权限。把用户账号给删除了。
交叉越权:交叉越权是垂直越权和水平越权的交集
4. 如何判断是否存在越权漏洞
途径一:通过观察URL里面是否存在代表身份的参数,例如参数里面含有id=某个数字,这时候我们可以通过修改这个参数(id),从而看到了别人的个人信息。例如:A用户在个人信息处的URL是:http://xxxx.com/id=123,而B用户在个人信息处的URL是:http://xxxx.com/id=120,我们直接在A用户的人信息处URL上把id=123改为120,这时候我们就可以看到B用户的个人信息了,这叫证明存在越权漏洞了。因为一般情况下,我们修改id后面这个数是不能查看别人的个人信息的。
途径二:用户在发送请求时,我们抓取数据包,然后发现数据包里面含有代表个人身份的参数,我们可以在这个数据包里面进行修改这个参数(id),修改过后,如果发现可以看到别人的一些个人信息的话,也证明存在越权漏洞了。
5. 越权漏洞修复方案
- 前后端校验用户身份
- 禁止修改代表身份的参数值
————————————————
版权声明:本文为CSDN博主「bk天气」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_49577923/article/details/121001540