逻辑漏洞挖掘学习总结

逻辑漏洞挖掘学习(总结完善)

近学习了一下挖逻辑漏洞,针对逻辑漏洞学习到的点做一下总结,主要以看思路和漏洞实例在 学习,参考链接就是总结中的链接以及与这些链接相关的网站,太多了,就直接在文章总列举出 来了。逻辑漏洞的挖掘主要还是在数据包的各个参数上,一定要细心。

工具:BurpSuit(主要的逻辑漏洞的挖掘工具)

思路:复杂灵活

核心:绕过真实身份认证或者正常业务流程达到预期目的

用户身份:认证(用户身份特性认证)

  • 本地认证
  • 服务端认证

业务流程:对业务流程的熟悉程度(各类型网站+业务模式)

  • 制定漏洞模型
  • 重点业务功能区:个人信息区域、密码修改区域、密码忘记区域、支付区域、手机号区域等

逻辑漏洞的类型:

支付漏洞:价格、数量、订单、结算、优惠券积分等利用(比如原价100元的A产品可以利用漏洞小于100元去购买,在支付中一般分为三步:订购、确认信息、结算)

订单:
  • 选择商品时修改商品的价格(也可以在确认订单的时候修改订单,可以改小或者改为负数)
  • 选择商品时更改商品的数量(如设置为负数)
    • 比如在一个服务器购买网站,他们的硬盘是按G来算的,就好像1G只要1元(假设),2G只要2元,以此类推,比如那个服务器总共需要200元,我们是否可以修改G的数量来减少支付价格呢,比如我们把G改成-19
  • 商品剩余为一件时,多人同时购买是否产出冲突
  • 生成订单时修改订单的金额
  • 商品为0时是否还可以购买
结算:
  • 优惠活动时打折、优惠券的多次使用
  • 截断数据包,结算的时候修改订单数量、金额
    • 比如A产品100元,改为-90元
    • 在很多时候,我们都忽略了一个问题,那就是在购买一件商品的时候,我们都喜欢修改成0.01或者负数,但是这里是有一个积分的,就是比如我们在购买1元产品的时候可以获得100积分,但是我们如果将金额数小于1元的话积分就肯定是为空的了,因为这里的积分是按100/元来算的,也就是说,如果我们看到购买xx元有送积分的,我们可以来尝试一下把金额数改成积分最低数,就比如1元。
    • 比如我们在某网站,他们用的是自家的钱包(迷你钱包),这个钱包作用也仅是用于这一个站,在提现时,没有任何验证码或者校验机制,只要输入体现金额就可以提现,并且是秒到账,如果什么负数,修改金额都测试过了都不行,那么你就可以试试多线程并发问题,提现时抓包,比如我现在钱包内有0.1元,那么按理说每提0.01可以提现10次,也就是发送10次进程,但是利用这个问题可以达到多发现几次成功的进程,提现时抓包,然后把数据包发送到BurpSuite工具的Intruder当中,进行批量发送18次,然后可以看到成功的提现到了12次(并发、数据库操作加锁)
    • 比如a产品为999元,当我们购买的时候我们可以试试修改数量成-1个,看是否有变成-999元,我们点击支付一下,一般来说,都可能支付失败的,因为这个时候服务器验证了这个价格是否和服务器中对应的价格是否一样,此时我们可以将-999元的产品放到购物车,再去此网站购买一个1000元产品的购物车,然后我们可以来点击购买,可以看到支付价格就变成了1元(1000+(-999)=1)了
  • 截断数据包,结算的时候修改支付方式(第三方的支付接口逻辑设计不严格就会产生)
    • 比如将百度钱包的接口、微信支付等改为一个其他的接口,如果逻辑设计不严格就会产生漏洞
  • 伪造订单,刷单
    • 例如:在购买一个产品的时候,目标程序时用过A参数判断是否支付,比如A=1实时表示支付,A=0时表示未支付,通过修改可控的A来验证是否可以伪造订单、等。
  • 重复支付(请求重放、多次下单)
    • 比如一些商场中有一些试用卡之类的,通过某种渠道获得的(比如签到,分享网站信息,购买某个商品送来的),当我们试用的时候主动取消试用,那么这个时候试用卡可能会返回到我们账户中,这里的问题就是如果没有进行对订单多重提交的校验,那么就可导致无限制刷牌子。
    • 比如,我在试用某个产品的时候,每次试用都会产生一个订单号,然后利用刚抓到的数据包进行批量提交,你就可以看到每次提交的订单号不一样,然后这时你再看订单可以看到同一个商品的无数订单,但试用牌子数只扣了你第一个试验时的牌子数,那么这时你申请批量退出试用,那么这么多订单,每退一个就会退相应的牌子数量到账户当中,这就构成了无限制刷得问题
  • 越权支付
    • 比如我们在购买某产品的时候,支付时会出现当前用户的ID,如果没有加以验证,其支付也是一次性支付没有要求输入密码什么的机制,那么就可以修改这个用户ID为其它用户ID,达到用其他用户的账号进行支付你的商品
  • 参数污染 请求没该参数,却返回该参数,可请求该参数污染返回值
支付漏洞突破口:
  • 截断数据包,伪造第三方的确认信息
  • 绕过商家确认直接退货
  • 绕过商品类型直接退货(退货是否被允许,比如虚拟商品,话费等)
  • 绕过客户端验证直接确认收货
