逻辑漏洞
1. 定义
- 由于****程序逻辑不严谨或者太过复杂,导致一些逻辑分支不能正常处理或处理错误,统称为业务逻辑漏洞
2. 常见漏洞
身份认证安全、支付逻辑漏洞(数据篡改)、
任意密码找回、验证码突破、接口调用安全、
未授权访问、权限绕过
3. 业务逻辑安全
(1). 身份认证安全
- 有些网站对身份认证模块****没有做好安全防护,导致漏洞产生
a. 暴力破解
①测试方法
- 在没有验证码或者一次验证码可以多次使用时
- 爆破用户名:提示****用户名不存在时
- 已知用户名:提示****输入密码错误
- 使用一个常用密码:进行****密码喷洒
②修复方法
- 增加验证码:使用复杂验证码,登录失败变换验证码
- 限制登录频率:超过一定次数后锁定账户
- 二次验证:添加手机验证码或邮箱验证码
b. 撞库
通过手机互联网已泄露的用户和密码信息,生成****对应的字典,尝试批量登录其他网站后,得到一系列可以登陆的用户,通过部分用户多个网站使用同一个密码的现象,对其他网站进行尝试登录
c. 身份伪造
①Cookie伪造
-
测试方法
- 使用同一个账户登录,找到一个****可以证明身份的页面
- 拦截刷新包,观察****Cookie值是否能修改
- 数据包放行,页面显示为修改后信息,则存在该漏洞
-
修复方法
- 对客户端标识的用户信息采取****Session会话认证
②Session会话固定攻击
- 诱骗受害者使用****攻击者指定的Session Id的攻击手段,利用了服务器的session不变的机制
-
测试方法
- **攻击者通过某种手段(XSS、嗅探等)**重置用户的Session Id,然后监听用户会话状态
- 目标用户携带攻击者设定的Session Id登录站点
- 攻击者通过Session Id获得合法会话
-
修复方法
- 每次登陆成功后****重新生成Session
d. 加密测试
- 有些网站在****前端加密,然后传到后台直接和数据库里面的值作对比,这时抓包并暴力破解
①测试方法
用账号密码****登录,抓包,查看是否通过加密方式对账号密码进行处理
②修复方法
- 将加密****对比的方法放到后台去执行
(2). 数据篡改
①业务一致性
- 手机号篡改
- 邮箱和用户名篡改
- 订单ID篡改
- 商品编号更改
- 用户ID篡改
②业务数据安全
- 金额数据篡改
- 商品数量篡改
- 最大数量限制突破
- 本地JS参数篡改
(3). 任意密码找回
a. 用户凭证暴力破解
- 常见的是找回密码的验证码是****4位,并且服务器没有加以限制,我们可以通过爆破出验证码的方式来找回密码
①测试手法
- 验证码的位数:
4 or 6
,验证码有效时间1min - 15min
- 验证码爆破防护绕过
②修复建议
- 增加验证码****复杂性和长度
- 限制请求修改次数
b. 返回凭证
①形式
- url返回凭证
- 抓包返回凭证
- 凭证在页面中
②测试方法
- url返回凭证:使用Firefox的firebug****查看请求链接,看链接中是否有验证码登密码找回凭证
- 抓包直接返回:根据手机号找回密码后****抓包,验证码直接或加密显示在
verifycode=xxx
中- 在页面中:通过密保问题找回密码**,查看源码**,问题和答案就在源码中显示
c. 邮箱弱token
①Unix时间戳+MD5
- 发现邮箱中重置密码的链接,有字符串被md5加密,解密后类似于1491293277(**10位数字),判断为Unix时间戳**
- 重置他人密码只需要用他人邮箱发送****重置密码邮件,在短时间内对Unix时间戳暴力破解,即可获得重置密码的链接
②用户名
- 重置密码链接直接使用****用户名进行区别,改变用户名即可更改他人密码
③服务器时间
- 利用两个账号同时点击找回密码,去邮箱查看找回密码的链接,发现随机token只相差1-2,即考虑为服务器时间。
- 利用****一个未知账号和一个已知账号,同时点击找回密码,稍微遍历随机token,即可构造出未知密码的找回链接
d. 用户凭证
①短信验证码
- 通过他人手机号找回密码,抓包,将他人手机号替换成自己的手机号,获取验证码,提交后即可修改他人密码
- 通过自己手机号找回密码,抓包,将数据包中的username替换成他人用户名,提交后即可修改他人密码
②邮箱token
- 通过邮箱找回密码,访问链接重置密码,输入****新密码提交时抓包,虽然有token,但任然可以直接修改用户ID进而修改密码
e. 重新绑定
①手机绑定
- 给已知账户绑定手机,发现****绑定手机的URL链接中有uid参数,修改uid参数为他人,即可实现将他人账户绑定上自己手机号,从而实现修改密码
- 修改个人资料处抓包,修改userid为他人,修改手机号为自己,即可实现将他人账户绑定上自己手机号,从而实现修改密码
②邮箱绑定
- 通过邮箱找回密码,U****RL链接中修改用户ID为他人,邮箱不变,之后通过链接将他人账户绑定为自己的邮箱,从而实现修改密码
f. 服务器验证
①最终提交步骤
- 使用邮箱找回密码,通过****链接到达修改密码页面,修改密码后提交、抓包,获得UID参数并修改为他人,从而实现修改密码
②验证逻辑为空
- 通过密码保护问题找回密码,抓包,将****密保问题删除,直接修改密码,提交(密保问题和新密码在同一页面)
g. 跳过验证
- 密码找回页面,先****记住最终修改密码的URL,再使用他人用户名进行密码找回,但直接跳转至最终页面,实现修改密码
- 修改密码页面抓包,修改其中的
username_cookie
为其他用户,或是将step
修改为最终步骤,从而跳过验证步骤
h. 本地验证
- 本地服务器****直接通过服务器返回的状态码进行判断是否成功跳转
- .发送短信等****验证信息的动作在本地执行,可以通过修改request包进行控制
i. token可控
- 通过邮箱找回密码,抓包查看提交验证码后的返回数据,有加密字符串,但和后面重新设置新密码URL连接中的加密字符串一样,所以可以利用该加密字符串
- 根据上面提交验证码的抓包,****修改User为其他用户(可能存在md5加密),发送,就可以返回其他用户的加密字符串
- 重新返回到找回密码首页,利用****其他用户找回,在输入验证码处直接修改URL链接,加入加密字符串,可以直接绕过验证码
j. 注册覆盖
- 注册****重复的用户名,能够注册成功,相当于修改了密码
k. Session覆盖
- 同一浏览器,首先输入****自己的账户进行邮箱密码找回,进入邮箱查看链接,接着输入他人账户,进行密码找回,返回刚刚自己的邮箱点击链接,由于Session覆盖导致了,这个链接成为了修改他人密码的链接,从而修改他人密码
(4). 验证码突破
a. 暴力破解验证码
①方法
- 有的验证码输入正确一次,在一定的时间内不用再次输入
- 有的验证码输入正确一次,会在session中设定一个值,告诉用户你已经通过了验证码验证
- 逻辑颠倒,先对比账号密码是否正确,在对比验证码是否正确
②修复建议
- 提要验证码的长度、复杂度
- 限制错误登录次数、有效时间
b. 时间、次数突破
- 重复提交携带验证码的数据包,查看返回包,判断次数
①测试方法
- 抓取正确登录信息的数据包**,重复提交该数据包**,查看是否登录成功,登陆成功则存在验证码重复使用问题
c. 回显测试
- 验证码直接由客户端生成,在回显中显示,可通过浏览器工具直接查看
①测试方法
- 在源码中显示:源代码审计
- 在Cookie中显示:抓包时分析Cookie中是否有验证码
d. 绕过测试
- 逻辑设计缺陷,比如****直接删除COOKIE或验证码参数可绕过,当验证不通过清空session时,验证码参数为空时绕过等
①测试方法
- 抓包,删除验证码字段看是否可以成功发送
- 正常流程中记录验证码后的数据包,替换目标中的内容,直接发送,查看是否可以直接绕过验证码
(5). 接口调用安全
a. 重放攻击
- 在****短信、邮件调用业务或生成业务数据环节中(短信验证码、邮件验证码、订单生成、评论提交等),对其业务环节进行调用(重放)测试
①分类
- 短信轰炸
- 恶意注册
②修复
- 对评论提交等操作****采用验证码机制,防止生成数据业务被恶意调用
- 短信/邮件接口,需要****对接调用频率进行控制或者上限限制
- 每一个订单(接口访问)使用****唯一的token,提交一次后token失效
b. 内容编辑
- **点击获取短信验证码,**抓包可以修改短信内容,实施下一步攻击
①修复
- 从客户端获取手机号、邮箱等账号信息,要与Session中的凭证进行核验,验证通过后才允许进行业务操作
c. 接口调用遍历
- 通过接口****传入id参数,返回对应id的信息,如果接口请求合法性校验不严,很容易出现非授权访问或越权访问
①修复
- 在session中存储当前用户的凭证或id,只有****传入凭证或id值与session一致时才返回结果
- 涉及****身份校验的接口,不要直接明文传输,可以将敏感信息在服务端关联到用户标识ID,在客户端保存用户标识ID并提交到服务端,服务端根据ID取出对应信息后进行校验
d. 接口未授权
- 敏感功能的接口需要对访问者的身份进行验证,验证通过后才允许调用此接口。若接口未做身份验证或校验不严,可能会导致非授权访问或者越权调用
①修复
- 采用****Token一次性校验的方式,只有Token验证通过才返回接口数据
- 接口被调用时,服务端****对会话状态进行验证,如果已登录则返回接口数据,否则返回自定义错误信息
- 未授权访问接口做session认证,并对用户访问的每一个URL做身份鉴别,正确的校验用户id及token等
- 服务器端需****校验身份唯一性,访问接口来源验证,不同身份只能增删改查自己的信息
4. 业务授权安全
- 授权是指是对****特定资源的读写权限
(1). 未授权
- 用户****未通过认证授权的情况,能够直接访问需要通过认证才能访问到的页面或信息
(2). 越权
- 开发人员在对数据进行操作时****对客户端请求的数据过分相信而遗漏了权限的判定
a. 发生位置
- 修改、重置、找回账户密码
- 查看、修改其他账户未公开的信息,例如个人资料、文件、数据、程序等
- 与账户关联的权限操作
b. 分类
①水平越权
- 相同权限的不同用户可以互相访问
②垂直越权
- 权限低的用户可以****访问权限较高的用户,或者权限较高(非管理员)用户可以查看大量低权限用户详细信息
c. 检测
- 查看所有涉及到账户操作是否有****除了UID之外的验证方式,没有则构造UID(username,email,userid等)访问
- 如果有****验证参数,能预知或猜取,则存在漏洞
d. 修复方法
- 所有涉及到用户信息的操作需要****验证用户身份
- 特别敏感的操作应该进行****二次验证