业务逻辑漏洞

一、越权漏洞

什么是越权漏洞:

       越权漏洞是一种很常见的逻辑安全漏洞。是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞。

漏洞原理分析:

漏洞产生的原因:

       开发者认为通过登录即可验证用户的身份,而对用户登录之后的操作不做进一步的权限验证,进而导致越权问题。        主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的身份未做验证、鉴权等逻辑判断。        通常情况下,我们使用一个web应用程序提供的功能时,流程如下。如果在“验证权限"环节存在缺陷,那么便会导致越权。

实例测试:

平行越权案例:

案例扩展一:水平越权

通过水平越权漏洞实现修改或删除其他用户个人信息。

测试方法:

申请两个帐户,如test3和test4。 抓取test4用户的请求数据包,通过修改数据包中代表用户ID相关参数的值,判断是否可通过修改test4用户的数据来实现修改或删除test3用户的信息。

测试工具:burpsuite

垂直越权案例:

案例扩展二:垂直越权

通过垂直越权漏洞实现在没有任何权限的情况下添加管理员用户,获得管理员权限。

测试方法:

在添加用户处抓取请求数据包,生成form表单,设置账号密码,越权添加管理用户。

测试工具: burpsuite

防御方案:

1、前后端同时对用户输入信息进行校验,双重验证机制

2、 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限

3、特别敏感操作可以让用户再次输入密码或其他的验证信息

4、可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可预测、不可猜解的 user 信息

5、直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理

6、永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤



二、支付逻辑漏洞

什么是支付逻辑漏洞:

支付逻辑漏洞是指系统的支付流程中存在业务逻辑层面的漏洞。
支付流程通常为选择商品和数量-选择支付及配送方式-生成订单-订单支付-完成支付
最常见的支付逻辑漏洞通常是由于服务器端没有对客户端请求数据中的金额、数量等敏感信息作校验导致一般在电子商务网站上容易出现此类漏洞

支付逻辑漏洞一般可以分为四类:

1、支付过程中可以修改支付金额
2、可以将订单中的商品数量修改为负值
3、请求重放
4、其他问题(程序异常、其他参数修改导致的问题等)

支付逻辑漏洞的危害:

任意金额购买商品,甚至可以导致购买商品后系统给自己账户充值

测试方法:

支付逻辑漏洞之修改订单商品数量:
1、登录网站,选择购买一个商品并抓取数据包
2、找到其中代表商品数量的参数,将参数的值修改为负数
3、发送数据包,生成订单,观察订单是否有效,是否能进入支付页面
4、完成支付

实例测试:

案例:

通过支付逻辑漏洞的修改订单商品数量实现0元购买商品

测试工具:burpsuite

修复方法:

1、在请求数据中对对涉及金额、数量等敏感信息进行加密,保证加密算法不可猜解。并在服务器端对其进行校验。
2、支付交易请求数据中加入token,防止重放攻击。



三、密码找回漏洞

漏洞原理分析:

用户凭证客户端回显
       找回密码功能模块通常会将用户凭证(通常为验证码或者链接)发送到用户注册时使用的手机号或者邮箱中,只要用户不泄露自己的用户凭证就不会被攻击者利用。
       有些信息系统在密码找回功能的设计存在逻辑缺陷,可能会将用于用户自证身份的信息的用户凭证以各种各样的方式返回到客户端。这样攻击者只要通过在本地抓取数据包并对其内容加以分析就能获取到其他用户的用户凭证,从而达到重置任意用户密码的目的。

测试方法和流程:

       在测试系统是否存在用户凭证客户端回显漏洞时,可以先用自己的账号进行密码找回操作,并在抓取记录每次交互操作时的rēsponse数据包。然后观察分析数据包中是否存在和手机或邮箱中收到的用户凭证相同的字符串。测试流程如下:

案例讲解:

一、用户凭证暴露在请求链接中

步骤一:进入某直播网站登录处,点击忘记密码,选择通过注册手机找回密码。

步骤二:输入手机号码,点击获取验证码,然后使用firebug查看请求链接,将发现验证码直接出现在请求链接中。

二、加密验证字符串返回给客户端

步骤一:进入某电商官网按正常流程执行找回密码功能,填写好邮箱和图片验证码,点击下一步,然后使用抓包工具抓取请求包。分析返回的数据包,发现其中包含了一个加密字符串,将其记录下来。

步骤二:之后,邮箱中会收到一个找回密码用的验证码。将该验证码在页面上填好,点击下一步即可进入到密码重置页面。

步骤三:仔细观察发现,密码重置页面URL中的加密验证字符串和之前返回数据包中的加密字符串是同一个。既然如此,则可以绕过邮箱验证码校验,直接利用抓包工具获取到的加密字符串构造到url中进行任意密码重置了。如图,成功重置并登录了官方客服的账号。

三、网页源代码中隐藏着密保答案

步骤一:进入某邮箱网站官网,点击找回密码按钮,再点击"网上申诉"链接。

步骤二:在网上申诉页面直接查看源代码,发现源代码中不但有密码提示问题,还在Hide表单里隐藏着问题答案。通过该方式,可获得任意用户修改密码问题答案,从而可以修改其他用户邮箱密码。

四、短信验证码在客户端回显

步骤一:进入商城网站首页,点击忘记密码。然后通过短信验证方式找回密码。

步骤二:输入图片验证码,点击获取短信验证码。

步骤三:此时抓取数据包,发现服务端直接将短信验证码646868返回给了客户端,将短信验证码填写到验证码处即可成功重置其密码。同理,通过该方式,可以重置其他用户的密码。

防御方案:

