逻辑漏洞学习

概述

逻辑漏洞:指由于程序逻辑不严谨或逻辑太复杂,导致一些逻辑分支不能够正常 处理或处理错误。通俗地讲:一个系统的功能太多后,程序开发人员难以思考全面,对某些地方可能有遗漏,或者末能正确处理,从而导致逻辑漏洞。逻辑漏洞 也可以说是程序开发人员的思路、逻辑存在漏洞。

代码背后是人的逻辑,人更容易犯错,所以逻辑漏洞一直都在,而且由于逻辑漏 洞产生的流量多数为合法流量,一般的防护手段或设备无法有效防护,也导致了 逻辑漏洞成为了企业防护中的难题。


逻辑漏洞类型:逻辑漏洞覆盖面很广,一直以来对于逻辑漏洞尚未产生明确的分 类,因为所有的漏洞包括SQL注入、文件上传、命令执行等本质上都是逻辑漏洞。

逻辑漏洞类型:大致包括了绕过功能限制、遍历、越权、弱口令、信息泄漏、任意用户密码重置、竞争性问题等。在一些场景下,由于功能本身设计复杂、易于 出现纰漏,导致针对特定场景下的特定逻辑漏洞问题讨论,此类风险场景有:支 付安全、验证码安全、应用权限安全等。

特点:非常隐蔽,利用很简单,危害巨大。

安装逻辑漏洞

安装逻辑漏洞:很多中小型网站喜欢使用CMS一键建站,这类网站都有个初始化 的过程即安装过程,第一次访问网站时,会进入安装引导页面:

安装过程包括了数据库配置、网站后台 管理员信息、网站名称、安装目录等关键信息。

由于程序设计的不严谨,安装完成后, 虽然网站可以正常使用,但是初始化安装的页面还可以访问并执行,那么攻击 者就可以通过该页面直接重新安装整个 CMS网站。

安装文件如果被攻击者获取,还会泄露大量的网站信息。除此之外,还有一些网站把更新按钮放在网页中,能够被正常用户访问,直接点击按钮更新网站内容或者代码,这会导致网站出现一些兼容性问题和异常。 

安装逻辑漏洞挖掘思路:

  • 查看能否绕过判定重新安装。
  • 查看能否利用安装文件获取信息。
  • 看能否利用更新功能获取信息。

交易逻辑漏洞 

交易逻辑漏洞:主要涉及转账、抽奖、优惠活动、交易、充值、提现、返现、购 物、金额查询等业务。这类漏洞一旦出现都属于高危漏洞,因为都会涉及到钱、 用户信息、提供商声誉等敏感问题。

交易逻辑的任何位置,任何参数,都可能出现问题。这也是现在金融、证券、支 付行业要求所有业务数据交互都采用目前最安全加密方式的原因。

漏洞危害:攻击者通过漏洞利用攻击业务,直接获利。 

基本测试思路:

  • 加入购物车时,抓包尝试修改购买数量为负数,试一试商品价格能否修改。
  • 确认购物车消息时,尝试修改金额,如果购买多件打折,尝试能不能突破这个逻辑,比如先加入购物车, 再把多余的移除,看有没有效果。
  • 物流这里尝试能否修改运费,或改为负数,或者在不改变收货地址的前提下修改区域到包邮地区。 
  • 确认订单跳转支付接口时,看能不能修改金额,尝试能不能跳过支付,直接跳到支付成功的页面。

常见交易逻辑漏洞 

常见交易逻辑漏洞:

  • 正负值对冲:正常的逻辑是用户购买商品,然后价格累加得到一个总价进行扣款。如果说用户 购买的商品是负数了,那么计算的总数就是负数,反过来钱会给用户。
  • 顺序执行缺陷:正常的逻辑是a-b-c-d流程依次进行操作。如果可以绕过某一个过程进入到下一 步操作,就会造成异常。假设可以跳过支付的操作,就会产生支付绕过逻辑漏洞。
  • 交易金额篡改:使用Burp抓取交易数据包,直接对下单的金额进行修改。
  • 汇率换算问题:产生在paypal类似的国际支付的场景,对于金额的换算可能存在问题。
  • 刷优惠卷、套现:绕过限制,刷活动优惠卷或变现。 
  • 点击支付之后还可以加入购物车:把商品放入购物车点击下单支付,会跳转到微信,支付宝等 第三方支付平台,此时金额已经固定,如果这个时候继续在购物车中加入商品,支付结束之后, 商家发放的商品是购物车原来商品和后续添加的商品。
  • 请求重放:购买成功之后,继续重放请求,可以让购买的商品一直增加。购买成功之后,会有 一个银行对商户网站跳转的过程,如果反复进行操作,有几率会导致商品反复购买和增加,但 是不需要付更多的钱。
  • 订单替换:订单替换发生在支付之后的事件处理,同时向服务器发起二次支付请求一个金额多 一个金额少,支付金额少的,然后支付之后进行替换,告知服务器订单支付完成,让服务器按 照金额多的订单处理。
  • 伪造商家:通过支付过程的缺陷,将自己伪造成目标商家,类似于把自己收款码贴在商家的收 款码上面。
  • 身份伪造:在支付过程中可能会发生身份伪造现象,首先登陆自己的账户,然后取得其他用户 的账户名等有效信息,在业务流程中用其他用户的信息替换自己的信息,用对方的余额购买完 成后,再替换自己的账户名,这样就完成了用别人的钱给自己买东西。
  • 支付密钥泄露:如果商家用自己的网店接入第三方支付接口,由于设计不当导致网点与第三方 支付约定的密钥Key被攻击者获取,那么攻击者就可以利用密钥进行操作。除此之外,内置支 付功能的app为了使用方便有可能把支付密钥放入app中,攻击者可以反编译app获取密钥

