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

【BUUCTF系列】[SUCTF 2019]EasySQL1

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

文章目录

      • 一、题目关键特征分析
      • 二、两种绕过方案的技术原理
        • 方案一:修改SQL模式(`PIPES_AS_CONCAT`)
        • 方案二:利用`SELECT *`与临时列
      • 三、关键知识点解析
      • 四、防御建议与漏洞修复
      • 总结

一、题目关键特征分析

拿到题目又是熟悉的表单结构,根据题目提示,是考察sql注入,输入11",1',进行测试
在这里插入图片描述
发现只有输入1的时候有回显,且url里没有观察到参数传递
在这里插入图片描述
可是考察的是后端存在数字型注入点
尝试1' or 1=1 #万能密码

返回nonono,说明存在关键字过滤,过滤掉了我们的输入内容
尝试联合注入查询,1' union select 1,2#

依然是nonono,说明这里的输入验证比较严格
小总结

  1. 输入限制
  • 仅数字输入有回显,字符输入无响应,暗示后端存在数字型注入点
  • 尝试1' or 1=1 #返回nonono,说明存在关键字过滤(可能过滤or#等)。
  • order by和联合注入被拦截,验证过滤规则较严格。
  1. 堆叠注入突破点
  • 1;show databases;成功执行 → 堆叠注入可用,但show columns from Flag;被拦截,说明过滤了columns等敏感词。
    在这里插入图片描述
  1. 后端SQL语句推测
  • 输入数字有回显、字符无回显 → 存在||结构(短路逻辑)。
  • 原始语句可能为:SELECT [输入] || flag FROM Flag
    当输入非零数字时,[输入]||flag短路返回1(真);输入0时返回0(假)。

二、两种绕过方案的技术原理

方案一:修改SQL模式(PIPES_AS_CONCAT
  • 核心逻辑
    通过set sql_mode=PIPES_AS_CONCAT||逻辑或运算符转为字符串连接符
    原语句变为:SELECT CONCAT([输入], flag) FROM Flag
  • Payload构造
    1;set sql_mode=PIPES_AS_CONCAT;select 1
    
    • select 1触发查询 → 因||转为连接符,返回1flag拼接的结果(即完整flag)。
  • 适用场景:MySQL数据库,且堆叠注入可用时。
    在这里插入图片描述
方案二:利用SELECT *与临时列
  • 核心逻辑
    输入*,1时,语句变为:SELECT *, 1 FROM Flag
    • SELECT * 返回所有字段(含flag列)。
    • ,1 增加临时列,值为1(确保非零触发回显)。
  • Payload构造
    *,1
    
  • 优势:无需堆叠注入,直接输入即可触发。在这里插入图片描述

三、关键知识点解析

  1. ||运算符的两种含义
    • 默认行为:逻辑或(如0||1=1)。
    • PIPES_AS_CONCAT模式:字符串连接(如'a'||'b'='ab')。
  2. SELECT *SELECT 列名的区别
    • SELECT * 返回所有字段,无需知道列名,适用于未知表结构场景。
    • SELECT 1 创建临时列,常用于探测注入点或占位。
  3. 短路逻辑(Short-Circuit)
    • [非零]||flag → 直接返回1(真),忽略flag
    • 0||flag → 返回flag的值(假或真)。

四、防御建议与漏洞修复

  1. 禁用堆叠注入
  • 配置数据库拒绝多语句查询(如PHP中mysqli禁用multi_query)。
  1. 参数化查询
  • 使用预编译语句(Prepared Statements)分离指令与数据:
    String sql = "SELECT * FROM Flag WHERE id = ?";  
    PreparedStatement stmt = conn.prepareStatement(sql);  
    stmt.setInt(1, input); // 输入强制转为数字
    ```。  
    
  1. 最小化权限
  • 应用数据库账户仅需SELECT权限,禁用SET等管理命令。
  1. 过滤输入
  • 数字参数校验:if(!is_numeric($input)) { reject(); }
  • 过滤特殊符号(如;#||)。

总结

  • 注入突破口:堆叠注入 + SQL模式修改或SELECT *构造临时列。
  • 核心技巧:利用||的运算符重载和短路逻辑绕过过滤。
  • 防御关键:参数化查询 + 输入验证 + 权限最小化。

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

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

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

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

http://www.lryc.cn/news/610471.html

相关文章:

  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(下)【make/Makefile】
  • 单向链表练习
  • TCP 协议的“无消息边界”(No Message Boundaries)特性
  • Java 的 APT(Annotation Processing Tool)机制详解
  • 区块链 和 一致性哈希的结合
  • SpringBoot+SpringMVC常用注解
  • 可视化图解算法57:字符串的排列
  • 简要探讨大型语言模型(LLMs)的发展历史
  • AI编程助手:终结996的新希望
  • [激光原理与应用-134]:光学器件 - 图解透镜原理和元件
  • 实现三通道转单通道(灰度图)的两种加权方法
  • Pixel 4D 3.4.4.0 | 支持丰富的壁纸资源,高清画质,高度的个性化设置能力,智能推荐功能
  • Coze Loop:开源智能体自动化流程编排平台原理与实践
  • 可重复读(Repeatable Read)能解决幻读吗?
  • 【unitrix】 7.1 二进制位加法(bit_add.rs)
  • Minio部署和客户端使用 - 版本 2025-05-24T17-08-30Z
  • 县级融媒体中心备份与恢复策略(精简版3-2-1架构)
  • Javascript面试题及详细答案150道(046-060)
  • Linux 交换空间管理
  • 15个命令上手Linux!
  • 力扣top100--哈希
  • PandasAI连接LLM对MySQL数据库进行数据分析
  • 【笔记】重学单片机(51)(下)
  • ArcGIS的字段计算器生成随机数
  • 数据库提权
  • 并发编程常用工具类(下):CyclicBarrier 与 Phaser 的协同应用
  • (论文速读)RMT:Retentive+ViT的视觉新骨干
  • Hadoop HDFS 3.3.4 讲解~
  • 嵌入式知识篇---闪存
  • mysql 数据库系统坏了,物理拷贝出数据怎么读取