DVWA平台之sql盲注学习

本文参考了以下文章,这几篇都写得挺详细了,本文只是个人的整理以及实践:

1、http://www.myhack58.com/Article/html/3/7/2011/32223.htm

2、http://blog.chinaunix.net/uid-11582448-id-4432211.html

3、http://www.2cto.com/Article/201307/227449.html



盲注定义:

普通注入是会显示一些错误信息在页面上给攻击者判断,也就是说它会有多种情况,从而方便攻击者。而盲注则是只有两种情况,即TRUEFALSE,这样说并不是很准确,因为SQL查询无非就这两种情况,应该说是盲注的时候你只能得到一个正常的页面或者是什么页面的不存在,甚至你在查询表的记录过程也不会有显示。


关于更多sql盲注的信息,可百度,有各种注入方式,此处讨论DVWA平台的注入


实践:

先在sql查询中看两条语句:

DVWA平台之sql盲注学习_第1张图片

DVWA平台之sql盲注学习_第2张图片


可以看到加了引号和不加引号是有区别的,一个是以数字型处理,一个是以字符型处理,所以在DVWA中,输入1+1,可以得到:

DVWA平台之sql盲注学习_第3张图片

而输入‘1+1’则没有输出,所以可以猜测后台是加了单引号,作为字符型处理的。


sqlmap:

对于盲注,纯手工的话很困难,所以我们用一个渗透工具:sqlmap。应用如下:

1、找到可能的注入点:(192.168.100.25是我的DVWA平台所在虚拟机的ip地址)

输入命令:sqlmap.py-uhttp://192.168.100.25/vulnerabilities/sqli_blind/?id=hahaha&Submit=Submit,然后得到结果:

获知id部分存在漏洞,易被注入。

再看一看其详细信息:

DVWA平台之sql盲注学习_第4张图片

注意其灰色字体,是sqlmap的注入测试语句。

函数IFNULL(fieldA,fieldB),意义是当字段fieldANULL时取fieldB,不是NULL时取fieldA的值。这个函数与外连接配合使用时能起到OracleIIF或是NVL的作用。

CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。将前面的CHAR(……)转换为CHAR。

第二个Payload的sleep(5)表示休眠5秒。关于这个休眠函数有非常大的作用:

借助于sleep(N)这个函数我们可以在MySQL ServerPROCESSLIST中捕获到执行迅速不易被查看到的语句以确定我们的程序是否确实在Server端发起了该语句。比如我们在调试时想确定一下程序是否确确实实向Server发起了执行SQL语句的请求,那么我们可以通过执行show processlist或者由information_schema.processlist表来查看语句是否出现。但往往语句执行速度可能非常快,这样的话就很难通过上述办法确定语句是否真正被执行了。在这种情况下,可以通过在语句中添加一个sleep(N)函数,强制让语句停留N秒钟,但是使用这个办法是有前提条件的,也只指定条件的记录存在时才会停止指定的秒数,查询不存在的信息,即使添加了sleep(N)这个函数,语句的执行还是会一闪而过。

sqlmap命令:

--current-db:获得当前数据库名

--current-db --tables –D dvwa:使用dvwa库得到表名


-T guestbook –columns :得到 guestbook 的表结构
-T users –dump:得到users表的内容,在sqlmap询问时候破解密码时,选择是,sqlmap会使用自己的字典来破解密码,得到5个用户的密码
--passwords:使用sqlmap自带的字典可以破解出数据库用户的密码


你可能感兴趣的:(Web安全,DVWA,sqlmap,sql盲注)