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

【Web安全】深入浅出理解“SQL注入-伪静态注入”及空格限制绕过技巧

文章目录

  • 什么是伪静态注入?
  • 伪静态注入中如何绕过空格限制?
    • 1. 用注释符替代空格
    • 2. 用不可见字符(URL 编码)替代
    • 3. 用括号分隔语句
    • 4. 用特殊符号替代
  • 核心逻辑

往期文章

【Web安全】一次性搞懂 ReDOS 漏洞原理/检测/防御
【Web安全】一次性搞懂 XSS 漏洞原理/检测/防御
【Web安全】一次性搞懂 CSRF 漏洞原理/检测/防御
【Web安全】一次性搞懂 SSRF 漏洞原理/检测/防御
【Web安全】一次性搞懂越权漏洞原理/检测/防御
【Web安全】逻辑漏洞之支付漏洞:原理、场景与防御
【Web安全】小白也能懂的并发漏洞:原理、场景与防御
【Web安全】逻辑漏洞之URL跳转漏洞:原理、场景与防御

对于刚踏入 Web 安全领域的人来说,SQL 注入是绕不开的重要知识点,而伪静态注入作为 SQL 注入的特殊场景,常常让人感到困惑。本文将解析伪静态注入,并介绍其空格限制的绕过方法。

什么是伪静态注入?

要理解伪静态注入,我们得先从 URL 说起。大家平时浏览网页时,可能会注意到两种不同形式的 URL。

  • 一种是动态网页的 URL,比如index.php?id=1,这种 URL 里通过?和&清晰地传递着参数。
  • 一种则看起来像静态页面的 URL,例如index-1.html或者article/123.html,这些就是伪静态 URL。

伪静态其实是通过服务器的相关配置,比如 Apache 的 Rewrite、Nginx 的 rewrite 模块,把动态 URL 伪装成了静态页面的样子。这样做的好处是提升了 URL 的美观度,也对 SEO 更友好。但大家要知道,这种伪装只是表面上的,URL 里的参数本质上还是动态传递的。

而伪静态注入,就是当网站对伪静态 URL 中的参数没有进行严格过滤时,攻击者可以通过构造恶意参数来注入 SQL 语句。比如说,针对index-1.html这个伪静态 URL,攻击者可能会构造出index-1' and 1=1--.html这样的恶意 URL,从而触发注入。所以,伪静态注入的核心就在于伪静态 URL 背后的参数过滤不严格,给了攻击者可乘之机。

伪静态注入中如何绕过空格限制?

在 SQL 注入里,空格是个非常重要的角色,它像个分隔符,把 SQL 关键字、函数、参数等区分开来,比如select * from users where id=1这句话,正是有了空格,数据库才能正确理解语句的结构。但很多网站会设置过滤规则来拦截空格,比如把空格替换成空,这时候就需要想办法用其他字符或方式来替代空格,让 SQL 语句还能被数据库正确解析。下面就给大家介绍几种常见的方法。

1. 用注释符替代空格

数据库支持的一些注释符,像/**/-- #,在某些情况下可以替代空格,而且不会影响语句的逻辑。

在 MySQL 中,/**/是很常用的。比如原来的语句select * from users where id=1,可以写成select/**/*/**/from/**/users/**/where/**/id=1,这样数据库依然能正确解析。

举个伪静态注入的例子,针对index-1.html这个 URL,注入语句可以改成index-1'/**/and/**/1=1--.html。不过这里要注意,-- 后面需要加个空格,当然也可以用#来替代。

但有一点要提醒大家,在伪静态注入场景中,如果 URL 被服务器解析为路径,/**/可能会被当成路径分隔符,这样注入就会失效,所以使用的时候要多留意。

2. 用不可见字符(URL 编码)替代

ASCII 中有一些不可见字符,比如制表符、换行符、回车符,在数据库中它们会被解析为 “空白分隔符”,我们可以把它们进行 URL 编码后传入,以此来绕过空格过滤。

常见的有制表符,它的 URL 编码是%09,对应着 ASCII 中的 Tab 键;换行符的 URL 编码是%0a;回车符的 URL 编码是%0d

比如原注入语句是id=1' and 1=1,我们可以写成id=1'%09and%091=1,这里就是用%09替代了空格。

3. 用括号分隔语句

数据库允许用括号()来分隔函数、表名、条件等,这在一定程度上可以替代空格的分隔作用,尤其适用于关键字与参数的分隔。

比如原来的语句select * from users where id=1,可以写成select(*)from(users)where(id=1)

在伪静态注入场景中,针对index-1.html,可以构造出index-1')and(1=1)--.html这样的注入语句。

4. 用特殊符号替代

部分数据库还支持一些特定符号作为隐性分隔符。

在 MySQL 中,反引号可以用来包裹表名或列名,间接起到分隔的作用,比如select*fromuserswhereid=1`。

在 SQL Server 等部分环境中,加号+可以被解析为空格,不过需要结合它的 URL 编码%2b来使用。

核心逻辑

其实,绕过空格限制的本质就是找到数据库能够解析为 “分隔符” 的字符或语法,用它们来替代空格的作用,让注入语句在没有空格的情况下,依然能被数据库正确识别和执行。在实际操作中,大家要结合数据库的类型,像 MySQL、SQL Server、Oracle 等,以及网站的过滤规则,灵活地进行测试,才能找到有效的绕过方法。

本文是「Web安全基础」系列的第 9 篇,点击专栏导航查看全部系列内容。

http://www.dtcms.com/a/301277.html

相关文章:

  • linux 板卡实现vxi11服务
  • Qwen3安装使用教程:引领推理型大模型新时代
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-35,(知识点:三极管知识点,电路电压计算题,三极管电压计算,PNP三极管)
  • linux 部署 flink 1.15.1 并提交作业
  • 数据上新|最新省、地级市农业新质生产力2002-2025
  • Linux vimgrep 详解
  • 深度学习篇---优化器
  • 上位机知识篇---Tailwind CSS
  • Linux内核设计与实现 - 第15章 进程地址空间
  • python-列表推导式,迭代器和生成器,上下文管理器
  • Unity3D 平台宏定义
  • 双指针算法技巧
  • CCF-GESP 等级考试 2025年6月认证C++七级真题解析
  • PyQt5图形和特效(Qss的UI美化)
  • zabbix-agent静默安装
  • MinIO 用户管理与权限控制详解
  • LINUX727 磁盘管理回顾1;配置文件回顾
  • 数据类型处理流讲解
  • 《中国棒球》cba外援规则·棒球1号位
  • Java排序中(a).compareTo(b)与Integer.compare(a, b)区别
  • Java学习-------外观模式
  • incus套件在 主力 Linux Distros 上的安装配置与基本使用
  • 【NLP实践】三、LLM搭建中文知识库:提供RestfulAPI服务
  • LeetCode第349题_两个数组的交集
  • python 阿里云 安装 dashscope的简介、安装
  • c语言结构体字节对齐
  • github上传本地项目过程记录
  • Spring经典“送命题”:BeanFactory vs FactoryBean
  • Flutter中实现页面跳转功能
  • vulhub-red靶机攻略