用户逻辑漏洞 

用户逻辑漏洞:和用户管理相关功能点上的逻辑漏洞,常见的有身份验证、登录、 注册、修改密码、找回密码、账号申诉等。

密码逻辑问题:

  • 服务端没有验证用户设置密码的强度,并强制修改。
  • 规律性密码,比如许多公司喜欢使用一些公司缩写等特征密码。
  • 密码没有完善的定期修改策略。 

身份验证漏洞:

常见有明文传输、用户名遍历、暴力破解、Session会话固定、Cookie欺骗。

  • 明文传输:账号密码未加密,传输过程中是明文的,容易被网络嗅探监听到账号密码,因为网 络发包方式是广播方式,局域网内容易被嗅探工具检测到流量并查看明文信息。
  • 用户名遍历:登录失败提示账号不存在或者密码错误,可用于遍历用户名。
  • 暴力破解:由于没有设置登录失败次数限制,攻击者可以使用暴力猜解获取账号密码,并进行 登录操作。可以添加验证码或者针对用户名进行错误次数计算,高于一定阈值,账号会被锁定 一段时间,但是不能永久锁定,否则可以被用来进行账户恶意锁定。还可以在某个IP短时间出 现大量登录请求时,封禁该IP地址。 
  • Session会话固定:在请求登录过程时候,URL带有session信息,登录成功之后会将登录成功 的信息绑定到这个session中,攻击者可以发送带有session的URL给相关工作人员诱导其登录, 登录成功后,利用该session就可以伪装管理员身份。只要避免在URL中带入session信息即可 比较有效的防御。
  • Cookie欺骗:开发者为了方便将身份信息/登录信息明文存储和传输或者只是简单编码、哈希 之后存放在cookies中,网站通过获取得到的cookies进行授权或者身份验证,攻击者可以通过 伪造cookie信息能够伪造其他用户进行登录。Cookie不应该存储可理解的身份信息和登录信 息 ,按照规定,cookie对身份信息和登录信息的存储只能通过存储足够长度的随机字符串进行, 以避免篡改。 

注册逻辑漏洞:

  • 批量注册:脚本批量和模拟器注册。
  • 任意用户注册:用户信息与校验凭证未绑定,不校验用户信息(只需要手机号或邮箱即可注册 成功)。
  • 用户覆盖:注册相同账号名的账号或者注册账号如admin (后加空格),覆盖掉已有账号。
  • 注册遍历猜解已有账号:注册时,如果用户名或者手机号已经注册,会提示该用户已注册或已 存在,那么可以使用这个特性,遍历出当前服务的所有用户,常用于扩大弱口令的攻击面。 

找回密码逻辑漏洞:

  • 任意用户密码重置。
  • 密码重置后新密码在返回包中返回。
  • 找回密码功能泄露用户敏感信息,如用户当前密码、绑定的手机号等。
  • 用户名遍历。
  • 找回密码流程步骤绕过。
  • 密保问题前端认证或者密码问题答案不是输入,而是几项选择,可被遍历。 

修改密码逻辑漏洞:

  • 越权修改密码:例如只用用户名作为修改目标判断依据,可以修改其他用户密码。
  • 修改密码没有验证旧密码,可以任意修改用户密码。 

用户逻辑漏洞

账号申诉:

  • 身份伪造
  • 逻辑绕过

信息查询:

  • 权限限制不当可以越权查询
  • 用户信息ID可以猜测导致遍历:简单的以id=1这类为查询条件进行查询。

验证码逻辑漏洞

常见验证码类型:图形验证码、短信验证码、邮箱验证码。

验证码常见问题:验证码可重复使用、验证码随机值可预测、验证码根据提交的 参数生成可被自定义、验证码强度低、验证码无时间限制或者失效时间长、验证 码无猜测次数限制、验证码强校验缺失可删除验证码参数、验证码在返回包中明 文返回、验证码不刷新或无效、验证码数量有限、修改Cookie绕过、修改返回包 绕过验证码、验证码在客户端生成或校验、验证码分步识别、验证码可OCR或使 用机器学习识别等。

短信/邮箱轰炸:有横向轰炸和纵向轰炸两种。在注册、登录、找回密码、更改信 息、绑定手机号、支付类二次验证身份等处,需要发送验证码,如果验证逻辑不 完善,可以在短时间内发送大量验证码,会过多消耗服务器资源并恶意骚扰他人。

