四、对用户行为做出错误的假设
1、简述
最常见的根本原因之一逻辑脆弱性对用户行为做出错误的假设。如果开发人员没有考虑到违反这些假设的潜在危险场景,这可能会导致各种各样的问题
2、受信任的用户并非始终值得信赖
1、信任期限:应用程序可能看起来很安全,因为它们实现了看似健壮的措施来强制执行业务规则。不幸的是,一些应用程序错误地认为,在最初通过这些严格的控制之后,用户及其数据可以无限期地受到信任。这可能导致从那时起对相同控制的执行相对宽松。
2、一致性:如果在整个应用程序中没有一致地应用业务规则和安全措施,则可能会导致潜在的危险漏洞,攻击者可能会利用这些漏洞。
3、涉及实验:
实验3:安全控制不一致
实验3:安全控制不一致
信息:
和上一题一样
part1:
先注册一个账号
邮箱:
attacker@exploit-0a8f00ce0368d12cc099127a0169003c.exploit-server.net
完成注册
进行登录
part2:
修改邮箱(后缀为@dontwannacry.com的邮箱)
part3:
完成实验
3、用户并不总是提供强制输入
1、数据篡改:一个误解是用户总是为强制输入字段提供值。浏览器可能会阻止普通用户提交不需要输入的表单,但正如我们所知,攻击者可以在传输过程中篡改参数。这甚至可以扩展到完全删除参数。
2、数据间的联系:在同一个服务器端脚本中实现多个函数的情况下,这是一个特殊的问题。在这种情况下,特定参数的存在与否可以确定执行哪个代码。删除参数值可能允许攻击者访问本应无法访问的代码路径
3、寻找:当探测逻辑缺陷时,应该尝试依次删除每个参数,并观察对响应的影响
一次只移除一个参数,确保到达所有相关的代码路径
尝试删除参数的名称和值。服务器通常会以不同的方式处理这两种情况
遵循多阶段流程直至完成。有时候,在一个步骤中篡改参数会影响工作流中的另一个步骤
(适用于URL和POST参数,同时检查cookie)
涉及实验:
实验7:两用终端隔离薄弱
身份认证漏洞-实验3:密码重置逻辑错误
(【bp靶场portswigger-服务端2】身份认证漏洞-16个实验(全))
实验7:两用终端隔离薄弱
权限级别设置有缺陷
已有账号:wiener/peter
part1:
登录已有账号
漏洞点在于,将原密码(current-password参数)删除任然可以修改密码
对administrator密码进行重置操作
删除了current-password参数
修改数据包,并关闭拦截
提示修改成功
part2:
完成实验
administrator登录
删除用户
4、用户并不总是按照预期的顺序
1、许多事务依赖于由一系列步骤组成的预定义工作流。Web界面通常会引导用户完成此过程,并在每次完成当前步骤时将他们带到工作流的下一步。但攻击者不一定会遵守这个预期的顺序。不考虑这种可能性可能会导致危险的缺陷,而这些缺陷可能相对容易利用
2、如许多实施双因素身份验证(2FA)的网站要求用户在一个页面上登录,然后在另一个页面上输入验证码。假设用户将始终遵循此过程直到完成,结果是不验证他们是否遵循此过程,可能会使攻击者完全绕过2FA步骤。
3、涉及实验:身份认证漏洞-实验2:2FA简单旁路
【bp靶场portswigger-服务端2】身份认证漏洞-16个实验(全)
4、不可预测性:即使在相同的工作流或功能中,对事件的顺序进行假设也可能导致广泛的问题。使用Burp Proxy和Repeater等工具,一旦攻击者看到请求,就可以随意重放请求,并使用强制浏览以任何顺序执行与服务器的任何交互。这允许它们在应用程序处于意外状态时完成不同的操作
5、寻找缺陷:要识别这些类型的缺陷,应该使用强制浏览来以非预期的顺序提交请求。如可能跳过某些步骤、多次访问单个步骤、返回到前面的步骤等。请注意访问不同步骤的方式。尽管通常只是向特定的URL提交GET或POST请求,但有时可以通过向同一URL提交不同的参数集来访问步骤。与所有逻辑缺陷一样,尝试确定开发人员做出了哪些假设以及攻击面在哪里。然后可以寻找违反这些假设的方法
(这种测试通常会导致异常,因为预期的变量具有空值或未初始化的值。在部分定义或不一致的状态下到达某个位置也可能导致应用程序报错。在这种情况下,务必密切注意遇到的任何错误消息或调试信息。这些都是有价值的信息公开,这可以帮助微调攻击并了解有关后端行为的关键详细信息)
6、涉及实验:
实验8:工作流程确认不充分
实验9:通过有缺陷的状态机绕过认证
实验8:工作流程确认不充分
工作流程顺序存在缺陷
已有账号:wiener:peter
part1:
登录账号
part2:
实现完整的购买流程(购买成功的流程)
将100以内的商品加到购物车
进入购物车,并购买
购买成功
/cart是添加到购物车
part3:
失败的购买流程
和上一步一样,但是购买的是夹克(钱不够)
part4:
分析数据包
对比发现,不同的地方就是 这个地方
购买成功: /cart/order-confirmation?order-confirmed=true 购买失败: /cart?err=INSUFFICIENT_FUNDS
part5:
将夹克添加到购物车
重放购买成功的这个数据包
刷新页面
(发现购物车商品被购买清空)
实验9:通过有缺陷的状态机绕过认证
登录过程的顺序存在缺陷
存在/admin路径
已知账号:wiener:peter
part1:
使用已有账号,完成登录的流程
选角色(随便选一个)
流程的数据包
part2:
漏洞点是,丢掉选角色的数据包,将以管理员身份登录
进行重新登录,且拦截数据包
先关闭浏览器接收请求
再丢掉数据包
(避免接收到报错页面)
part3:
完成实验
回到首页,已经有admin权限
四、特定领域缺陷
1、简述
1、功能导向:在许多情况下,会遇到特定于业务领域或站点用途的逻辑缺陷
2、交易功能:在线商店的折扣功能是寻找逻辑缺陷的经典攻击面。对于攻击者来说,这可能是一个潜在的金矿,在折扣应用的方式中会出现各种基本的逻辑缺陷。
3、示例:一家在线商店对超过1000美元的订单提供10%的折扣。如果业务逻辑无法检查在应用折扣后订单是否发生了更改,那么这可能会被滥用。在这种情况下,攻击者只需向购物车中添加商品,直到达到1000美元的阈值,然后在下订单之前删除不想要的商品。然后,即使订单不再满足预期标准,也会收到订单折扣
4、了解算法:应该特别注意根据用户操作确定的标准调整价格或其他敏感值的任何情况。试着了解应用程序使用什么算法来进行这些调整,以及在什么时候进行这些调整。这通常涉及操纵应用程序,以使其处于所应用的调整不对应于开发人员所期望的原始标准的状态。
5、掌握业务知识:要识别这些漏洞,需要仔细考虑攻击者可能具有的目标,并尝试使用提供的功能找到实现此目标的不同方法。这可能需要一定程度的特定领域知识,以便了解在特定情况下什么可能是有利的。举个简单的例子,你需要了解社交媒体,才能理解强迫大量用户追随你的好处
————
如果没有这方面的知识,你可能会忽视危险的行为,因为你根本没有意识到它潜在的连锁反应。同样地,你可能很难把这些点连接起来,并注意到两个功能是如何以有害的方式结合在一起的
6、涉及实验:
实验4:业务规则的实施存在缺陷
实验10:无限货币逻辑缺陷
实验4:业务规则的实施存在缺陷
采购流程存在缺陷
已有账号:wiener:peter
part1:
进入靶场,还未登录就提供了一张优惠券代码
应该是优惠券叠加了
优惠券1:NEWCUST5
使用已有账号登录
wiener:peter
part2:
现在考虑再注册账号,或者其他方法获得新优惠券
首页底部(注册以后会提供一个新的优惠券2)
优惠券2:SIGNUP30
part3:
优惠券叠加支付购买夹克
优惠券1:NEWCUST5
优惠券2:SIGNUP30
(添加优惠券地方)
如果连续两次输入相同的代码,它将被拒绝,因为优惠券已经被应用。但是,如果在这两个代码之间交替使用,则可以绕过此控制
实验10:无限货币逻辑缺陷
信息:
采购流程上存在缺陷
已有账号:wiener:peter
part1:
先登录
漏洞点关于礼品卡
购买礼品卡
优惠券:SIGNUP30
最后10元的礼品券只用花7元
获取到礼品卡
N2HtusPj6Z
兑换礼品卡
然后赚了3块钱
【100-(10-3)+10】=103
part2:
分析数据包
逻辑: 1、添加到购物车:POST/cart 2、优惠券:POST/cart/coupon 3、结账:POST/cart/checkout 4、清空购物车,购买成功:GET/cart/order-confirmation?order-confirmed=true 5、礼品卡:POST/gift-card
part3:
使用宏编辑器
(这个地我配置错了一个,然后马上改过来了)
(下面这张图错了一个地方)
要取的是code那里
改正:
连点4个ok
part4:
主页数据包
****提醒***
踩坑:线程一定要设置为1(后面有我多线程跑的结果)
开始攻击
part5:
钱会自己每次多3块
刷新页面可以看见有多少钱了(钱够了就去买夹克)
钱够了,买夹克去
(多线程跑的特殊错误结果)
刷新购物车页面
去买夹克
五、提供加密预言
1、简述
1、加密复用:当用户可控制的输入被加密并且所得到的密文然后以某种方式对用户可用时,可能发生危险的情形。这种输入有时被称为“加密预言”。攻击者可以使用此输入,通过正确的算法和非对称密钥加密任意数据
2、加密载荷转移:当应用程序中有其他用户可控制的输入需要使用相同算法加密的数据时,这就变得很危险。在这种情况下,攻击者可能会使用加密oracle生成有效的加密输入,然后将其传递给其他敏感函数
3、反向功能:如果在站点上存在提供反向功能的另一个用户可控输入,则这个问题可能会变得复杂。这将使攻击者能够解密其他数据以识别预期的结构。这为他们节省了一些创建恶意数据的工作,但不一定是成功利用漏洞所必需的
4、加密oracle的严重性取决于哪些功能也使用与oracle相同的算法。
5、涉及实验:
实验11:通过加密Oracle绕过认证
实验11:通过加密Oracle绕过认证(问题:填入的值被置空)
向用户公开的加密的逻辑缺陷(漏洞是关于cookie的加密机制、评论处)
目标:删除carlos用户
已有账号:wiener:peter
part1:
漏洞是关于cookie的加密机制
使用已有账号登录,收集登录的数据包
登录请求的响应包中,返回了cookie
stay-logged-in
session
在主页数据包只有stay-logged-in、session
说明是通过这2参数鉴别身份
part2:
(加密机制存在缺陷的地方:评论区)
抓取评论时候的数据包,发送到repeater
正常的评论
当修改邮箱为错误格式的时候,会设置一个notification的值
part3:
拦截后修改为错误格式
并分析报错以后的数据包
HTTP历史记录中分析
邮箱错误时设置的notification值
在响应中发现notification值被解密
(22222是我第二次尝试的时候改的)
part4:
遇到了问题:填入的值被置空
将登录时候产生的 stay-logged-in值复制到此处尝试解密
将stay-logged-in的值填到notification进行解密
但是我把加密的东西填到这里以后,这里的值被置空了
后来尝试了一下拦截返回数据包set-cookie的值,并修改
最后还是被置空