支付漏洞实例:
支付漏洞修复方案:
1
2
3
4
5
6
7
8
9
和银行交易时,做数据签名,对用户金额和订单签名。
敏感参数不要明文放在URL中
服务端效验客户端提交的参数
在服务端计算金额的时候,一定要判断是否为正数。
支付过程中加一个服务器生成的key,用户校验参数有没有被串改。
如果一定需要用URL传递相关参数,建议进行后端的签名验证
订单金额和充值接口返回的数据进行校验
提交订单时后台判断单价是否与数据库中相符,如不符则返回错误。
支付时应从服务器拉取数据,而不是直接读客户端的值!!

密码重置漏洞:

用户密码找回方式:
密码重置突破口:

任意用户登录:

认证缺陷漏洞:

身份验证码之暴力破解 (https://bbs.ichunqiu.com/thread-45640-1-1.html)
  • 无防护措施(没有对登录、注册、重置密码之类的功能进行一定的防护,所以当碰到没有验证码的,没有对输错密码次数进行限制,而且还是明文传输的系统,先可以考虑爆破)
  • 锁定机制——>撞库(有些系统会有一些防护措施,比如超过一定的错误次数会将账号进行锁定,或者是某IP频繁的进行登录操作会封IP,这是后可以进行撞库,用弱密码遍历用户名;有些限制并没有在后台验证,也可以加入XFF等方式绕过)
    • 修复:限制单位时间内执行某项操作的次数,要对限制的方法、次数等进行详细的说明,限制的验证也应该再服务端
  • 验证码(可以防止自动化攻击)
    • 图片验证码——>绕过(图片验证码反复使用、验证码在前端校验、验证码可识别、验证码在客户端传输)
    • 短信验证码——>爆破/绕过(与图片类似)
    • 修复:所有的验证码生存周期都应该是一次性的,无论校验成功与失败,且验证码加入干扰线,变形等防止机器识别,对于可爆破的参数加上人机识别,通过设置的阀值来判断;同时验证过程不应将有助于推测正确验证答案的信息返回到客户端。
    • https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=23909

越权:

  • 水平越权

    • 实例:

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      https://www.bigniu.com/bug/view/926
      https://xz.aliyun.com/t/2011
      https://www.secpulse.com/archives/41142.html
      https://www.secpulse.com/archives/38473.html
      https://www.secpulse.com/archives/35169.html
      https://bbs.ichunqiu.com/thread-39287-1-1.html
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0196245.html
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0194518.html
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0193632.html(越权删除+敏感信息泄露)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0192676.html
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0192848.html(越权任意用户修改+信息泄露)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0193124.html(越权之信息泄露)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0193124.html(越权修改+密码重置)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0191930.html(整站越权+通过组合越权获取所有信息)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0191192.html(爆破+越权)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0190106.html(绕过signature字段达到越权)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0189823.html(越权之信息泄露)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0188760.html(越权之信息泄露)
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0187544.html
  • 垂直越权

    • 实例:

    • 1
      2
      3
      4
      https://xz.aliyun.com/t/2011
      https://www.secpulse.com/archives/41174.html
      https://www.secpulse.com/archives/37083.html
      http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0189507.html
  • 未授权访问(登录凭证验证)

  • 绕过授权模式(参数构造)

敏感信息泄露:

1
2
3
4
5
6
7
8
9
10
https://www.bigniu.com/bug/view/930
https://www.bigniu.com/bug/view/928
https://www.bigniu.com/bug/view/927
https://www.secpulse.com/archives/47842.html
https://www.secpulse.com/archives/47482.html
https://www.secpulse.com/archives/42603.html
https://www.secpulse.com/archives/41375.html
https://www.secpulse.com/archives/41253.html
https://www.secpulse.com/archives/41144.html
https://www.secpulse.com/archives/40909.html

接口枚举:业务接口因为没有做验证或者验证机制缺陷,容易遭受枚举攻击、撞库、订单、优惠券遍历

补充:

在学习过程中对于遇见的一些新学习到的业务逻辑测试方法的总结

争对客户端刷新验证码的绕过

  1. 在一些有验证码的站点,每次进行验证的验证码都是通过第三方的接口调用的,有些验证码是通过加载的,这个时候直接访问加载的地址显示直接就是验证码,所以,正对这种验证码的刷新就可以通过拦截数据包,刚好卡在验证码链接跳转的那一步,进行重放,通过这种方法来绕过。这里通过漏洞银行直播中的两张图来说明

对于滑动验证码的的绕过

  1. 现在有好多网站都是滑动验证码,在学习了漏洞银行直播中的业务逻辑挖掘做一个笔记:
    1. 首先在滑动验证码哪里查看JS代码,看一下JS代码,看组件是怎么构造加载的,然后确定滑动验证码需要的一些参数
    2. curl 等方式获取页面,查找一些需要的参数
    3. 通过获取的参数构造正常滑动以后的链接作为payload
    4. 通过curl 访问payload获取数据

.net Nlog日志泄露

  1. 对于现在许多.net的网站,一般在遇到.net的网站访问一些目录时报404/403等,就会放弃。其实.net的网站有Nlog日志,通过Nlog的特性构造一些payload就可以访问有些站点的Nlog日志,里面可能会包含敏感信息。
    1. 关于Nlog的特性一下文章有说明:http://www.cnblogs.com/felixnet/p/5498759.html
    2. 关于payload主要就是拼接当前的一些时间等关键值

xxe接口越权

  1. xxe的越权,这里还是一些网站使用的接口权限设置不当造成的,路劲可以通过dirb探测等等。