sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第1张图片

原创: K 合天智汇

这篇文章,将教大家基本的手工sql注入和绕过waf的知识;分享一个实例,为了效果建议读者自己去搭建环境,因为真实环境都不怎么理想。
1. sql注入的基础
2. sql注入绕过waf
3. sql注入一个绕过实例
手工sql注入的基础基础注入,盲注注入(时间和bool),报错注入,联合注入(union)
推荐sql-labs资源这个练习平台,推荐《mysql注入天书pdf》1.base(基础的语句注入)
我们利用该表可以进行一次完整的注入。以下为一般的流程。
1)猜数据库

be8d3730f74eedefd354ce4287797e22.png


2)猜某库的数据表

0f17e1dac69d360396be99a308c161b3.png


3)猜某表的所有列

ce8e6ef167c48f6af8042f136a5cc0b5.png


4)获取某列的内容

9e200d61bafda0c2c22a2148caeb5198.png

2.union注入
union注入和基础的注入相差不大,只需将前面的数据置0,即没有那个指定字段即可;当然先要确定字段,下面的文章有分析3. 时间注入
主要用到一些截断字符对数据库的字符进行判断
1)先试数据库的长度,当数字为6时发生了延时,说明数据库名共五个字符。

a26fcb40fa0b2a0af1d5f909373fd08c.png


2)开始猜数据库的字(当发生延时,说明当前数据库第一个字母为m):

cece4e1608c4187133f8b64a469e55c3.png

3)其他的数据只需修改查询语句即可4. bool注入是根据回显,对的查询是一种回显,错的查询又是一种回显
也是字符截断函数来操作的
if(length(database())>8,1,sleep)
其他的不多说了5. 报错注入
是通过报错函数来进行操作的https://www.cnblogs.com/wocalieshenmegui/p/5917967.html 十种报错注入
作者常尝试的是这三个报错函数updatexml,exp,floor

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第2张图片


sql注入绕过wafok,这是本篇的重点
作者就不填写那些网上普遍有的,给出几个记得到并且常用的,但是有些简单的还是要简单试下1. 大小写混写2. 编码试下 作者常用url编码;拿到数据库名和表名常用16进制替换他们的名字3. 替换
and &&
or ||
相同函数的替换(这个先要过前面的引号闭合,字符过滤;前面的如果过不了,一般作者都考虑不到这,真要用到时才换)4. 注释绕过
1)内联/*!50000*/,一般是被杀了的
2)/*!50000union/*!50000/*!(select*/~1,2,3) (过安全狗写法,亲测可用,下面实际操作我们将这样操作)
3)句末注释://, -- , /**/, #, --+,-- -, ;--a
作者常用 -- -,屡试不爽(一般+是被过滤了的)
实际运用
手工操作一波,我的测试过程:
单引号走起

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第3张图片


这种情况gpc一般是打开了
双引号,同样如此:

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第4张图片


ok,其实我们首先应该确定是字符型参数还是数字型
当id=2

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第5张图片


id=1+1

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第6张图片


这里+是被过滤了的,所以我们用-来做个运算

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第7张图片


一切正常
ok,说明是数字型的参数,那么就不用引号闭合,可以进行接下来的注入
(这里给大家补充一点小知识:cms审计时,这种id之类的都是inval函数处理的;其他的cms地方sql注入漏洞很有一些是因为数字型参数不需要引号闭合进行操作的)
如果是字符型的怎么办,字符型的gpc情况确实不好办,作者遇到的基本是编码绕过:这里的编码是gbk的编码,sprint函数这类的编码漏洞绕过;编码漏洞情况同样适合xss漏洞,都是绕过waf。
这里,作者是先进行常规注入,id=2 order by 2

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第8张图片


id=2 order by 1 正常

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第9张图片


说明只能显示一列数据了
OK,我们进行union测试

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第10张图片


发现了什么,union不见了
不急,我们有姿势
双写union(作者还真看到过只过滤一次关键词的代码)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第11张图片


嗯,看来是过滤那个单词大小写(虽然过时了,现在匹配函数都直接大小通杀,不妨碍随手试下)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第12张图片


看到UNIon被ban了
OK,不要着急,我们试下其他的方法
用过狗方法,这里就这样过了(普通内联试过无法)

6856673e750a04484be5f60b19fecebb.png

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第13张图片

26fa7bbf047df9af9aa4aa077b920314.png

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第14张图片


但美中不足的是网站的数据库系统配置出了问题,出现下面这个错误
作者这样尝试

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第15张图片


不指定库也是查找当前库;再尝试用limit0,1限制,效果也是如此

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第16张图片


Illegal mix of collations for operation 'UNION'
遇到了这个问题,是数据库的编码不一样
原因参考:https://www.cnblogs.com/google4y/p/3687901.html
ok,我们继续,作者直接or来取数据库

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第17张图片


被ban了
|| 代替or
and呢(这比较有意思了,也是经常遇到了情况,waf特定情况才ban字符串,绕过本来就是经验和猜)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第18张图片


我们看到,没有语法错误,是正确的,那我们取下数据库呢

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第19张图片


按照mysql的语法,作者原先以为没有错(其实是错的语法)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第20张图片


本地测试了下

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第21张图片


错误,再多语句,分号试了下,是对的

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第22张图片


想当然的给网址来了下分号(sqlmap中根据数据库的不同也有多语句测试)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第23张图片


当然是错误的
时间注入嘛,测试成功(突破口哦)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第24张图片


作者一开始这样测试

15e907a502ff45ac535ec07cbe4c8db6.png


嗯,忘记单引号被过滤
用mysql的其他函数来解决

99b0bc10ae48fc15fe112740a19d0539.png


附上测试代码(sql时间盲注的代码除了sql的语句不同,其他的类似;bool盲注,就是修改返回判断条件,if “aaa” in res.content:,bool就没有去测试了,有兴趣自己试一下吧)

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第25张图片


报错注入试下:

sql注入空格被过滤_手工sql注入&&绕过waf &&一个实例分析_第26张图片


这么多报错函数,就没有一一去测试
总结
本篇文章较基础,但对于作者来说,较全面了
手工注入知识就这些,更高级的就是各种姿势了
大体也是这个流程,这也是作者的所有干货了
文章仅用于普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征等,若读者因此做出危害网络安全的行为后果自负,与合天智汇以及原作者无关,特此声明!

你可能感兴趣的:(sql注入空格被过滤)