前言
前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御。有攻必有防,当然还要来探讨一下SQL注入防御技巧。目录第五节 避开过滤方法总结- 5.1、大小写变种
- 5.2、URL编码
- 5.3、SQL注释
- 5.4、空字节
- 5.5、二阶SQL注入
第六节 探讨SQL注入防御技巧
- 6.1、输入验证
- 6.2、编码输出
- 第五节 避开过滤方法总结
function waf($id1){ if(strstr($id1,'union')){ echo 'error:lllegal input'; return; } return $id1;}
这段代码的缺陷就在strstr()函数是对大小写敏感的,所以我们可以通过大小写变种来绕过。= 5.2、URL编码URL编码用途广泛,可以通过它绕过多种类型的输入过滤器。
function waf($id1){ if(strstr($id1,' ') || strstr($id1,'/**/')){ echo 'error:lllegal input'; return; } return $id1;}
双URL编码有时候会起作用,如果Web应用多次解码,在最后一次解码之前应用其输入过滤器。
因为双URL编码,第一次解码%2f%2a进入输入过滤器,所以成功绕过了。当然这个使用前提是后面有一个URL解码。5.3、SQL注释很多开发人员认为,将输入限制为单个就可以限制SQL注入攻击,所以他们往往就只是阻止各种空白符。
function waf($id1){ if(strstr($id1,' ')){ echo 'error:lllegal input'; return; } return $id1;}
%00' union select username,password from users where username='admin' --
实际上到目前为止,你在网上大部分搜索SQL注入文章 基本都可以归类到"一阶(first-order)"SQL注入中,因为这些例子涉及的事件均发生在单个HTTP请求和响应中,如下所示: (1) 攻击者在HTTP请求中提交某种经过构思的输入。 (2) 应用处理输入,导致攻击者注入的SQL查询被执行。 (3) 如果可行的话,会在应用对请求的响应中向攻击者返回查询结果。 另一种不同的SQL注入攻击是"二阶(second-order)"SQL注入,这种攻击的事件时序通常如下所示: (1) 攻击者在HTTP请求中提交某种经过构思的输入。 (2) 应用存储该输入(通常保存在数据库中)以便后面使用并响应请求。 (3) 攻击者提交第二个(不同的)请求。 (4) 为处理第二个请求,应用会检索已经存储的输入并处理它,从而导致攻击者注入的SQL查询被执行。 (5) 如果可行的话,会在应用对第二个请求的响应中向攻击者返回查询结果。
select * from users where username = '$name'
查询的语句所用到的变量name就是从数据库提取到的我们的用户名,所以我们可以先利用更新我们的用户名功能插入语句进数据库。
这样查看我们个人信息的时候就成功执行了我们的SQL注入攻击。例如:我们在用户名插入 [SQL] 纯文本查看 复制代码
select * from users where username = 'zusheng' or '1'='1'
- 第六节 探讨SQL注入防御技巧
- 第一节 注入攻击原理及自己编写注入点
- 第二节 寻找及确认SQL注入
(状态:已更新)
-
-
- 第三节 利用SQL注入
- 第四节 SQL盲注利用
文章首链:
感谢您的阅读,如果您学到了,请点赞(码字不易)! 欢迎热心园友补充!
-