不可思议但又无处不在的漏洞,WEB安全基础入门—业务逻辑漏洞

article/2025/8/21 4:41:54

欢迎关注订阅专栏!
WEB安全系列包括如下三个专栏:

  • 《WEB安全基础-服务器端漏洞》
  • 《WEB安全基础-客户端漏洞》
  • 《WEB安全高级-综合利用》

知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路!
欢迎关注订阅专栏!

  • 专栏文章追求对知识点的全面总结,逻辑严密,方便学习掌握。力求做到看完一篇文章,掌握一类漏洞知识。让读者简洁高效的掌握WEB安全知识框架,推开入门深造的大门。
  • 绝不为了追求文章数量,彰显内容丰富而故意拆散相关知识点。避免读者沉迷在无尽的技巧中而迷失进阶的道路!本系列的目标是授之以渔,而不仅仅是技巧的堆砌。
  • 每篇文章均配有大量靶场,点击文章中靶场名即可跳转练习(靶场在网站注册即可免费使用)。
  • 欢迎订阅专栏!建议学完两个基础专栏,再学习高级哦~

不可思议但又无处不在的漏洞,WEB安全基础入门—业务逻辑漏洞

    • 1. 什么是业务逻辑漏洞
    • 2. 漏洞产生的原因
    • 3. 漏洞实际利用
      • 1. 错误的信任客户端验证
      • 2. 非常规输入数据不能被正确处理
      • 3. 设计时错误预测用户操作
    • 4. 漏洞实例
      • 1. 对客户端控件的过度信任([Excessive trust in client-side controls](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-excessive-trust-in-client-side-controls))
      • 2. 双因素认证逻辑缺陷([2FA broken logic](https://portswigger.net/web-security/authentication/multi-factor/lab-2fa-broken-logic))
      • 3. 高级逻辑漏洞([High-level logic vulnerability](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-high-level))
      • 4. 低级逻辑缺陷([Low-level logic flaw](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-low-level))
      • 5. 对异常输入的处理不一致([Inconsistent handling of exceptional input](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-inconsistent-handling-of-exceptional-input))
      • 6. 不一致的安全控制([Inconsistent security controls](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-inconsistent-security-controls))
      • 7. 两用终端上的弱隔离([Weak isolation on dual-use endpoint](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-weak-isolation-on-dual-use-endpoint))
      • 8. 密码重置逻辑缺陷([Password reset broken logic](https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-broken-logic))
      • 9. 双因素验证绕过([2FA simple bypass](https://portswigger.net/web-security/authentication/multi-factor/lab-2fa-simple-bypass))
      • 10. 工作流验证不足([Insufficient workflow validation](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation))
      • 11. 通过特殊状态绕过身份验证([Authentication bypass via flawed state machine](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-flawed-state-machine))
      • 12. 业务规则的执行存在缺陷([Flawed enforcement of business rules](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-flawed-enforcement-of-business-rules))
      • 13. 无限货币的逻辑缺陷([Infinite money logic flaw](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-infinite-money))
      • 14. 通过加密-明文绕过身份验证([Authentication bypass via encryption oracle](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-encryption-oracle))

1. 什么是业务逻辑漏洞

是业务逻辑在设计或具体实现上的缺陷导致攻击者可以利用的漏洞。攻击者通常使程序处于不寻常的“状态”,导致业务逻辑不能正确处理,在这种情况下利用现成的逻辑或函数达成恶意的目标。
该类漏洞使用自动漏洞扫描器检测很难发现。因此,逻辑缺陷通常是测试人员的一个很好的目标。

业务逻辑漏洞,往往对技术要求不高,但是需要测试人员有异想天开的脑洞,本文可重点看4.漏洞实例,拓宽下脑洞,见识下一个个不可思议,不可理喻的业务逻辑漏洞。
在这里插入图片描述

2. 漏洞产生的原因

  • 设计和开发人员错误的预估用户的行为,导致用户实际操作与程序设计逻辑偏离。

简单举例:开发人员认为用户都是通过浏览器进行交互访问,很多验证可能仅依靠客户端的验证。而没有考虑很多“用户”使用拦截代理进行各种操作。这就造成了大量验证被绕过,数据报文内容可能被任意篡改的情况。

  • 程序功能过于复杂,没有一个团队能完整了解所有功能具体实现,导致了错误的预估其他功能,从而产生偏差,易被攻击者利用。

一个开发小组错误的认为另一功能产生的输入数据是可靠的而未进行全面验证。而那个功能开发团队却以为后续处理会进行验证和过滤…

3. 漏洞实际利用

1. 错误的信任客户端验证

一个根本性的错误假设是,用户只会通过提供的Web界面与应用程序交互。这就像一眼看到未来的“美女老婆”,作为优质青年怎么可能旁观呢,早就各种套路深入交流了。现实如此,网络世界更是这般。

例题1、2

2. 非常规输入数据不能被正确处理

应用程序往往在管理库存、应用预算限制、触发供应链阶段对用户数据的内容进行验证,判断是否符合各项规则条件限制,最终决定能否接受。开发人员要针对各种可能的输入类型和场景进行验证功能的实现。
比如,对数量类型的输入,有没有考虑负数的情况呢。比如下面的验证逻辑代码

$transferAmount = $_POST['amount'];
$currentBalance = $user->getBalance();if ($transferAmount <= $currentBalance) {// Complete the transfer
} else {// Block the transfer: insufficient funds
}

负数造成的影响将是灾难性的。特别是前端有了过滤,而后端恰巧缺失了这一类过滤,会造成问题难以在测试阶段被尽早发现出来。
测试输入数据三问,这有助于尽早发现漏洞:

  • 数据限制条件是什么
  • 到达极限条件后,会发生什么
  • 输入的数据有被替换或者标准化吗

例题3、4、5

3. 设计时错误预测用户操作

  1. 受信任用户永远受信任,不再进行后续验证。

例题6

  1. 用户可以绕过前端强制必填字段,而后端对此没有验证

删除参数查看系统有无任何异常响应,力争跳转至不同的判断路径中

  • 一次只删除一个参数,确保每个代码路径都能触发到
  • 分别删除参数名和值,服务器通常会产生不同的处理方式
  • 遵循多流程的处理直至完成,有时一个环节的参数(或cookie)改变,会极大影响到后续步骤。

例题 7、8

  1. 用户操作未按流程顺序执行

正常用户会按照程序指引一步一步顺序完成,但是攻击者往往会跳过某些步骤,程序若未验证,则造成漏洞。

例题 9、10、11

  1. 特定领域的业务漏洞

网站某一项特定领域的业务逻辑漏洞,

  • 营销促销领域,打折劵的使用或凑单价格满足条件金额会突然变化的情况,都是漏洞高发区
  • 社交媒体粉丝和点赞数,社交媒体业务逻辑衍生的漏洞等

例题12、13

  1. 功能实现明文-加密输出途径

当用户可控制的输入被加密,然后以某种方式向用户提供所产生的密文时,可能会发生危险的情况。攻击者可以使用此输入来使用正确的算法和非对称密钥加密任意数据。
攻击者可定制攻击荷载内容,利用此处功能点,生成符合网站要求的加密cookie

例题 14

4. 漏洞实例

1. 对客户端控件的过度信任(Excessive trust in client-side controls)

  • 目标

      购买价格昂贵的Lightweight l33t leather jacket
    

测试账户:wiener:peter

  • 解题思路

添加产品到购物车环节,数据包中发现,可任意更改价格

POST /cart HTTP/1.1
Host: ac081f251eda4b10c0583dbc00470032.web-security-academy.netproductId=1&redir=PRODUCT&quantity=1&price=1

2. 双因素认证逻辑缺陷(2FA broken logic)

  • 目标

      登陆目标账户carlos
    

测试账户:wiener:peter

  • 解题思路

此题正常登陆逻辑为(攻击思路见注释框)

  1. 输入账号密码,通过后生成验证码发到登录人邮箱`POST /login`  `GET /login2`

修改数据包verity值,确保系统已为carlos账户生成有效的验证码。

GET /login2 HTTP/1.1
Host: ac9f1fea1f713b13c0ca44ec0086002c.web-security-academy.net
Cookie: session=afxODj6T2amYajgf2qNNCB6gKQLSaI0G; verify=carlos
  2. 输入验证码        `POST /login2`

使用Burp爆破模块 对验证码进行爆破(规则很简单,0000~9999遍历爆破)

  3. 完成登陆

3. 高级逻辑漏洞(High-level logic vulnerability)

  • 目标

      购买价格昂贵的Lightweight l33t leather jacket
    

测试账户:wiener:peter

  • 解题思路

此题开发人员忘记设计验证数量为负的情况,只是验证了总金额不能为负数。本人账户有100.所以最终结账金额控制在(0~100)即可。其他一样修改数据包即可

在这里插入图片描述

4. 低级逻辑缺陷(Low-level logic flaw)

  • 目标

      购买价格昂贵的Lightweight l33t leather jacket
    

测试账户:wiener:peter

  • 解题思路

改题思路很简单,购买总金额在超过极限大之后,突然反转,从负数开始,需要利用爆破模式,回到0。再搭配其他产品控制100以内。

5. 对异常输入的处理不一致(Inconsistent handling of exceptional input)

  • 目标

获取administrator的权限,并删除carlos

  • 解题思路

这道题思路比较巧妙,可记录下来备用。

  1. 注册时邮箱长度不设限,但是注册成功后数据库记录的有限长度仅为255位。
  2. 同时发现admin状态只有单位邮箱注册的人员才能访问@dontwannacry.com
  3. 所以构造一个长度远超255位的邮箱,此邮箱为攻击者能收到邮件的邮箱。

many_string@dontwannacry.com.攻击者邮箱后缀保证在m处正好是255字节。
这样注册时攻击者能正常收到邮件获取验证连接。应用数据库却已单位邮箱形式存到数据库。从而使攻击者获取了单位admin权限

6. 不一致的安全控制(Inconsistent security controls)

  • 目标

获取administrator的权限,并删除carlos

  • 解题思路

此题问题出现在账户页更换邮箱未做验证,正常用户可更换为特定单位邮箱,导致获取admin权限

7. 两用终端上的弱隔离(Weak isolation on dual-use endpoint)

  • 目标

获取administrator的权限,并删除carlos
测试账户wiener:peter

  • 解题思路
    1. 熟悉流程,发现账户页有修改密码的功能,抓取数据包如下
POST /my-account/change-password HTTP/1.1
Host: ac8d1ff71e005690c0010f4300f00032.web-security-academy.netcsrf=6WiavlTndiXBzv8zpE13UM4R6lGUzCy6&username=wiener&current-password=peter&new-password-1=123&new-password-2=123
  1. 修改username=administrator 删除&current-password=peter,新设密码为123
  2. 再次发送数据包,登陆administrator,密码已成功修改

8. 密码重置逻辑缺陷(Password reset broken logic)

  • 目标

重置账户carlos的密码,并登录其账户
测试账户wiener:peter

  • 解题思路

此题用测试账号走一遍流程,经测试发现数据包

POST /forgot-password?temp-forgot-password-token=AmG0hPiLCdYdTKba5le0Ywfdt9M7o3MW HTTP/1.1temp-forgot-password-token=AmG0hPiLCdYdTKba5le0Ywfdt9M7o3MW&username=wiener&new-password-1=123&new-password-2=123

经测试去掉token的值,处理依然成功

POST /forgot-password?temp-forgot-password-token= HTTP/1.1temp-forgot-password-token=&username=wiener&new-password-1=123&new-password-2=123

再次正常启动流程,用户名发起carlos密码重置。使用上述数据包完成重置

9. 双因素验证绕过(2FA simple bypass)

  • 目标

已经获得目标账户密码:carlos:montoya,但是需绕过双因素验证,访问carlos首页
测试账户wiener:peter

  • 解题思路

账号密码验证后,可在输入验证码环节,直接更改url到主页,跳过此环节。

10. 工作流验证不足(Insufficient workflow validation)

  • 目标

购买商品"Lightweight l33t leather jacket"
测试账户wiener:peter

  • 解题思路

经测试流程发现,流程各环节中,最后一步购买确认可以单独发起。

11. 通过特殊状态绕过身份验证(Authentication bypass via flawed state machine)

  • 目标

购买商品"Lightweight l33t leather jacket"
测试账户wiener:peter

  • 解题思路

该题在尝试跳过一个步骤时采用,直接拦截数据包,初始/GET就拦截,然后丢弃。浏览器URL栏直接改为首页。

12. 业务规则的执行存在缺陷(Flawed enforcement of business rules)

  • 目标

购买商品"Lightweight l33t leather jacket"
测试账户wiener:peter

  • 解题思路

    此题最下方还可以填写任意邮箱得到验证码,所以是两个验证码。发现可以交替提交无报错。

13. 无限货币的逻辑缺陷(Infinite money logic flaw)

  • 目标

购买商品"Lightweight l33t leather jacket"
测试账户wiener:peter

  • 解题思路

网站有兑换币(相当于10元充值卡)购买时花费十元,但是若使用优惠劵后,可多赚3元。重复这个流程指导金额可以购买目标商品即可。(另,自动化可使用Burp的插件)

14. 通过加密-明文绕过身份验证(Authentication bypass via encryption oracle)

  • 目标

获取admin权限,删除账户carlos
测试账户wiener:peter

  • 解题思路

暂略


http://chatgpt.dhexx.cn/article/XQWoceGl.shtml

相关文章

业务逻辑安全思路总结

在一些关键的业务场景里&#xff0c;我们最应该关注的安全问题是什么呢&#xff1f; 想到这&#xff0c;发现挺有意思的&#xff0c;于是我重新去梳理了一下业务逻辑方面的内容&#xff0c;做了一张关于业务逻辑安全的思维导图&#xff0c;在整理的过程中&#xff0c;自己的思路…

开发业务逻辑

转自&#xff1a;http://www.uml.org.cn/zjjs/201008021.asp 前言 记得几个月前&#xff0c;在一次北京博客园俱乐部的活动上&#xff0c;最后一个环节是话题自由讨论。就是提几个话题&#xff0c;然后大家各自加入感兴趣的话题小组&#xff0c;进行自由讨论。当时金色海洋同学…

Service业务逻辑层

就是功能实现 例&#xff1a;Account类要求编写业务逻辑层AccountServiceImpl类实现一个转账功能 先定义DBUtils类封装数据库连接代码、定义Account类、定义PersonDao类提供增删改查方法 public class AccountServiceImpl{public static void transfer(int fromId,String pwd,…

业务逻辑详解

不同的项目有不同的功能&#xff0c;不同的功能需要不同的实现&#xff0c;实现这些核心功能的代码就叫业务逻辑 比如让你实现一个功能&#xff0c;给你两个数&#xff0c;让你获取它的和&#xff0c;你所写的如何才能获得任意给定的两个数的和&#xff0c;这个程序实现过程即可…

业务逻辑漏洞

业务逻辑漏洞定义&#xff1a; 业务逻辑漏洞是指由于程序逻辑不严谨或逻辑太复杂&#xff0c;导致一些逻辑分支不能正常处理或处理错误。 业务逻辑漏洞特性&#xff1a; 业务逻辑漏洞只出现于业务流程中&#xff08;模块功能&#xff09;&#xff0c;也就是说网站的部分都有…

业务逻辑漏洞总结

一、漏洞简介 业务逻辑漏洞产生的最核心原因&#xff0c;就是在编写程序时&#xff0c;只考虑了常规的操作流程&#xff0c;即“当在A情况下&#xff0c;就会出现B&#xff0c;此时执行C即可”&#xff0c;但是开发者却没有考虑当用户执行了意料之外的X时会发生什么。这种对于…

前端业务逻辑

前端业务逻辑 1-关于全选和非全选 Vue3环境下运用ant-design-vue框架 展示效果 全选 非全选 业务逻辑 1、数据结构data const state reactive({cart: , // 购物车信息ids: [], // 删除购物车单个商品的idcartNum: , // 购物车数量checkAll: false, // 是否处于全选状态c…

java业务逻辑_java业务逻辑怎么写?

现在Java项目一般都是用Spring全家桶开发&#xff0c;以web项目来讲结构主要分为Controller层、Service层和DAO层&#xff0c;细分的话有的项目可能还会有一个Manager层。 一个请求到达后端之后会根据请求的路径找到对应的Controller&#xff0c;Controller会调用相应的业务Ser…

什么是业务逻辑?

不同的项目有不同的功能&#xff0c;不同的功能需要不同的实现&#xff0c;实现这些核心功能的代码就叫业务逻辑 比如让你实现一个功能&#xff0c;给你两个数&#xff0c;让你获取它的和&#xff0c;你所写的如何才能获得任意给定的两个数的和&#xff0c;这个程序实现过程即可…

业务逻辑之终极分析

细说业务逻辑 前言 记得几个月前&#xff0c;在一次北京博客园俱乐部的活动上&#xff0c;最后一个环节是话题自由讨论。就是提几个话题&#xff0c;然后大家各自加入感兴趣的话题小组&#xff0c;进行自由讨论。当时金色海洋同学提出了一个话题——“什么是业务逻辑”。当…

Linux中tar命令用法

tar命令&#xff1a;主要用于压缩和解压缩。 tar命令有两种压缩格式 &#xff1a; 1、 gzip格式&#xff1a; 1&#xff09;、压缩 压缩用法&#xff1a; tar gcvf (压缩包名)文件1 文件2 一般压缩包包名以 .tar.gz作为后缀名&#xff0c;压缩完成之后保留原文件。 压缩前…

linux中tar命令的用法

linux下最常用的打包程序就是tar了&#xff0c;使用tar程序打出来的包我们常称为tar包&#xff0c;tar包文件的命令通常都是以.tar结尾的。生成tar包后&#xff0c;就可以用其它的程序来进行压缩。 1&#xff0e;命令格式&#xff1a; tar[必要参数][选择参数][文件] 2&…

Linux中tar命令

tar命令是类Linux中比价常用的解压与压缩命令。 可以使用命令 (man tar) 命令来进行查看man的基本命令。下面举例说明一下tar 的基本命令。 #tar -cvf sysconfig.tar /etc/sysconfig 命令解释&#xff1a;将目录/etc/sysconfig/目录下的文件打包成文件sysconfig.tar文…

linux-tar命令

tar命令 1. 压缩格式的介绍2. tar命令格式3. tar命令及选项的使用4. zip和unzip命令及选项的使用5.常见解压/压缩命令巨人肩膀 1. 压缩格式的介绍 Linux默认支持的压缩格式: .gz.bz2.zip 说明: .gz和.bz2的压缩包需要使用tar命令来压缩和解压缩.zip的压缩包需要使用zip命令…

tar命令集合(详解)

tar 命令可以将许多文件一起保存至一个单独的磁带或磁盘归档&#xff0c;并能从归档中单独还原所需文件。 示例 以test文件为例 压缩命令 tar -cvf test.tar test test1解压命令 tar -xvf test.tar主操作模式: -A, --catenate, --concatenate 追加 tar 文件至归档 -c, --…

GBDT原理

梯度提升树的使用 GBDT算法流程 GBDT流程 输入&#xff1a;训练数据集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } D\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots,\left(x_{N}, y_{N}\right)\right\} D{(x1​,y1​),(x2​,y2​),……

GBDT总结

一&#xff1a;声明 本文基本转自刘建平先生的该篇文章&#xff0c;原文写的很好&#xff0c;读者可以去看看。本文中&#xff0c;作者将根据自己实际项目和所学结合该文章&#xff0c;阐述自己的观点和看法。 二&#xff1a;GBDT概述 GBDT也是集成学习Boosting家族的成员&a…

GBDT模型

GBDT&#xff08;Gradient Boosting Decision Tree&#xff0c;梯度提升树&#xff09;属于一种有监督的集成学习算法&#xff0c;与前面几章介绍的监督算法类似&#xff0c;同样可用于分类问题的识别和预测问题的解决。该集成算法体现了三方面的优势&#xff0c;分别是提升Boo…

GBDT模型详解

GBDT算法 GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;全名叫梯度提升决策树&#xff0c;是一种迭代的决策树算法&#xff0c;又叫MART&#xff08;Multiple Additive Regression Tree&#xff09;&#xff0c;它通过构造一组弱的学习器&#xf…

机器学习之集成学习:GBDT

目录 一、什么是GBDT 二、GBDT的理解 2.1、GBDT通俗解释 2.2、GBDT详解 三、GBDT的应用 3.1、二分类问题 3.2、多分类问题 3.3、回归问题 四、GBDT如何选择特征 五、GBDT优缺点 一、什么是GBDT GBDT&#xff0c;Gardient Boosting Decision Tree&#xff0c;梯度…