逻辑漏洞
逻辑漏洞
程序逻辑问题产生的漏洞。一般出现在:
- 登录
- 注册
- 密码找回
- 信息查看
- 交易支付金额
- ……
逻辑漏洞多为合法流量,企业防护困难。
1️⃣ 注册处
- 注册功能可能出现任意用户注册、短信轰炸等问题。
- 前端验证:判断是否有任意用户注册漏洞
- 手机验证码验证:验证码是否可以暴力破解,验证码与当前手机号有没有检验匹配(0000-9999)
- 用户名密码注册:是否会导致批量注册
2️⃣ 登录处
- 登录处可能出现任意用户登录、短信轰炸等问题。
- 前端验证:判断是否有任意用户登录,是否有验证码回显,是否可以修改返回包造成任意用户登录等问 题
- 手机验证码验证:验证码是否可以暴力破解,验证码与当前手机号有没有检验匹配(0000-9999)
- 账号密码登录:没有 验证码或者是否存在验证码可以被绕过,导致进行暴力破解
3️⃣ 密码找回处
- 验证码是否可以多次使用
- 验证码是否直接返回在数据包中
- 验证码未绑定用户
- 修改接收的手机或邮箱进行密码重置
- 前端验证绕过
- 验证步骤绕过(举例:先获取手机验证码,再输入要修改的邮箱和密码)
- 未校验用户字段的值(举例:修改密码处user_id可替换)
- 等等
4️⃣ 支付与越权
- 提交订单或者结算时对金额等参数进行修改(单价、总价)
- 提交订单时修改商品参数(低价购买高价商品)
- 修改支付接口等等(将支付链接发给别人,这也是为什么支付宝在支付的时候还要再输一次密码)
交易支付中的逻辑问题
支付漏洞的理解通常都是篡改价格。比如:一分钱买任何东西、少收款、企业收费产品被免费使用等, 直接造成企业的经济损失。
支付逻辑漏洞的呈现形式
- 充值的时候,程序只判断订单有没有充值成功,但没有判断金额 例如:生成订单跳至支付宝页面,在原网站上点支付失败,这时可以修改订单,改成更大的金额(订单 号没变),回到支付宝支付页面,支付成功。程序并没有重新核对支付宝实际的金额,只 是把订单改为 已支付。
- 使用余额支付,把数量改为负数,总金额也为负数,扣除余额时,负负得正,这时余额增加。
- 支付逻辑漏洞的几种常见类型:
- 修改金额
- 修改商品数量
- 修改优惠金额
- 修改数量、单价,优惠价格参数为负数、小数,无限大
- 商品价格更改
- 支付 key 泄露等
漏洞案例
安装 Webug
docker pull area39/webug
docker run -d -p 8087:80 -p 33060:3306 --name=webug area39/webug
登录:http://YOUR_IP_ADDRESS/control/login.php
-
账号:
admin
-
密码:
admin
点击「立即购买」按钮,抓包修改价格,就可以看到能以修改后的价值买到该商品。
密码修改漏洞案例
进入后台查看现有用户和密码:
docker exec -it webug bash
mysql -p
# 输入密码
toor
查看现有的表:
use webug;
select * from user_test;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | admin | admin |
| 2 | aaaaa | asdfsadf |
+----+----------+----------+
打开靶场前端:
首先用账号 aaaaa/asdfsadf
登录,得到 URL http://175.178.126.31:8087/pt_env/control/auth_cross/cross_auth_passwd2.php?id=2
,主要要由于靶场 bug,要把 pt_env
删除掉才能访问,接着我们在修改密码处把这里的 id 改为 2,去越权修改另外一个账号的密码:
重新查看数据库,可以看到 id 为 1 的账号密码确实被越权修改了:
mysql> select * from user_test;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | admin | abc |
| 2 | aaaaa | asdfsadf |
+----+----------+----------+
实战项目逻辑漏洞分享
-
验证码回传导致任意用户注册
-
任意用户登录。用户注册之后直接登录,分析这条注册请求的响应,替换 user_id 和 username,可实现任意用户登录
逻辑漏洞修复
- 正确配置用户权限信息,不要简单用 cookie 或 session
- 同一手机,同一时间内限制发送手机验证码数量
- 删除特权码,不能返回验证码
- 订单类应该校验每一个值,包括支付状态、MD5 加密&解密、数字签名以及验证,避免数据修改、重放攻击等
- 前后端都应该进行校验