【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.pswp.cn/diannao/93663.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【读论文】Step-Audio 2 深度解读:迈向工业级语音交互的「全能型选手」

引言:step-Audio升级 语音交互技术,作为人机交互最自然、最直接的方式之一,正以前所未有的速度发展。从简单的语音指令到流畅的语音对话,我们对 AI 的期望越来越高。然而,要让 AI 真正成为我们的“知心伙伴”,仅仅能“听懂”和“说出”还远远不够。 一个理想的语音 AI,…

java web 重定向

目录结构 demo\day20\src\com\demo\service\Dome1.javademo\day20\src\com\demo\service\Dome2.javademo\day20\src\com\demo\service\Dome3.javademo\day20\src\com\demo\service\Dome4.javademo\day20\web\WEB-INF\lib\javax.servlet.jardemo\day20\web\index.jspdemo\day20\…

MySQL(配置)——MariaDB使用

一、简介 MariaDB 和 MySQL 作为两个流行的关系型数据库管理系统,它们的区别可以从多个角度来探讨。尽管 MariaDB 最初是 MySQL 的一个分支,但随着时间的推移,它们逐渐在功能、性能和开发方向上有所不同。MariaDB 是 MySQL 的一个分支&#x…

Web3:赛道划分与发展趋势解析

区块链技术现在已经从单一的加密货币支付系统发展为涵盖金融、艺术、组织治理和社区文化的多元生态系统。这次我们将深入解析 DeFi(去中心化金融)、NFT(非同质化代币)、DAO(去中心化自治组织)与 MEME&#…

LeetCode 283 - 移动零

思路 使用双指针法,一次遍历完成原地修改。 慢指针 slow:指向下一个非零元素应该被放置的位置。快指针 fast:遍历整个数组,寻找非零元素。 当 fast 遇到非零数时,将其值赋给 slow 指向的位置,然后 slow 前进…

8. 网络层

在复杂的网络环境中确定一个合适的路径.1. IP协议1. 基本概念IP协议:提供一种能力(有非常大的概率,做到某事),把数据报从主机A,跨网络,送到主机B --> 必须要有方式,标识通信两端唯一性!&…

【通识】线性代数(Linear Algebra)

线性代数被广泛应用于抽象代数和泛函分析中;通过解析几何,线性代数能被具体表示,线性代数被泛化为算子理论。而非线性模型被近似为线性模型,应用场景多为自然科学和社会科学。 费马和笛卡尔的工作,线性代数出现于十七世…

Qt 嵌入式界面优化技术

在嵌入式系统中,界面性能直接影响用户体验和系统稳定性。由于嵌入式设备通常资源受限(如低性能 CPU、有限内存、小尺寸屏幕),需针对性优化 Qt 界面以实现流畅显示和高效交互。本文从渲染引擎、资源管理、布局优化到硬件加速&#…

去除视频字幕 4 : 下一步,打算研究 Video Inpainting (视频修复):

就是说,到现在,才算是真正开始,才发现真正的问题。 尝试去除视频上的字幕,使用 IOPaint, 效果很初级。。。问题描述 请帮我分析此时的效果。 此时的右侧字幕区域,闪烁不停!我原本以为效果会很好。实际非常…

代码随想录算法训练营第五十五天|图论part5

并查集理论基础 初始化: void init() {for (int i 0; i < n; i) {father[i] i;} } 寻根&#xff1a; // 并查集里寻根的过程 int find(int u) {return u father[u] ? u : father[u] find(father[u]); // 路径压缩 } 判断u跟v是否同根 // 判断 u 和 v是否找到同一个根 b…

安卓模拟器 adb Frida hook 抓包

基本步骤 adb connect 127.0.0.1:62001adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043adb shell./data/local/tmp/frida-server再开启cd D:\linuxdir\python\fridapython main.py下载夜神模拟 https://www.yeshen.com/ 安装adb 点击下载adb&#xff08…

