• 逻辑漏洞----其他类型


    一.数据包重放和条件竞争

    1.数据包重放漏洞

    漏洞介绍:通过数据包重放,可以造成短信轰炸,邮件轰炸,重复提交订单等

    漏洞原理:后台未进行相关操作和技术导致数据包重放漏洞,如短信验证码,邮件校验,提交订单等功能

    修复方案:针对短信和邮箱

    构造一个Hashmap,存放邮箱或电话号码及对应次数,只要某个邮箱或者电话号码次数够了,就不能继续发送了;或者计算两次发送的时间间隔,时间过短就发送不了

    漏洞利用:bp抓包,然后扔到intruder模块一直重放数据包,实现短信轰炸

    2.条件竞争漏洞

    漏洞介绍:条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现bug。尤其在当前我们的系统中大量对资源进行共享,如果处理不当的话,就会产生条件竞争漏洞。

    简单点说,条件竞争涉及到的是操作系统中所提到的进程或者线程同步的问题,当一个程序的运行的结果依赖于线程的顺序,处理不当就会发生条件竞争

    修复:限制同一时间内访问方法的只有单一线程

    案例如下:

    upload-labs的靶场,第18关

    当上传的文件不是.jpg或者.png或者.gif结尾的,就删除文件

    思路:写一个生成一句话木马的php文件,然后不停的发送数据包(因为系统删除也是需要时间的);在发送数据包的同时,不停的去访问这个页面,只要一次访问成功了,就生成了新的一句话木马(不会被删除) 

    上传的木马生成页面代码如下:

    aaa fputs(fopen("aaa.php","w"),''); ?>

    在shell.php执行后,新建了一个aaa.php文件并写入木马,这样即使shell.php被删除了,aaa.php还留有后门。

    发送shell.php可以利用bp的intruder模块

    访问shell.php可以利用python来访问

    1. import requests
    2. url = "http://ip:port/shell.php"
    3. while True:
    4. html=requests.get(url)
    5. if html.status_code == 200:
    6. print("yes")
    7. else:
    8. print("no")

    3.订单金额任意修改

    很多中小型网站都存在【订单金额任意修改】漏洞。在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改

    常见的参数:rmb,value,amount,cash,fee,money

    关于支付的逻辑漏洞这一块还有很多种思路,比如相同价格增加订单数量,相同订单数量减少产品价格 ,订单价格设定为负数,无限叠加优惠券等等

    4.接口无限制枚举

    有些关键性的接口因为没有做沿着或者其他预防机制,容易遭到爆破攻击。常见账号爆破,密码爆破,验证码爆破等等。和水平越权有点像

    案例:快递公司的优惠券枚举,

    优惠券单号就是0000-0000-0000-0000,可以尝试对这个进行爆破 

    某电商会员卡卡号枚举

    爆破成功就出现长度不一样的报文 

     

     5.支付漏洞

    支付漏洞是高风险漏洞也属于逻辑漏洞,通常是通过纂改价格,数量,状态,接口,用户名等传参,从而造成小钱购买大物,甚至0元购,凡是涉及购买,资金等方面的功能处就有可能存在支付漏洞

    商户网站接入支付结果,有两种方式,一种是通过浏览器进行跳转通知,一种是服务器端异步通知

    浏览器跳转通知

    基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面,并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知,导致支付结果难以处理。而且浏览器端数据很容易被纂改而降低安全性(这种方式数据经过了客户端浏览器,极大的可能性被第三方恶意修改)

    过程:用户发起付款,此时,浏览器调用了银行的付款界面,当用户成功付款后,银行向用户返回一个包,用户拿着这个包给商户,商户确认后就购买成功

    由于购买成功的包经过了用户,因此很可能被恶意修改

    服务器端异步通知

    该方式是支付公司服务器后台直接向用户指定的异步通知url发送参数,采用POST或者GET方式。商户网站接受异步参数的url对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额,订单信息是否与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站内入账等。

    过程:用户发起付款,浏览器调用银行的付款界面,成功付款后,银行直接向商户的后台发送一个验证包,这样不经过用户,较安全。

    但是,商户后台需要有一个专门的页面处理这个验证包,还是可能存在伪造的问题。

    1.支付三部曲----订购,订单,付款

    三个步骤中的随便一个步骤进行修改价格测试,如果前面两步有验证机制,那么你可能在最后一步付款时抓包尝试修改金额,如果没有在最后一步在做好检验,那么问题就会存在,其修改的金额值可以尝试小数目或者尝试负数。

    案例1:淘宝网某处存在严重支付漏洞

    1.充值前截图

     2.选择充值的套餐

     3.使用抓包工具。截图数据包。

    把100块改为1块

     4.查看结果

     案例2:重放交易

    通过网银购买豆远后可以将豆元倍增,修改并重复发起某个http请求可以将豆元倍增

    购买成功后,重放其中的请求,可以多次购买商品。

     案例3:修改商品数量

    没有对购买的数量参数进行限制,导致可随意修改,最常见的修改方式就是改成负数或者小数

    1.下单 

     2.修改数量为-1

     案例4.修改支付状态

    没有对支付状态的值和实际订单支付状态进行校验,导致点击支付时抓包修改决定支付或未支付的参数未支付状态的值从而达成支付成功

    案例:同程旅交汇低价支付高价订单

    1.获取订单

     2.点击返回修改

     

     3.通过bp抓包,获取参数

    4.分析数据包

    数据包的关键参数:orderid=254831(订单号),lineid(商品号),totalprice(总的价格)

    经过测试,这条url可以在不登录的情况下更新订单,也就是只要找到orderid,就可以更新订单

     更重要的是orderid是自增值,很容易推测orderid号

    接下来,尝试更改刚才下的单

    lineid和totalprice,这两个是控制网站内已有商品的。

    思路:我们可以尝试找一个便宜的商品,用他的lineid替换掉贵商品的lineid,这样就实现了小钱买高价物

    1806901就是lineid值 

    替换后的订单 ,替换处在上面bp抓到的修改包

     5.修改附属值

    如修改优惠卷金额/数量,修改积分金额,修改运费金额

    案例:积分兑换

    1.先随便看一个兑换商品的详情,可以发现是积分+金额

    2.对bp抓到的包进行分析 

     发现了控制金额的参数:amount=3580,将其修改为1

     3.支付

     6.越权支付

    通过修改一些特殊传参(如id,username,openid)来达到用他人的资金来购买自己的商品

    案例如下:小程序越权积分兑换

    1.访问积分榜

     2.数据包中可以看到openid泄露,这里其实泄露了很多openid,为了方便只截一个,接下来配合积分兑换越权使用他人账户兑换物品

     3.bp中,将请求中原有的我的openid替换为排行榜中的第一名的openid

     4.进行兑换

    5.可以看到地址信息是空的,没有地址无法购买,而添加地址进行的认证是使用的OpenSession进行验证,无法越权上传地址,因此只能尝试抓取返回包,尝试欺骗前端 绕过填写地址,

    经过数据包读取,发现生成订单时返回的地址信息addressinfo为空

     将addressinfo替换为自己的,替换后的数据包:

    发送后可以看到,地址修改成功了 

    7.无限制试用

    通过修改传参(如id,pay,test)来达到无限制试用

    案例:艺龙旅行网严重支付漏洞

    1.首先,在艺龙随便下一个订单到支付页面,选择信用卡支付输入正确的卡号,有效期,姓名,身份证随便输

     居然成功了,那么问题来了,这里只判断信用卡有效期即可成功支付。

    接下来就简单了,我们只要尝试爆破出信用卡的有效期即可。即图中的银行卡有效期。

    支付漏洞总结

    1.找到关键的数据包

    可能一个支付操作有三四个数据包,我们要对数据包进行挑选

    2.分析数据包

    支付数据包中会包含很多的敏感信息(账号,金额,余额,优惠),要尝试对数据包中各个参数进行分析

    3.不安套路出牌

    多去想想开发者没有想到的地方

    4.pc端尝试过,wpa端也看看,app也试试

    防御方法

    1.在后端检查订单的每一个值,包括支付状态

    2.校验价格,数量参数,比如产品数量只能为整数,并限制最大购买数量

    3.与第三方支付平台检查,实际支付的金额是否与订单金额一致

    4.如果给用户退款,要使用原路,原订单退回。比如退押金,按用户原支付订单原路退回

    5.md5加密,解密,数字签名及验证,这个可以有效的避免数据修改,重放攻击中的各种问题

    6.金额超过指定值,进行人工审核等

  • 相关阅读:
    算法体系-12 第 十二 二叉树的基本算法
    2022年第五空间网络安全大赛WriteUp
    接入支付宝沙箱环境
    WEB自动化_强制等待与智能等待(显示等待、隐式等待)
    中国xx集团信息技术工程师面试
    Java框架详解3——Spring的存入对象和取出
    粮食淘洗机结构设计(说明书+任务书+开题+文献综述+翻译及原文+cad图纸)
    21-SpringBoot JUnit5单元测试-断言机制
    vue3中使用better-scroll
    NR PUCCH(四) UL data operation
  • 原文地址:https://blog.csdn.net/qq_44418229/article/details/126067339