引言
我们发现,许多初学者乃至一些已有一定经验的师傅,在撰写漏洞报告时容易出现表述混乱、结构不清等问题,常常让甲方或漏洞审核人员看得一头雾水、难以理解。为此,本文将通过模板,手把手教你如何写出一份清晰、完整、专业的漏洞报告。
正文
报告标题主要为漏洞点、漏洞类型,可以选择添加漏洞危害。
报告结构主要包含漏洞概述、漏洞步骤、漏洞危害及修复建议,图文并茂且包含必要的请求体。
以下为模板示例。
《保险平台 API 加密接口存在 IDOR 漏洞》
一、漏洞概述
在对某活动注册保护服务进行安全测试时,发现该平台存在不安全的加密访问逻辑与IDOR(不安全直接对象引用)漏洞。攻击者可通过平台公开的API,将任意保单编号加密后作为访问凭证,直接下载他人保单PDF,并借助其中信息进一步接管用户账户,从而造成个人隐私泄露、账号被控及保单篡改等严重后果。
该漏洞的根本问题在于:加密值既可预测、又缺乏权限校验,被错误地当作“身份令牌”使用。
二、漏洞复现步骤
以下为漏洞的完整利用流程。
步骤1:通过 API 获取保单编号的加密值
平台公开了一个加密接口,可直接传入保单编号并获取其加密值:
GET /api/claims/encrypt?text=EUSP2386401065
响应示例:
{ "data": "BnmnNGD6EFL2Eeo85nTHA"}
该加密值将作为访问凭证使用。
以下为具体的请求与响应截图:
[图片1]
步骤2:使用加密值访问保单 PDF 文件
获取加密值后,可将其拼接到另一个接口中,直接访问保单 PDF:
GET /api/certificates/policies/BnmnNGD6EFL2Eeo85nTHA
响应为保单内容的 PDF 文件,包含如下敏感信息:
-
用户全名
-
出生日期
-
通讯地址
-
购买时间
-
保单编号及保额覆盖范围等
以下为具体的请求与响应截图:
[图片2]步骤3:利用保单信息登录并接管用户账户
在登录页面中,选择“保单号 + 购买日期”作为身份验证方式,
即可凭借已获得的保单内容成功登录目标账户。
具体步骤如下:
1、输入保单号:
EUSP2386401065
2、输入购买日期:通过 PDF 获取
3、登录成功后,可查看或修改账户、取消保单
以下为具体的请求与响应截图:
[图片3]
如图,成功登录目标账户:
[图片4]步骤4:大规模利用
由于保单编号为连续生成(如 EUSP2386401060、EUSP2386401061)
攻击者可批量构造编号,通过该加密接口批量生成访问凭证,
并批量下载、登录、接管他人账户,攻击成本极低。如同所示,通过 Burp Suite 的 Intruder 模块进行爆破,
响应状态码均为200,
且响应体均为对应加密后的访问凭证。
[图片5]
[图片6]
三、漏洞危害
1、攻击者可下载他人保单 PDF,泄露个人身份信息、地址、出生日期等隐私数据。
2、凭借保单号与购买日期可登录目标账户,修改信息或取消保单。
3、保单编号规律可枚举,接口未做防护,易被脚本化攻击。
4、严重违反合规,面临监管和法律风险。
四、修复建议
建议采取以下修复措施:
1.避免将加密值直接用作访问凭证
加密值不应等同于访问密钥,应引入独立的鉴权token或临时访问令牌。
2.加强访问控制
登录操作加入多因素验证(如短信验证码、邮箱验证)
培训咨询v
bc52013
linglongsec
SRC漏洞挖掘培训
往期漏洞分享
玲珑安全B站公开课
https://space.bilibili.com/602205041
玲珑安全QQ群
191400300
原文始发于微信公众号(sec0nd安全):手把手教你写好一份完整的漏洞报告
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论