编程与数学 03-002 计算机网络 14_网络性能分析

编程与数学 03-002 计算机网络 14_网络性能分析一、网络性能指标&#xff08;一&#xff09;带宽、时延、吞吐量等指标的定义与测量方法&#xff08;二&#xff09;性能指标对网络应用的影响二、网络性能的测试方法&#xff08;一&#xff09;使用网络测试工具&#xff08;如Wi…

AT9880B参数特征

AT9880B 是一款高性能北斗单模卫星导航接收机 SOC 单芯片&#xff0c;芯片集成射频前端和数字基带、北斗多频卫星信号处理引擎、电源管理功能。 芯片支持接收中国北斗二号和北斗三号&#xff0c;支持接收 B1I、B1C、B2I、B3I、B2a 和 B2b 等频点信号。主要特征 支持北斗二号/三…

eBPF 赋能云原生: WizTelemetry 无侵入网络可观测实践

引言 随着 KubeSphere 企业版 4.2.0 的正式发布&#xff0c;WizTelemetry 可观测平台 2.0 也同步亮相。作为本次升级中的重磅模块之一&#xff0c;它迅速引发了开发与运维团队的广泛关注。 本系列文章将系统解读 WizTelemetry 的核心能力与落地实践。继前两篇介绍了平台架构与指…

【JAVA安全-Fastjson系列】Fastjson 1.2.24 反序列化漏洞分析及测试环境构建【复习回顾】

Fastjson 1.2.24 反序列化漏洞分析及测试环境构建 漏洞背景 Fastjson 是阿里巴巴开源的一个高性能 Java JSON 库&#xff0c;广泛用于 Java 对象的序列化和反序列化。在 1.2.24 及之前的版本中&#xff0c;存在一个严重的安全漏洞&#xff0c;攻击者可以通过构造恶意的 JSON 字…

关于神经网络CNN的搭建过程以及图像卷积的实现过程学习

通过如下博客内容学习了CNN搭建的步骤&#xff0c;按照博主的思路完成了cnn网络的构建并完成50个epoch的训练并画出损失函数的曲线图时有满满的成就感 PyTorch深度学习实战&#xff08;3&#xff09;——使用PyTorch构建神经网络_pytorch 神经网络-CSDN博客 通过如下博客内容…

nodejs 实现Excel数据导入数据库,以及数据库数据导出excel接口(核心使用了multer和node-xlsx库)

项目地址&#xff1a;https://gitee.com/LiangDouJun/nodejsExcel 一、实现效果 1、数据库数据导出 2、excel导入 二、代码实现 // 根据环境加载对应的配置文件 const env process.env.NODE_ENV || development; require(dotenv).config({ path: .env.${env} });const expr…

VUE2 学习笔记8 v-text/html/cloak/once/pre/自定义

除了之前已经介绍过的v-on v-bind v-for v-if v-show&#xff0c;vue还有很多其他的指令。v-textv-text是Vue内置指令。内置指令&#xff0c;是Vue内部定义好的&#xff0c;开发的时候直接拿来用就行了。v-text用于向其所在的标签添加文本。<body><div id"root&q…

vue 使用postcss-pxtorem 实现适老化

1. 安装依赖 npm install postcss-pxtorem -D2. 配置 Vite (vite.config.js) import { defineConfig } from vite import vue from vitejs/plugin-vue import postcsspxtorem from postcss-pxtoremexport default defineConfig({plugins: [vue()],css: {postcss: {plugins: [po…

Rust:高效错误处理工具 anyhow

Rust 的 anyhow 库是一个专注于简化错误处理的工具&#xff0c;特别适合应用程序开发场景。它通过统一的错误类型和便捷的 API&#xff0c;减少模板代码&#xff0c;提升错误信息的可读性。以下是其核心用法及示例&#xff1a;1. 安装与基础用法 在 Cargo.toml 中添加依赖&…