业务逻辑漏洞

业务逻辑

逻辑越权-检测原理-水平&垂直&未授权

0、图解

image.png|475

1、水平越权

同级别的用户 之间权限的跨越
:A 用户修改 B 用户的账户信息
方法:通过抓包,修改包信息

2、垂直越权

低级别用户到高级别用户 权限的跨越
:普通用户可以修改管理员账户信息
方法:通过抓包,修改包信息

3、未授权访问

通过无用户能访问到需验证应用 PHPStudy + Metinfo4.0 + 会员后台中心

逻辑越权-检测项目-BURP 插件&对比项目

检测插件

xia_Yue
auth-analyzer-plus
实用性不高,不如手工测

检测项目

secscan-authcheck
IDOR_detect_tool

实战:找到当前用户相关的参数名,添加返回包里面的参数名参数值去提交
参数值请求数据加密:JS 中找逆向算法,还原算法重新修改发包测试
请求包带 token:直接复用和删除测试。

支付逻辑常见测试

0、图解

image.png|750

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:

比如:
image.png 这里的地址就是预先准备的地址,目标服务端就会把重置的相关信息发送到我们的服务器上监听端口,得到发来的信息:
image.png

验证逻辑-修改响应包&跳过步骤 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:上传压缩包解压循环资源占用(压缩包炸弹)

posted @ 2025-12-02 09:21  shinianyunyan  阅读(17)  评论(0)    收藏  举报