专栏首页卓文见识条件竞争(Race condition)漏洞挖掘技巧及实战案例全汇总

条件竞争(Race condition)漏洞挖掘技巧及实战案例全汇总

1、漏洞理解

条件竞争漏洞(Race condition)官方概念是“发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。” 这个漏洞存在于操作系统、数据库、web等多个层面,像有名的脏牛(dirty cow)。

对于这个漏洞的理解,关键词是”多线程”和“同时”和“同一个”,通常的web处理方式是通过单线程线性完成的,如果出现多线程并发请求的情况,数据处理逻辑就可能出现异常。这个漏洞的思想和参数污染漏洞(HPP)比较像(传送门),都是通过附加的情况使得程序异常,但原理不同。

2、漏洞原理

对于条件竞争漏洞比较经典的案例是转账、购买,也是条件竞争漏洞的高发场景。这里从数据库层面还原一个星巴克无限购买案例。直观解释下这个漏洞的原理,假设我们使用账户里的1000元购买10件100元的商品,正常购买流程为:

购买物品——>查询余额是否大于商品价格——>购买成功,余额-1000,商品数+1/购买失败,提示余额不足:

1) 查看数据库账户余额及物品数:

2) 点击购买,拦截数据包,设置intruder发送50个数据包,线程调到25后发进行并发请求:

3) 查看数据库的日志,可以看到对count的查看SELECT和更新UPDATE并不是线性依次执行的,所以导致在完成对count-1000的操作之前进行了另一次查询count仍为1000,最终结果是购买数量大于10,而余额为负数:

4) 解决方案通常是加“锁”,mysql执行事务前加BEGIN,后加COMMIT,从而锁定一次事务处理,使按序进行:

3、挖掘技巧:

1)方法:

必须使用的模块是Inturder,将线程调到25进行多线程异步发包,也可以使用curl同时发包。通过查看多个异步请求返回的不同结果,比如11个测试中有10个相同,那一个包可能就是攻击成功的请求。

2)漏洞场景:

挖掘需要关注的功能点有:

  1. 购买:付款/购买/积分/订单操纵相关的漏洞
  2. 兑换:积分/优惠券/注册邀请码(案例1)
  3. 绕过次数限制(案例2)
  4. 多过程处理,如文件上传处理(案例4)
  5. 此外还可能存在DOS攻击(案例3)

特点总结来说就是——共享同一资源,生成其他结果。

3)注意:

这个漏洞具有偶现性,很受环境因素的影响,比如网络延迟、服务器的处理能力等,所以只执行一次可能并不会成功,尽量多尝试几次。

4、实战案例:

1)积分兑换

Hackerone上一个flag兑换邀请码的案例,使用同一Flag请求70次并获得了2次邀请:

另一个Slack的类似案例:

2)绕过数量限制

Shopify商店具有添加地址的功能,但拥有的地点数量最多是4个,可以通过多线程发包绕过软限制:

看到成功成功创建了8个地址:

同样的案例也有:绕过员工帐户数量限制、单次投票机会等,有数量上限的场景都可以尝试多线程绕过。

3)DOS攻击

一个在建议提交处无频率限制从而导致DOS的案例:

4)文件上传漏洞

文件上传也是条件竞争的一个经典案例,在之前文件上传的汇总中也有提及:传送门

漏洞产生的原因来自文件上传的逻辑机制,多过程的处理机制都可能存在这个问题,补充一个gitlab的案例:

Gitlab允许文件import.tar.gz上传,它会将临时文件复制到

/var/opt/gitlab//tmp/project_exports/uploads/import.tar.gz。同时它会执行一个异步操作,负责解压缩导入文件并恢复其内容。

但是,由于在复制文件和处理作业之间存在延迟,其他人可以上传具有相同文件名的文件。如果在导入作业处理之前发生这种情况,受害者将在不知不觉中覆盖攻击者的导入文件。当攻击者的文件被执行时,它将解压缩受害者的导入文件并恢复攻击者存储库中的文件。漏洞攻击不易触发,思路也不易想到。

5、漏洞防御

1)对于业务端条件竞争的防范,一般的方法是设置锁;

2)对于文件上传,一定要经过充分完整的检查之后再上传;

3)在操作系统的角度,共享数据要进行上锁保护。

本文分享自微信公众号 - 卓文见识(zhuowenjianshi),作者:Jayway

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 个人渗透测试思路(cheatsheets)及技巧全汇总

    大多数渗透人员在对一个系统做渗透测试的时候,最大的痛点是无法获得一个全面的测试思路和流程,以至于遗漏真正存在的漏洞或在不存在漏洞的点上浪费太多时间。

    Jayway
  • APP端测试系列(1)——通信安全

    关于APK包、Android架构等基础知识这里先不做介绍,直接介绍测试项和测试方法。

    Jayway
  • JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总

    本文一是在为测试过程中遇到json返回格式时提供测试思路,二是几乎所有国内的资料都混淆了json和jsonp的区别——这是两种技术;以及json和js...

    Jayway
  • LCS + Problem

    最长公共子序列,。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。

    AngelNH
  • SEM竞价推广,如何选择关键词?

    关键词在SEM营销推广中,起着重要的作用,它直观的影响整个SEM投放的成本与效果。我们知道,对于一些SEM新手而言,在做竞价排名的过程中,只是通过提高关键词点击...

    蝙蝠侠IT
  • 微信小程序开放关键词搜索!这些坑,千万不要踩

    在这里需要注意的是,每个小程序最多可以输入 10 个关键词,而这 10 个关键词必须一次性添加后,再提交审核。

    知晓君
  • awesome-go:很全的go语言资源合集

    前面发过关于awsone-python, awsone django, flask。最近在学习golang,所以找到awsone-go

    若与
  • 请求跨域的解决方案

    在项目中遇到错误提示“No 'Access-Control-Allow-Origin' header is present on the requested r...

    MonroeCode
  • 大数据赛道上的单挑:MapReduce与Spark到底谁快?

    ? 通常人们认为Spark的性能和速度全面优于MapReduce,但最新的对决显示MapReduce在某些方面也有胜场,而且数据规模越大优势越大。 Apach...

    灯塔大数据
  • 单足跳跃机器人:多关节型腿部

    对于多关节型腿部机器人,其是研究双足机器人、多足机器人的过度阶段,相应的技术可以应用到其他机器人中。对于多关节型的单足机器人,其基本原理可以借助袋鼠模型.

    ZC_Robot机器人技术

扫码关注云+社区

领取腾讯云代金券