横向短信轰炸:轰炸不同手机号,每个手机号发一点验证码。

纵向短信轰炸:轰炸一个手机号,发送大量验证码。

攻击手段:抓取发送验证码的数据包,重放或爆破。服务端的检测如果不够完善, 还可以通过添加%00、%20等绕过检测,实现短信轰炸。 

 

权限类逻辑漏洞

主要是与权限相关的漏洞,当服务器设计不严谨,对于不同用户的权限划分不够 细致,可能会导致权限相关的问题。常见的有未授权访问、垂直越权和水平越权三类。

越权漏洞是在测试过程中遇到比较多的漏洞,可以这样来理解越权漏洞,一个用户A一般只能够对 自己本身的信息进行增删改查,然而由于开发人员的疏忽,没有在某些功能点上对用户身份进行判 断,从而导致用户A可以对其他用户进行增删改查等等操作。

未授权访问:即游客(未登录)能够访问普通用户或超级管理员才能访问的系统信息或者系统功能。

垂直越权:普通用户能够访问管理员甚至超级管理员才能够访问的系统信息或者系统功能。

水平越权:即普通用户/管理员能访问其他普通用户/管理员才能够访问的系统信息或者系统功能。

 

未授权访问:未授权访问是系统对用户限制不全,或者无限制,可以让任意用户或者限制访问用户, 访问到需要权限认证的内容。未授权访问通常是会造成泄露用户信息,系统信息甚至是可以执行系 统命令,操作系统文件,导致系统的整体安全遭到破坏等后果。

未授权漏洞验证:不需要用户身份信息即可访问。Web应用上,一般删除请求包中的Cookie字段, 依旧可以正常访问逻辑上需要身份认证的页面,则说明存在未授权访问。

常见未授权漏洞:Redis 未授权访问漏洞、MongoDB 未授权访问漏洞、Jenkins 未授权访问漏洞、 Memcached 未授权访问漏洞、JBOSS 未授权访问漏洞、VNC 未授权访问漏洞、Docker 未授权 访问漏洞、ZooKeeper 未授权访问漏洞、Rsync 未授权访问漏洞、Atlassian Crowd 未授权访问 漏洞、CouchDB 未授权访问漏洞、Elasticsearch 未授权访问漏洞、Hadoop 未授权访问漏洞、 Jupyter Notebook 未授权访问漏洞等。 

垂直越权:

垂直越权又叫做权限提升攻击,具体原因就是web应用没有做用户权限控制,或者只是 在菜单上做了权限控制,导致恶意用户只要猜测到其他管理页面的URL,就可以访问或者控制其他 角色拥有的数据或者页面,达到权限提升的目的。

admin账号登录,进入网站登录界面。

进来以后可以看到,admin可以添加删除用户,还可以看到所有的用户。 

 

尝试以管理员权限添加新用户,如下图所示。还可以执行其他需要管理员身份才能进行的操作,然 后使用Burp抓包

退出admin账号,登录普通用户或普通管理员的账号,发现不能添加和删除用户,只有查看用户的 权限

用普通用户账号发送一个请求包,然后用Burp抓包获取普通用户Cookie信息:

将普通权限的Cookie放到超级管理员的添加用户的请求包中,当前数据包就是以普通用户身份让 服务器添加用户

 

成功修改,说明垂直越权存在 

水平越权:

又称作访问控制攻击漏洞,Web应用程序接收到用户的请求,进行增 删改查某条数据时候,没有判断数据所对应的用户,或者在判断数据的用户时是 通过从用户表单参数中获取userid来实现的,就可以通过修改userid来实现水平 越权。

与垂直越权的利用过程完全相同,就是越权的对象与自己当前权限同等级,比如 都是网站的普通账号,或者都是网站的普通管理员账号。 

条件竞争漏洞:

是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时 是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时, 将会导致此类问题的发生。

条件竞争漏洞一般出现在与数据库系统频繁交互的位置,例如金额同步、支付等 较敏感操作处。另外条件竞争漏洞也会出现在其他位置,例如文件的操作处理、 信息更新等位置。

竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操 作或者同步操作的场景中。

实例:假设现有一个用户在系统中共有2000元可以提现,他想全部提现。于是该 用户同时发起两次提现请求,第一次提交请求提现2000元,系统已经创建了提现 订单但还未来得及修改该用户剩余金额,此时发起的第二次提现请求同样提现 2000元,于是程序在还未修改完上一次请求后的余额就进行了余额判断,如果第 二次余额判断速度快于第一次余额修改速度,就能成功提现两次订单,而数据库 中余额也将变为-2000。而这产生的后果将会是平台多向该用户付出2000元。

这种多次交易请求后一次先于前面完成的情况非常多,如游戏充值、商城付款、 提现、转账等。大多数情况都是由于网络环境的原因导致的。

其他逻辑漏洞

  • 用户/订单/优惠券等ID生成有规律,可枚举
  • 接口无权限、次数限制
  • 加密算法实现问题
  • 执行顺序问题
  • 敏感信息泄
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值