逻辑漏洞
由于程序逻辑不严谨或逻辑太过复杂,导致一些逻辑分支不能正常处理或处理错误,统称为业务逻辑漏洞。
比如身份认证,验证码可复用,cookie可复用,商品价格可修改,商品数量可修改,未授权访问,密码找回逻辑漏洞。
身份认证安全
漏洞产生:有些网站对身份认证模块没有做好安全防护,导致漏洞产生 绕过身份认证有一下几种方法
- 被暴力破解、撞库
- Cookie&session类(弱加密)
- 加密不够复杂能够被枚举
防御方式:
- 增加验证码。登录失败的时候,变换验证码。(验证码不能被工具识别)
- 限制登录频率。例如,5分钟内登录失败次数超过10次则锁定账号1小时。
- 二次验证。可以添加手机验证码或邮箱验证码。
身份认证常见漏洞
- 用户名可枚举
- 密码可枚举
- 验证码可绕过
- 验证码可枚举
- 敏感接口可遍历用户,密码
- 请求包修改用户参数可遍历其他用户(越权)
数据篡改
业务一致性安全
用户名,邮箱,手机号,订单ID,商品ID,用户ID篆改。
手机号篡改
业务网站修改手机号码时修改成其他手机号码。-->加当前手机验证码验证 业务网站解绑手机号码,未验证直接解绑
用户和邮箱篡改
抓包修改用户名和邮箱为其他用户或邮箱,常见于用户名参数和邮箱参数修改,改成其他用户名和邮箱进行遍历敏感信息。
订单号篡改
网站下单后或得订单号,通过传参传入其他订单号遍历其他订单敏感信息
用户ID慕改
注册登录后查看本人的信息,通过修改用户ID遍历其他用户信息
业务数据安全
交易金额数据、商品数量、商品最大数量限制突破、本地IS参数修改
商品数量修改
修改数量数量为负数
商品金额修改为小于商品价格
本地IS参数慕改:
步骤:部分应用程序通过Javascript处理用户提交的请求,通过修改Javascript脚本,测试修改后的数据是否影响到用户。 修复:服务器校验;跨平台支付调用接口,要做好数据的完整性校验,确保一致性
最大数限制突破:
步骤:很多商品限制用户购买数量时,服务器仅在页面通过is脚本限制,没有在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程。 修复:每次提交都对其对应的各项信息做强校验
业务授权安全
未授权访问漏洞:未经过授予相关权限就可以直接访问需要权限才能访问的页面或文件(没有改包动作) 越权漏洞:越权漏洞主要是未对用户关键操作步骤进行权限验证导致出现越权漏洞
常见越权漏洞位置:
- 修改、重置、找回其他账户密码。
- 查看、修改其他账户未公开的信息,例如个人资料、文件、数据、程序等
- 与账户关联的权限操作
平行越权(水平越权):指相同权限的不同用户可以互相访问对方的资源 测试:注册两个用户,访问资源时通过传入用户名或id号进行访问对方资源
垂直越权:指使用权限低的用户可以访问权限较高的用户的资源 测试手法:通过修改关键步骤传参的参数挖掘(id,shenfen,is_admin,admin,role)
验证码爆破
Burp+captcha-killer
burp加载captcha-killer插件
抓取验证码请求包发送至captcha-killer插件
安装运行codereg.py所需的扩展包(ddddocr aiohttp)
python运行codereg.py(验证码识别脚本)
加载模板
POST /reg HTTP/1.1
Host: 127.0.0.1:8888
Authorization:Basic f0ngauth
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 8332
<@BASE64><@IMG_RAW></@IMG_RAW></@BASE64>配置接口url为
http://127.0.0.1:8888
intruder模块的验证码payload配置中加载captcha-killer插件,开始爆破即可
常用方式
- 直接抓包不放包爆破
- 删除验证及参数
- 在验证码位置添加空格+符号+\n\r
- 在验证码位置添加垃圾数据(溢出)
- 验证码识别工具
接口调用安全
常见接口漏洞
1.重放攻击 在短信、邮件调用业务或生成业务数据环节中(类:短信验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试 常见类型:短信轰炸、恶意注册、邮箱验证码轰炸 修复:
- 对评论提交等操作采用验证码机制,防止生成数据业务被恶意调用;
- 短信/邮件接口,需要对接调用频率进行控制或者上限限制;
- 每一个订单(接口访问)使用唯一的token,提交一次后,token失效
2.内容编辑 例如:点击获取短信验证码,抓包,可以修改短信内容,实施下一步攻击 修复:从客户端处获取手机号、邮箱等账号信息,要与Session中的凭证进行核验,验证通过后才允许进行业务操作
3.接口调用遍历漏洞 Web接口一般将常见的一些功能需求进行封装,通过传入不同的参数来获取对应的数据或者执行相应的功能,其中最常见的场景就是通过接口传入id参数,返回对应id的信息。此类接口如请求合法性校验不严,很容易出现非授权访问或者越权访问的问题。 修复:
- 在session中存储当前用户的凭证或者id,只有传入凭证或者id参数值与session中的一致才返回结果。
- 一般涉及身份校验的接口,不要直接将敏感信息的明文信息在客户端与服务端间传递,可以将敏感信息在服务端关联到用户标识ID,在 客户端保存用户标识ID并提交到服务端,服务端根据ID取出对应信息后进行校验;
任意密码找回漏洞
常见任意密码找回漏洞挖掘方式:
用户凭证暴力破解(找回验证码可爆破)
6位验证码选择区间进行爆破
- 手机号前加上+86绕过
- 手机号后加上\n绕过
返回凭证(验证码在返回包内)
邮箱弱token(发送密码重置链接并附带token弱加密)
Unix时间戳+md5
爆破Unix时间戳
用户名
重置直接使用用户名进行区别
服务器时间
利用两个账号同时点击找回密码,查看找回密码的链接近似1
用户凭证有效性(用户凭证有效期过长)
- 短信验证码 通过他人手机号找回密码,抓包,将他人手机号替换成自己的手机号,获取验证码,提交后修改密码 通过自己手机号找回密码,获取验证码后抓包,将数据包中的username改为他人用户名,提交后成功修改他人密码
- 邮箱token 通过邮箱找回密码,访问链接重置密码,输入新密码提交时抓包,虽然有token,但依然可以直接修改用户ID进而修改密码
重新绑定手机和邮箱(APP未对重新绑定邮箱或手机做验证)
服务器验证(验证码/找回步骤绕过)
用户身份验证(未对用户身份进行验证)
找回步骤(跳过找回步骤,直接进入重置密码界面)
本地验证(前端密保问题答案直接显示在前端)
Token生成可控(token弱加密,值可控)
注册覆盖(注册admin覆盖以前的admin)
Session覆盖(窃取cookie和session填入重置该session用户的密码)