sql注入攻击,很多同学都听说过吧,可能你刚开始学黑客的时候都是用这个方法黑站的。比如一些老工具,啊D,sqlmap,明小子都是基于sql注入的,但是它们都是一些基础的简单工具,针对于十年前的网站或者还可以,现在基本上没有它们的用武之地。
相信现在大部分遇到一些网站进行手工注入就是下面的情况:
这是因为大部分的网站服务器都有WAF(web应用防火墙)
可见,不管多么low的网站,这些简单的注入都搞不掉了。
怎么办?既然初级的注入不行我们就玩玩高级的sql注入。把之前的sql注入语句稍微更改一下就OK了。主要有以下五种方法绕过防御:
1、大小写变种
2、URL编码
3、SQL注释
4、空字节
5、二阶SQL注入
1、大小写变种
这种技巧适用于关键字阻塞过滤器不聪明的时候,我们可以变换关键字字符串中字符的大小写来避开过滤,因为使用不区分大小写的方式处理SQL关键字。
例如:(下面的代码就是一个简单的关键字阻塞过滤器)
MySQL
这段代码的缺陷就在strstr()函数是对大小写敏感的,所以我们可以通过大小写变种来绕过。
=
2、URL编码
URL编码用途广泛,可以通过它绕过多种类型的输入过滤器。
MySQL
双URL编码有时候会起作用,如果Web应用多次解码,在最后一次解码之前应用其输入过滤器。
因为双URL编码,第一次解码%2f%2a进入输入过滤器,所以成功绕过了。当然这个使用前提是后面有一个URL解码。
3、SQL注释
很多开发人员认为,将输入限制为单个就可以限制SQL注入攻击,所以他们往往就只是阻止各种空白符。
MySQL
但是内联注释不使用空格就可以构造任意复杂的SQL语句。
4、空字节
通常的输入过滤器都是在应用程序之外的代码实现的。比如入侵检测系统(IDS),这些系统一般是由原生编程语言开发而成,比如C++,为什么空字节能起作用呢,就是因为在原生变成语言中,根据字符串起始位置到第一个出现空字节的位置来确定字符串长度。所以说空字节就有效的终止了字符串。
只需要在过滤器阻止的字符串前面提供一个采用URL编码的空字节即可,例如:
MySQL
5、二阶SQL注入
实际上到目前为止,你在网上大部分搜索SQL注入文章 基本都可以归类到”一阶(first-order)”SQL注入中,因为这些例子涉及的事件均发生在单个HTTP请求和响应中,如下所示:
(1) 攻击者在HTTP请求中提交某种经过构思的输入。
(2) 应用处理输入,导致攻击者注入的SQL查询被执行。
(3) 如果可行的话,会在应用对请求的响应中向攻击者返回查询结果。
另一种不同的SQL注入攻击是”二阶(second-order)”SQL注入,这种攻击的事件时序通常如下所示:
(1) 攻击者在HTTP请求中提交某种经过构思的输入。
(2) 应用存储该输入(通常保存在数据库中)以便后面使用并响应请求。
(3) 攻击者提交第二个(不同的)请求。
(4) 为处理第二个请求,应用会检索已经存储的输入并处理它,从而导致攻击者注入的SQL查询被执行。
(5) 如果可行的话,会在应用对第二个请求的响应中向攻击者返回查询结果。
第5种方法可能对我们小白比较有难度,大家可以先放放,把前4种方法搞明白了再说。找一些低级的网站来练练手试一试!
大家有什么问题可以在下面留言,酷哥都会看到的。
领取专属 10元无门槛券
私享最新 技术干货