sql注入

作者: 留白_bb77 | 来源:发表于2019-04-09 17:59 被阅读0次

SQL注入原理   主要是攻击者,利用被攻击页面的一些漏洞(通常都是程序员粗心大意造成的),改变数据库执行的SQL语句,从而达到获取“非授权信息”的目的。

sql 注入的基本步骤

判断是什么类型注入,有没过滤了关键字,可否绕过

获取数据库用户,版本,当前连接的数据库等信息

获取某个数据库表的信息

获取列信息

最后就获取数据了

判断sql注入

显错和基于错误的盲注

单引号,(如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。 如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,或者是双引号)

and 1=1  和and 1=2,(and 1=1 返回了数据,而and 1=2没有,因为1=1是一个为真的条件,前面的结果是true,true and true 所以没有任何问题,第二个 1=2 是个假条件, true and false还是false,所以并没有数据返回。错误即为数字型)

and ‘1’=’1 和 and ‘1’=’2字符型

双引号,

判断基于时间的盲注:在上面的基础上,加个sleep函数 ,如sleep(5) (函数不同数据库有所不同)例子:   ' and sleep(5)    " and sleep(5)

绕过登录

注释 select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'

            select * from users where username='123' or 1=1

判断字段数

用union联合查询

order by查询

查询库名

版本大于5.0的mysql的information_schema库中存储着mysql的所有数据库和表结构信息,所以可以利用information_schema库快速注入。

通过下面的语句可以判断数据库版本

and ord(mid(version(),1,1))>51

51是ASCII码3 正确则>4.0 错误则<4.0,当版本大于3.0时才能使用union方法;

ord()是mysql的函数用于获取二进制码;

mid()是mysql的函数用于截位操作;

version()是mysql的函数用于获取当前数据库的版本;

database()查询得到数据库名

mysql的数据库information_schema,他是系统数据库,安装完就有,记录是当前数据库的数据库,表,列,用户权限等信息,下面说一下常用的几个表

SCHEMATA表:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。

TABLES表:储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表嘛)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname的结果取之此表

COLUMNS表:提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,猎德注释等。是show columns from schemaname.tablename的结果取之此表。

相关文章

网友评论

      本文标题:sql注入

      本文链接:https://www.haomeiwen.com/subject/tftuiqtx.html