【模拟环境】SQL注入时如何绕过逗号和百分号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【模拟环境】SQL注入时如何绕过逗号和百分号相关的知识,希望对你有一定的参考价值。

目标是DVWA - Wooyun的模拟环境,作业用。
里面有一个SQLi Filter,过滤了包括and or select union等关键词和一大堆符号,包括百分号和逗号。漏洞在于没有过滤大写的关键词,所以可以注入。但是过滤了逗号和百分号,所以union select后面要有2个参数的话逗号会被检测,不加逗号会报错。
以下是我的SQL语句:(大写了的部分就是注入的部分,从1开始)

select first_name, last_name from userswhere user_id= 1 AND FALSE UNION SELECT USER, PASSWORD FROM USERS

鄙人不是很熟悉数据库,如果可以,打破union select from的结构也可以。
十分感谢!!

【附源码】

function inject_check($str) //防注入函数开始
$check=preg_match('/select|order|insert|update|eval|document|delete|injection|jection|link|\'|\%|\/\*|\*|\.\.\/|\.\/|\,|\.|--|\"|and|or|from|union|into|load_file|outfile|<script>/',$str);
if($check)
echo "<script>alert('Filtered!!!');window.history.go(-1);</script>";
exit();
else
return $str;

UNION 跟 UNION ALL 是交集跟并集的写法
select * from a union select * from b --这种是A表与B表结果的交集写法,合并表,没有重复行;
select * from a union all select * from b --这种是A表与B表结果的并集写法 有重复行;
a表和b表结构一样,合并两个表,没有重复行,如果要重复行用union all追问

感谢回答,我的意思是:
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。
原本的查询语句是Select了2个列,所以我union的时候也必须查询2个列,但是类似于select 1, 2的查询因为需要“逗号”分割,所以会被检测到,有没有可以绕过的手段?

参考技术A 同求绕过方法

将平面文件中的数据导入sql时如何选择列范围,如果文件中的数据没有用逗号和分号等任何标签分隔

【中文标题】将平面文件中的数据导入sql时如何选择列范围,如果文件中的数据没有用逗号和分号等任何标签分隔【英文标题】:how to select a column range when importing data from flat file into sql, if the data in file didn't separated with any tags like comma and semicolon 【发布时间】:2022-01-04 10:42:53 【问题描述】:

如果数据喜欢

"700133 70013303102021SC  25 210604580000000440"
"700133 70013303102021SC  26 210604600000010000"

需要像“80000000440”和“600000010000”这样的卷号 如何将数据分离并加载到已经创建的表中

【问题讨论】:

简单搜索将找到许多使用 SQL Server 提供的工具将文本文件导入数据库的示例和讨论。如果您没有分隔符,那么大概您的文件包含固定格式/位置的数据。这是向导的一个选项 - 建议您试一试。 【参考方案1】:

关于数据库以及如何将这些数据加载到任何表的信息不足。因此,我只能与您分享 SELECT Query:

SQL SERVER:
SELECT RIGHT('700133 70013303102021SC  25 210604580000000440', 11) AS String;

ORACLE:
select substr('700133 70013303102021SC  25 210604580000000440',-11) AS String from dual;

【讨论】:

数据在平面文件中没有分离,如果我们有分离我们可以继续 SELECT 和 INSERT INTO 和 BULK INSERT 也 你是对的。没有定界符/分隔符会更难。如果我能找到方法,我会与你分享。

以上是关于【模拟环境】SQL注入时如何绕过逗号和百分号的主要内容,如果未能解决你的问题,请参考以下文章

数据库中IP字段中,两个IP的用分号隔开,不用逗号,用SQL实现

mysql-防止XSS攻击

如何以编程方式猜测 CSV 文件是逗号还是分号分隔

将中文文章翻译为英文时,如果文章中有分号,那翻译为英文时用句号还是分号还是逗号???

pikachu 漏洞平台sql注入 之 搜索型注入

sql SQL - 在以逗号,管道或分号或任何其他字符分隔的列中获取多个值或连接值的值