daniyalnasir-root/paramsneak

GitHub: daniyalnasir-root/paramsneak

一款基于捕获的 curl 自动探测并复现批量赋值漏洞的 PoC 生成工具。

Stars: 0 | Forks: 0

# paramsneak 针对卡住字段的批量赋值探测工具,为每个卡住的字段提供可工作的 PoC curl 命令。 你从 Burp 捕获了 `POST /api/users` 请求,怀疑 API 静默接受了不应存在的额外键。`paramsneak` 会逐一为每个额外字段重新发送创建请求,观察响应(或 GET 回查)是否回显该字段,并打印出每个被服务器愉快接受的字段对应的可复制粘贴的 curl 命令。输出即是证明,而非关于证明的报告。 [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Status: active](https://img.shields.io/badge/status-active-brightgreen.svg)](#) ## 概述 **Mass assignment** 是一种漏洞:创建端点接收 JSON 或表单体,并将请求中的每个键绑定到模型,而不管该键是否在请求模式中声明。`role`、`is_admin`、`balance`、`tenant_id`、`verified` 等字段。大多数 API 表现正常;但有问题的 API 会静默地授予任何发送这些字段的人以管理员权限。 手动操作是:针对每个额外字段重复发送相同的创建请求、刮取响应查看是否保留、并整理成清晰报告。`paramsneak` 自动化全部三步。它解析捕获的 curl,遍历内置的常见权限/状态键列表(或你自定义的列表),发送每个变体,检查创建响应中是否回显该键,并可选地重新获取资源以确认字段是否真正保留在服务端,最后输出编号的可复制粘贴的 PoC curl 列表。 输出包含两部分堆叠的内容:每次探测的逐条日志(`▷` 表示探测,`└─` 表示保留的位置与方式)以及末尾的 `>>` 块,其中是可直接粘贴的 curl 命令。将这些 curl 直接注入你的报告即可。 ## 功能特性 - 解析带 `-H`、`-X`、`-d/--data-raw`、`--json` 的捕获 curl,支持表单与 JSON 体 - 内置 16 个高信号量赋值键的字典(如 `role=admin`、`is_staff=true`、`balance=99999`、`tenant_id=1` 等);可通过 `--fields k1=v1,k2=v2` 覆盖 - 使用可配置的正则表达式自动提取新资源 ID,并通过可选的 `--get-back` 模板在服务端验证字段是否保留 - 为每个保留字段生成一条可复制粘贴的 curl,根据 JSON 或表单编码正确合并请求体 - 保守的保留检测:要求键与值同时在邻近位置出现,避免仅因值碰巧出现在其他字段中而产生误报 ## 安装 ``` git clone https://github.com/daniyalnasir-root/paramsneak.git cd paramsneak python3 cli.py -h ``` 无需 pip 安装。仅依赖标准库。 ## 用法 ``` # JSON 主体,默认字段字典 python3 cli.py \ --curl "curl -X POST https://app.example.com/api/users \ -H 'Content-Type: application/json' \ -H 'Cookie: sess=xyz' \ --data-raw '{\"name\":\"alice\",\"email\":\"alice@example.com\"}'" # 表单主体,自定义字段列表,GET 返回确认角色在服务器端卡住 python3 cli.py \ --curl @./create.curl \ --fields "role=admin,plan=enterprise,quota=999999" \ --get-back "https://app.example.com/api/users/{id}" \ --id-pattern '"user_id"\s*:\s*"?([^",}\s]+)' ``` ## 命令行选项 | 标志 | 是否必需 | 描述 | |------|----------|------| | `--curl` | 是 | curl 命令字符串,或 `@路径/到/文件` | | `--fields` | 否 | 逗号分隔的 `键=值` 列表(默认:内置的权限/状态集合) | | `--get-back` | 否 | 包含 `{id}` 的 URL 模板,用于服务端保留验证 | | `--id-pattern` | 否 | 含单个捕获组的正则表达式,应用于创建响应(默认 `"id":"..."`) | | `--timeout` | 否 | 每个请求的超时秒数(默认 10) | ## 输出示例 ``` $ python3 cli.py --curl "curl -X POST https://httpbin.org/anything \ -H 'Content-Type: application/json' \ --data-raw '{\"name\":\"alice\"}'" \ --fields "role=admin,is_admin=true,balance=99999" target: POST https://httpbin.org/anything body kind: json fields under test: 3 ► sending baseline create... └─ 200 540B 464ms └─ no id extracted ▷ role=admin → 200 581B 362ms └─ echoed in CREATE response ▷ is_admin=true → 200 581B 356ms └─ echoed in CREATE response ▷ balance=99999 → 200 581B 401ms └─ echoed in CREATE response >> PoC curls for 3 stuck field(s) ............................................................ >> role=admin (create) curl -X POST https://httpbin.org/anything ... -d '{"name":"alice","role":"admin"}' ``` 两次运行的完整未裁剪输出位于 [`examples/`](examples/)。 ## 法律声明 本工具仅供授权的安全测试与教育用途。 请仅针对你拥有或已获得明确书面许可的系统运行。 作者不承担任何滥用责任。未经授权的使用可能违反 当地、州或联邦法律。 ## 作者 **Daniyal Nasir**  |  网络安全顾问  |  渗透测试工程师  |  VAPT 顾问  |  赏金猎人 拥有 10 年以上经验的**进攻型安全**专业人士,专注于为财富 500 强企业及全球 SaaS 公司提供**Web 应用渗透测试**、**API 安全测试**、**移动应用渗透测试**与**云安全评估**。项目覆盖**中东、亚洲、欧洲与北美**。活跃的**道德黑客**,已在主流赏金计划中披露多个漏洞,并提供**安全代码审查**、**威胁建模**与**DevSecOps**集成咨询。持有 **OSCP**、**LPT**、**CPENT**、**CEH**、**CISA**、**CISM** 与 **CASP+** 认证。 LinkedIn: https://www.linkedin.com/in/daniyalnasir 网站: https://www.daniyalnasir.com ## 许可证 MIT,详见 [LICENSE](LICENSE)。
标签:API安全, Burp, Curl生成, JSON输出, Mass Assignment, PoC生成, SEO: API安全漏洞, SEO: Burp插件, SEO: Mass Assignment, SEO: 参数篡改工具, SEO: 权限提升, SEO: 越权漏洞, SQL注入替代方案, 协议分析, 参数篡改, 参数覆盖, 垂直越权, 字段回显检测, 安全测试, 密钥枚举, 开发安全, 抓包重放, 攻击性安全, 敏感字段注入, 数据污染, 服务器端验证, 权限提升, 权限绕过, 水平越权, 越权漏洞, 身份伪造, 逆向工具