TOP10_SQL

来源:互联网 发布:java 泛型 多继承 编辑:程序博客网 时间:2024/06/05 02:59

  今天给大家详细的总结一些SQL如何的常用原理,方法,和一些演示和工具的使用。

  最新的OWASP Testing Guide 4.0把SQL注入分为以下三类:带内,带外,盲注,所以文章的大体思路也是这样子的。

  一 带内注入

  所谓带内注入就是提起数据会会使用相同的channel返回,所以这种注入如果攻击成功效果明显,直接会在网页上显示。当然首先你的构建一个正确的SQL语句。关于SQL语句的构造,不是本文讨论的内容,所以默认大家有这方面的基础。

  接下来我们要明白如何测试,关于这个问题。我们首先回答web app什么时候和数据交互,因为那些地方才是我们测试的切入点。常见交互地点比如说,认证表单,搜索引擎,电商网站,http header,隐藏的域啊等。当然你可以用’或者:符号来进行初步的判定,但我相信,这样的漏洞很少了。毕竟开发者这点意识还是有的。你可能看到的是一个500或者自定义的错误表单。这个时候就要利别的技术。比如盲注等。

  接下来我们看一下owwasp提供靶机的源代码,结合源代码的我们分析一下如何进行带内注入。
  这里写图片描述

如你所见,不同的图,对应不同的难度。图一,直接没有过滤用户输入,直接拿来使用。图二,利用PHP的mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。图三,首先利用striplashes删除反斜杠,在进行转移。含义就是你可以利用反斜杠绕过图二的过滤。具体我们分别来看:

  图一:输入 admin’ or ’ 1=1– 能够成功绕过

  图二:绕过图二的防御可以利用编码 0x27单引号结合 0x27 union select 1,table_name from INFORMATION_SCHEMA.tables –。应为单引号过滤了,还有INFORMATION_SCHEMA是每个mysql默认数据库。

  图三:利用上面的方法也可以绕过,但是由于is_numeric函数存在,必须把整个字符串转成十六进制码,注意空格也要转化,因为is_numeric只能过数字或者数字串。

有些过滤器试图过滤:SQL关键字,单引号空白符等是可以绕过的:

  1 关键字大小写变种

  2 不用空白符利用内联注释 union =union//=//un//ion//
  3 url编码 Unicode编码
  4 使用动态查询
  5 使用空字节 用来避开原生输入过滤器
  7 利用剥离后的表达式
  8 利通截断

  在实际测试中,识别数据库的类型很重要,常用的方法有

  1 查看错误的返回

  2 利用社会工程学

  3 利用工具扫描 nmap -A

  对于不用的测试点和数据库类型输入的数据类型也不一样的

  1 MYSQL

    a) 数字类型

还未完结。。。。。

0 0
原创粉丝点击