1、验证码爆破的,从验证码有效期和请求次数进行限制;
2、token验证之类的,不要直接返回给用户;
3、修改加密算法和加密内容,一定要是强加密,也要做到增加猜解难度或密文不可猜解;
4、用户身份验证一定要在后端实现;
5、在最后一步修改密码的动作时,一定要校验帐号是否通过了验证、短信与手机号是否对应、发送短信与已校验帐号不要使用同一个session名称;



四、验证码暴力破解

什么是验证码暴力破解:

       通常在网站的用户注册、密码找回等页面会设计有手机或邮箱验证码进行验证。主要为了贯彻落实上网实名制以及保障用户帐户的安全性。

       当这些验证码具有一定的规律性,并且没有做好对应的防护措施时,会导致攻击者通过穷举或其它方式猜解出验证码,从而对目标系统造成危害。

漏洞危害:

恶意注册(任意用户注册,批量注册无用帐户等)
重置任意用户密码
......

漏洞原理分析:

测试实例:

案例:

通过暴力破解短信验证码实现重置任意用户密码

测试方法:

1、接收验证码,观察验证码是否有规律性(如纯数字或可预测的字母)
2、多次填写验证码提交,观察是否有时效性或失败次数限制。
3、通过工具暴力猜解验证码

则试工具: burpsuite

防御方案:

1、提高验证码的复杂度(如:设为6位以上数字和字母的组合)
2、限制单位时间内验证码输入错误的次数(如规定10分钟内连续输错5次就锁定10分钟)
3、缩短验证码的时效性(一般短信验证码为5分钟内有效)



五、验证码重复使用

什么是漏洞重复使用:

       如果设计不合理,将会导致验证码在验证成功一次之后,下次使用的时候就不再刷新,也就是可重复使用。

验证码重复使用的危害:

恶意注册
暴力破解
无限刷帖
......

漏洞原理分析:

测试实例:

案例:

通过重复使用验证码实现登录页面暴力破解。

测试方法:

通过重放请求,观察返回的信息提示来进行判断。如果通过重放没有提示"验证码错误"之类的信息,而只是提示"用户名密码错误"这些信息,就说明存在漏洞

测试工具:burpsuite

防御方案:

当服务器端处理完一次用户提交的请求之后,及时将session域中的验证码清除,并生成新的验证码。



六、验证码客户端回显

什么是验证码客户端回显:

       验证码客户端回显就是指当用户向网站系统发送一条验证码(如短信验证码)的请求时,验证码会直接返回显示在前端页面中,或者可通过抓包工具截获该验证码。

漏洞危害:

绕过短信验证码验证进行登录或注册
重置任意用户密码
......

漏洞原理分析:

测试实例:

案例:

通过验证码客户端回显漏洞实现帐户绑定任意手机号码

测试方法:

1、输入任意手机号码,点击发送短信验证码并抓取数据包
2、查看返回数据包,观察验证码是否回显。
3、若回显,则提交验证码。

测试工具:burpsuite

防御方案:

1、在服务端对验证码进行校验。
2、禁止将验证码内容输出到客户端页面以及返回的数据包中。



七、验证码绕过

什么是验证码绕过:

       通常我们在进行帐号注册、密码找回、手机或邮箱绑定的时候,都需要接收验证码,如果没有做好逻辑判断,可以通过修改返回的数据包来实现绕过验证码的安全防护

漏洞危害:

绕过验证码的限制进行用户注册
意用户密码重置
实现用户与任意手机号或邮箱绑定
......

漏洞原理分析:

测试实例:

案例:

通过验证码绕过漏洞实现重置任意用户密码

测试方法:

1、在接收验证码后,输入任意验证码,提交并抓包
2、尝试修改返回包中相关的参数值。
3、转发数据包,若进入密码重置页面,则证明存在漏洞。

测试工具: burpsuite

防御方案:

在服务端增加验证码的认证机制,而不仅仅是在客户端进行判断。



八、验证码自动识别

什么是验证码自动识别:

       当验证码设计不存在逻辑层面的问题时,就要涉及到与验证码机制本身的正面对抗,也就是验证码识别技术。
       这里的验证码主要是指图片验证码。验证码自动识别就是指通过自动化的技术对图片验证码中的字符或公式等内容进行还原,从而突破验证码的安全限制。

漏洞危害:

突破验证码的安全限制,使验证码功能失效

漏洞原理分析:

       一般对于图片验证码的识别流程为:图像二值化处理一去干扰一字符分割一字符识别
       图像二值化就是将图像上像素点的灰度值设置为0或255 ,也就是将整个图像呈现出明显的黑白效果。为了防止验证码被自动识别,通常会加入一些点、线、色彩之类的方式进行图像干扰,如下所示:

所以为了达到良好的识别效果,需要对图像进行去干扰处理。
字符分割主要包括从验证码图像中分割出字符区域以及把字符区域划分成单个字符。
字符识别就是把处理后的图片还原回字符文本的过程。

测试实例:

案例:

通过验证码自动识别漏洞实现暴力破解登录密码。

测试方法:

1、获取验证码链接
2、将链接载入验证码识别工具进行验证码识别,配置相关工具
3、如成功破解用户帐户,则证明验证码识别有效。

测试工具:burpsuite, Pkav http fuzzer

防御方案:

1、增加背景元素的干扰。如背景色、背景字母等
2、字符的字体进行扭曲、粘连
3、使用公式、逻辑验证方法等作为验证码。如四则运算法、问答题等
4、图形验证码和使用者相关,比如选择联系人头像,选择购买过的物品等作为验证码
5、对单位时间内提交请求失败的次数进行限制

posted @ 2021-02-09 20:22  Tkb-  阅读(967)  评论(0编辑  收藏  举报