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

相关文章:

  • 【论文简读】LongSplat
  • Claude Code深度操作指南:从零到专家的AI编程助手实战
  • MAC-Spring Cloud + Spring Boot + RocketMQ集成
  • 链表问题解决分析框架
  • SP20D120CTU:1200 V/20 A SiC肖特基二极管的TO-263封装升级版,数据工程师必看!
  • 政府财政行业云原生转型之路
  • Maya 2024安装指南及安装包下载
  • 车载通信架构 ---车内通信的汽车网络安全
  • Linux中netstat详细使用指南
  • 【Linux】System V - 基于建造者模式的信号量
  • DP-v2.1-mem-clean学习(3.6.8.2-3.6.8.3)
  • Linux文件权限管理与ACL配置指南
  • wpf Image 转 90 度
  • 9.感知机、神经网络
  • 国产化Word处理控件Spire.Doc教程:Python提取Word文档中的文本、图片、表格等
  • Excel商业智能分析报表 【销售管理分析仪】
  • 百度翻译详解:包括PaddleNLP、百度AI开放平台、接口逆向(包括完整代码)
  • Android工程命令行打包并自动生成签名Apk
  • Go语言高并发价格监控系统设计
  • 向量空间模型
  • 从exec到Shell:深度解析Linux进程等待,程序替换与自主Shell实现
  • 抛出自定义异常
  • Android UI 组件系列(九):ListView 性能优化与 ViewHolder 模式实战
  • 复现论文《A Fiber Bragg Grating Sensor System for Train Axle Counting》
  • 多级表头的导出
  • 如何使用EF框架操作Sqlite
  • 多租户字典管理系统完整设计
  • TCP 协议的“无消息边界”(No Message Boundaries)特性
  • shell脚本tcpdump抓取数据解析执行关机指令
  • PyCharm代码规范与代码格式化插件安装与使用:pylint和autopep8