当前位置: 首页 > 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.dtcms.com/a/315199.html

相关文章:

  • script标签放在header里和放在body底部里有什么区别?
  • 鸿蒙开发元组
  • 单点登录(SSO)全面解析:原理、实现与应用
  • 中标喜讯 | 安畅检测成功中标海南工信大脑(二期)软件测评服务
  • 基于SpringBoot的OA办公系统的设计与实现
  • docker-compose一键部署Springboot+Vue前后端分离项目
  • 映射公式解常微分方程,偏微分方程
  • JVM-自动内存管理-运行时数据区域
  • createAsyncThunk
  • 结构体数组2-单向链表
  • MySQL详解(一)
  • SAP_MMBASIS模块-选择屏幕变式添加动态字段赋值
  • 如何在AD中快速定位器件?J+C
  • AWS服务分类
  • 人员检测识别中漏检率↓76%:陌讯动态特征融合算法实战解析
  • C++入门自学Day6-- STL简介(初识)
  • AI产品经理手册(Ch6-8)AI Product Manager‘s Handbook学习笔记
  • Vue3+TypeScript项目实战day1——项目的创建及环境配置
  • pytorch 学习笔记(2)-实现一个线性回归模型
  • sqli-labs通关笔记-第30关GET字符注入(WAF绕过 双引号闭合 手工注入+脚本注入两种方法)
  • QCustomplot极坐标系绘制
  • Qt项目模板全解析:选择最适合你的开发起点
  • Gitee:本土化DevOps平台如何助力中国企业实现高效研发协作
  • 水面垃圾清扫船cad【6张】三维图+设计说明书
  • C语言实现Elasticsearch增删改查API
  • OpenCV学习 day4
  • Pytorch-05 所以计算图和自动微分到底是什么?(计算图及自动微分引擎原理讲解)
  • AI 大模型分类全解析:从文本到多模态的技术图谱
  • AcWing 890. 能被整除的数 (容斥原理)
  • Web Scraper实战:轻松构建电影数据库