业务逻辑漏洞
业务逻辑
逻辑越权-检测原理-水平&垂直&未授权
0、图解
1、水平越权
同级别的用户 之间权限的跨越
即:A 用户修改 B 用户的账户信息
方法:通过抓包,修改包信息
2、垂直越权
低级别用户到高级别用户 权限的跨越
即:普通用户可以修改管理员账户信息
方法:通过抓包,修改包信息
3、未授权访问
通过无用户能访问到需验证应用 PHPStudy + Metinfo4.0 + 会员后台中心
逻辑越权-检测项目-BURP 插件&对比项目
检测插件
xia_Yue
auth-analyzer-plus
实用性不高,不如手工测
检测项目
secscan-authcheck
IDOR_detect_tool
实战:找到当前用户相关的参数名,添加返回包里面的参数名参数值去提交
参数值请求数据加密:JS 中找逆向算法,还原算法重新修改发包测试
请求包带 token:直接复用和删除测试。
支付逻辑常见测试
0、图解

1、常见支付流程
选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付每个流程都可能存在安全漏洞,每个步骤都可以尝试测试
2、数据篡改
(1)、商品信息篡改
商品 ID
购买价格
购买数量
(2)、订单信息篡改
订单对象:低价买高价
- 产品替换:下单时修改订单商品对象
- 订单替换:下两个单,支付时替换商品对象
折扣内容:修改折扣信息
- 盗用:算出优惠券编号的规律,盗用别人没有使用的优惠券
- 复用:使用同一个优惠券编号实现复用
(3)、支付信息修改
支付方式:修改支付接口,如:重定向到自己的接口上
支付状态:修改支付结果,实现“0 元购”
3、支付方式修改
替换支付
重复支付
最小额支付
优惠券支付
负数支付:修改支付数据为负数,本身支付时是 减,如果再减一个负数那就是加了
溢出支付:代码中使用的变量类型存在最大值,将支付数据改为溢出值
- 例:该变量的最大值为 39180328,将支付数据改为 39180329(39180328+1),则最终的实际值为 1。
4、另类方法
无限试用:先要修改验证逻辑,如果是时间戳,那就修改时间戳,让它永远到不到截止时间
积分兑换:和前面的负数支付类似
越权支付:使用别人的身份 id 进行兑换、购买
四舍五入半价购:第三方发起请求的支付金额没有做验证,充值 0.019 时只识别了 0.01,而不是四舍五入到 0.2
循环利用优惠券
- 利用支付时的逻辑漏洞:当第一个订单使用优惠券后关闭订单,优惠券被返回了,那么就可以使用刚才返回的优惠券再次创建订单,但关闭订单后可以以原本的状态再次打开,使用已使用的优惠券。
- 正常逻辑:关闭订单后无法开启订单
支付签约逻辑:支付宝,微信等平台,同时打开签约界面,先签约一个再解约,然后另一个平台再操作签约,这时由于并发签约未检测解约,就导致重复签约。
支付逻辑如何挖掘
1、找到关键的数据包
可能一个支付操作有三四个数据包,我们要对数据包进行挑选。
2、分析数据包
支付数据包中会包含很多的敏感信息( 账号,金额,余额,优惠等 )
要尝试对数据包中的各个参数进行分析。
3、不按套路出牌
多去想想开发者没有想到的地方,如算法拼接,关闭开启返优惠券等
4、PC 端尝试过,APP 端也看看,小程序也试试
支付逻辑安全修复
1、在后端检查订单的每一个值,包括支付状态;
2、校验价格、数量参数,比如产品数量只能为整数,并限制最大购买数量 ;
3、与第三方支付平台检查,实际支付的金额是否与订单金额一致;
4、如给用户退款,要使用原路、原订单退回。如:退押金,按用户原支付订单原路退回;
5、加密、解密、数字签名及验证,这个可以有效避免数据修改,重放攻击中的各种问题;
6、金额超过指定值,进行人工审核等。
验证码突破-回传显示&规律爆破
回传显示:通过手机找回密码,响应包中包含短信验证码,即:泄露。
规律爆破:找回密码时使用位数较少的短信验证码,或者验证码没有设置有效时间限制,导致攻击者借助自动化工具在一定时间范围内 爆破 获得短信验证码,从而导致重置任意账号密码。
验证目标-重定向发送&重定向用户
重定向用户:开发者没有对验证码和邮箱/手机号进行匹配验证,导致发送的验证码任何邮箱/手机号都可以使用
- 操作方法:先使用自己的邮箱/手机号接收正确的验证码,然后通过 bp 抓包,将其中的用户信息改为目标用户。
- 影响:对的验证码,任意匹配用户
重定向发送:如果数据包存在发送验证邮箱或目标地址,尝试修改到自己的邮箱或目标,实现拦截获取,需要看数据包中有没有类似 met_host:
比如:
这里的地址就是预先准备的地址,目标服务端就会把重置的相关信息发送到我们的服务器上监听端口,得到发来的信息:

验证逻辑-修改响应包&跳过步骤 URL
修改响应包 有些验证逻辑是前端验证,或者前后端配合但前端为主,而判断依据是服务器的返回值,根据返回值判定是否符合要求,这时就可以通过 bp 抓包修改响应包中的值,跳过验证;但如果是后端验证,或者前后端配合但后端为主,这就不行。
步骤跳过 URL
-
一般验证流程:验证用户名-验证短信验证码-输入新密码-重置成功这四个步骤应该紧紧相连,互相相关,只有通过了第一个步骤验证才可以进入下一个步骤,如果每个步骤之间 没有进行关联性验证 ,就可能导致跳过关键验证步骤,从而导致重置任意账号密码;
-
操作方法:先把正确的流程走一遍,拿到每一步的数据包、相应包,测试时直接替换包或者包内容
关联性验证:如果存在关联性验证,则当跳过步骤后会提示 流程错误
注:是否真的成功要看后验证,可能后续还有其他验证没有通过,那就只是自娱自乐。
验证码识别绕过等技术适用于:口令存在爆破,接口枚举调用,任意用户注册等安全问题
1、验证码简单机制-验证码过于简单可爆破
2、验证码重复使用-验证码验证机制可绕过
3、验证码智能识别-验证码图形码被可识别
4、验证码接口调用-验证码触发接口可枚举
图片验证码-识别插件-登录爆破&接口枚举
插件一
1、Burp 加载 插件(免费)
2、运行监听 py 文件
3、设置插件-验证码地址
刷新验证码直接抓包获取地址
4、数据包验证码填入参数
5、发包线程设置 1 后开始
如果不限制线程数量会导致验证码错乱 实操
插件二
1、Burp 加载 插件(有接口,要收费)
2、注册接口帐号充值
3、设置插件-填入帐号
4、数据包验证码填入参数
5、发包线程设置 1 后开始
图片验证码-重复使用-某 APP 短信接口滥用
删除身份验证字段进行绕过或直接使用 Token sign 验证码等直接重复使用,只要不刷新页面就不会刷新验证码
滑块验证码-宏命令-某 Token&Sign&滑块案例
参考案例
同理也可以适用在 Token,sign 在页面代码中自动获取自动填入后绕过验证
隐私合规-判断规则&检测项目
隐私合规:需要满足国家规定的隐私合规要求,否则会被下架,如果不管控,则会将用户的各种身份信息进行盗取。
对象:APP 小程序等
具体:详见 APP 安全
动态分析(运行时分析):appscan
静态分析(直接对安装包分析):appshark 某 SRC 规则参考
URL 重定向-检测判断&钓鱼配合
国外大厂的一个任意URL跳转都500$、1000$了,国内看运气,大多不收
定义:一种常见的 Web 安全漏洞,由于网站 URL 重定向功能设计不当,没有验证跳转的目标 URL 是否合法,用户可通过此漏洞跳转到任意网站。
- 案例:正常 QQ 的连接是 https://www.qq.com,但如果后面拼接了一个准备的域名:https://www.qq.com?url = www.srctest.com,而预先准备的网站页面也和 QQ 一样,且 QQ 也没有对跳转的网址有验证,那么就可能导致钓鱼。
影响:导致可通过该网站跳转到存在木马、病毒的网站或者钓鱼网站,被钓鱼。
网站全爬取工具:Teleport Ultra
黑盒看业务
用户登录、统一身份认证处,认证完后会跳转用户分享、收藏内容过后,会跳转跨站点认证、授权后,会跳转站内点击其它网址链接时,会跳转 总之,要找到会跳转的 url
黑盒看参数名
redirectredirect_toredirect_urlurljumpjump_totargettolinklinktodomain
白盒看代码块
Java
response.sendRedirect(request.getParameter("url"))
PHP
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url)
.NET
string redirect_url = request.QueryString["url"];
Response.Redirect(redirect_url);
Django
redirect_url = request.GET.get("url")
HttpResponseRedirect(redirect_url)
Flask
redirect_url = request.form['url']
redirect(redirect_url)
Rails
redirect_to params[:url]
绕过方法
1、单斜线 "/" 绕过
https://www.landgrey.me/redirect.php?url=/www.evil.com()
2、缺少协议绕过
https://www.landgrey.me/redirect.php?url=//www.evil.com
3、多斜线 "/" 前缀绕过
https://www.landgrey.me/redirect.php?url=///www.evil.com https://www.landgrey.me/redirect.php?url=www.evil.com
4、利用 "@" 符号绕过
https://www.landgrey.me/redirect.php?url=https://www.landgrey.me@www.evil.com
5、利用反斜线 "" 绕过
https://www.landgrey.me/redirect.php?url=https://www.evil.com\www.landgrey.me
6、利用 "#" 符号绕过
https://www.landgrey.me/redirect.php?url=https://www.evil.com#www.landgrey.me
7、利用 "?" 号绕过
https://www.landgrey.me/redirect.php?url=https://www.evil.com?www.landgrey.me
8、利用 "\" 绕过
https://www.landgrey.me/redirect.php?url=https://www.evil.com\\www.landgrey.me
9、利用 "." 绕过
https://www.landgrey.me/redirect.php?url=.evil (可能会跳转到www.landgrey.me.evil域名) https://www.landgrey.me/redirect.php?url=.evil.com (可能会跳转到evil.com域名)
10、重复特殊字符绕过
https://www.landgrey.me/redirect.php?url=///www.evil.com//.. https://www.landgrey.me/redirect.php?url=www.evil.com//..
资源拒绝服务-加载受控&处理受控
方法 1:验证码或图片显示自定义大小
方法 2:上传压缩包解压循环资源占用(压缩包炸弹)

浙公网安备 33010602011771号