【模拟环境】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;
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的查询因为需要“逗号”分割,所以会被检测到,有没有可以绕过的手段?
将平面文件中的数据导入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实现