漏洞挖掘 | 发现隐藏子域的虚拟主机

高效虚拟主机发现的工具和技术

在进行外部渗透测试或漏洞赏金狩猎时,我们从各个角度探索目标系统,收集尽可能多的信息来识别潜在的攻击向量。这涉及识别所有可用的资产、域和子域。

在这个过程中,我们关注的事情之一就是枚举虚拟主机。通过这样做,我们可以发现可能配置错误或容易受到攻击的隐藏或未记录边缘的资产。例如,我们可能会发现无需身份验证即可访问虚拟主机,这可能会导致敏感数据受到未经授权的访问。

在本文中,我们将讨论枚举虚拟主机并从中收集信息的不同方法。我们将使用HTB Academy 练习来演示枚举步骤。

虚拟主机概述

虚拟主机是一项功能,允许单个 Web 服务器托管多个网站,并使它们看起来就像托管在单独的服务器上一样。这样做通常是为了减少资源开销和运行成本。

虚拟主机类型

虚拟主机有两种类型:基于 IP 的和基于名称的。

- 基于IP的托管

这种类型的托管涉及配置 Web 服务器以在单个服务器上托管多个网站。每个托管站点都与一个唯一的 IP 地址关联,该地址可以是专用的,也可以是共享的,具体取决于托管配置。

当用户尝试访问网站时,服务器会侦听请求,将传入的主机名解析为其相应的 IP 地址,然后根据该 IP 地址将请求路由到适当的网站。

一旦服务器根据该 IP 地址识别出目标网站,它就会向用户提供与该网站相关的内容。

- 基于Host的托管

这种类型的托管涉及配置 Web 服务器以使用不同的域名在单个 IP 地址上托管多个网站。每个托管网站通常与唯一的主机名关联,但多个主机名可以与单个网站相关。

当用户请求访问某个网站时,服务器会检查 HTTP 请求中的“ Host ”标头,以确定用户试图访问哪个网站。根据主机标头中提供的主机名,服务器识别特定网站并向用户提供与该网站关联的内容。

虚拟主机枚举

Ffuf

ffuf 是一个用 Go 编写的工具,可以通过运行sudo apt-get install ffuf来安装在 Kali Linux 上,也可以从 GitHub :https://github.com/ffuf/ffuf下载。这个工具允许我们定制我们的模糊测试方法。

要开始搜索虚拟主机,我们需要使用-u标志传递目标的 IP 地址,并使用-H标志传递相关域名,它引用主机标头。

然后,将单词FUZZ放在域的开头以指示模糊测试位置。

我们可以使用不同的单词列表来标识带有-w标志的虚拟主机。一种流行的单词列表是 Seclists 单词列表中的name list:https://github.com/danielmiessler/SecLists/blob/master/Discovery/DNS/namelist.txt,而另一种是 Assetnotes 中的Kiterunner:https://wordlists.assetnote.io/单词列表。

ffuf -w namelist.txt -u http://10.129.184.109 -H "HOST: FUZZ.inlanefreight.htb"

模糊测试可以产生大量结果,有时很难识别其有效或无效。过滤结果可以节省您筛选输出的时间。您可以使用-fs标志以逗号分隔它们来过滤一个响应大小或一系列大小 - 例如-fs 109, 208,等。

ffuf -w namelist.txt -u http://10.129.184.109 -H "HOST: FUZZ.inlanefreight.htb" -fs 10918

图片

模糊测试完成后,我们将输出保存到文件中。然后,我们可以使用“ grep ”在结果中搜索文本中包含单词“ FUZZ ”的行。下面是使用 grep 查找具有已识别子域的行的示例。

cat vhosts | grep FUZZFUZZ:apFUZZ:appFUZZ:citrix

然后,我们可以使用awk通过管道传输 grep 输出,以使用 print 命令仅提取已识别的子域,后跟美元符号和列号。整个命令可以写成一行。

cat vhosts | grep FUZZ | awk '{print $3}'

使用简短的 bash 脚本,我们将原始域名附加到已识别的子域中,如图所示。

for i in $(cat vhost1); do echo $i.inlanefreight.htb ; done > vhost1

图片

Gobuster

枚举虚拟主机的另一种方法是使用 Gobuster 工具使用 vhost 选项。该工具可以通过运行sudo apt-get install gobuster在 Kali 中安装,也可以从 GitHub :https://github.com/OJ/gobuster 下载。

要开始枚举过程,我们首先需要使用-u标志提供 IP 地址,并使用-w标志指定一个单词列表。之后,我们定义域名和模糊测试开始的位置。

在 Gobuster 中,我们在称为模式文件的文本文件中定义此信息,该文件通过-p标志传递。您可以在下面的图中看到模式文件的示例。

{GOBUSTER}.inlanefreight.htb

图片

为了过滤输出,我们使用--exclude-length标志来筛选响应大小。多个响应大小可以用逗号分隔。

gobuster vhost -u http://10.129.118.153 -w namelist.txt -p pattern --exclude-length 301 -t 10

图片

Curl

我们可以使用 Curl 和一些 bash 脚本实现同样的效果。下面的脚本读取

名称列表

文件的内容(用作我们的单词列表),并为从文件中读取的每个子域打印消息“Found Subdomain”。

cat namelist.txt | while read vhost; do echo "\n========\nFound Subdomain: ${vhost}\n=========";

然后,curl 命令向指定的 IP 地址 (http://10.129.141.252) 发出 HTTP HEAD 请求,并传递 Host 标头中单词列表中的子域。

输出通过管道传输到 grep 以提取响应的Content-length并将其保存在文件中。

curl -s -I http://10.129.141.252 -H "HOST: ${vhost}.inlanefreight.htb" | grep "Content-Length: "; done > output

图片

为了搜索输出,我们再次使用 grep 命令并过滤包含文本“Content-Length:”的行。然后,我们使用uniq命令删除文本文件中的任何重复行,并使用-c标志来计算每个唯一行出现的次数。

 

cat output | grep "Content-Length:" | uniq -c

图片

如果我们想从内容中提取子域,我们可以使用-B标志在匹配之前显示几行。在此命令中,我们使用 4 行来检索子域名。

cat output | grep -B 4 "Content-Length: 103"

图片

后枚举

识别虚拟主机后,我们附加 HTTP 或 HTTPS 以生成 URL 列表。我们可以使用单行 bash 脚本来做到这一点。

for i in $(cat vhost2); do echo "https://"$i; done > vhosts3

图片

然后可以将该列表与 hakcheckurl 或 Eyewitness 等其他工具一起使用来检索 HTTP 响应代码,以检查可用的网页并捕获屏幕截图。

Hakcheckurl

hakcheckurl 是 hakluke 用 Go 编写的工具,可在 GitHub:https://github.com/hakluke/hakcheckurl上获取该工具获取 URL 列表并返回其相应的 HTTP 响应代码。

要运行该工具,必须安装 Go。按照其官方网站上的步骤在 Linux 环境上安装它:https://go.dev/doc/install*](https://go.dev/doc/install。

安装后,克隆 hakcheckurl 存储库,使用go build构建该工具,并将其重命名为 hakcheckurl。

git clone https://github.com/hakluke/hakcheckurl.git
go build ./main.go
# renmae the tool to hakcheckurl instead of mainmv main hakcheckurl

图片

接下来,我们使用 hakcheckurl 工具确定每个 URL 的 HTTP 响应代码。在下面的结果中,我们注意到使用 HTTPS 协议的 URL 无法访问,而使用 HTTP 协议的 URL 返回了 200 个响应代码。这表明使用 HTTP 的网页已启动并正在运行。

cat vhosts | ./hakcheckurl

图片

Eyewitness

一旦我们确定了要检查的网页,我们就可以使用 Eyewitness 收集有关目标网站相关底层基础设施和技术的更多信息。

Eyewitness 是 RedSiege 创建的一个工具,可以捕获屏幕截图、检索标头信息并识别默认凭据(如果有)。我们可以在 Kali 上安装它 sudo apt-get install eyewitness 或从 GitHub 下载:https://github.com/RedSiege/EyeWitness。

要运行 Eyewitness,我们需要使用-f标志传递 URL 列表;然后,我们可以使用user-agent agent 标志为 HTTP 请求设置自定义 User-Agent 字符串。这对于模拟来自不同浏览器或客户端应用程序的请求非常有用。

我们还可以使用--add-http-ports--add-https-ports标志指定其他端口来检查 http 和 https 协议。这指示 Eyewitness 连接到这些端口并捕获屏幕截图(如果适用)。

eyewitness -f vhost2 --user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36" --add-http-ports 8080,8000,8088 --add-https-ports 8443,4433,4343

图片

运行后,系统会提示我们选择是否打开已创建的报表。如果您选择“Y”,默认 Web 浏览器将打开该报告。如果您选择“N”,报告将保存到您的本地设备。

图片

今天的文章就到此结束了。在整篇文章中,我们发现并探索了各种用于枚举虚拟主机的工具。我们还讨论了如何使用这些工具的结果来扩大攻击面并获得对目标基础设施的宝贵见解。感谢您花时间阅读这篇文章。

免费获取网络安全优质学习资料与干货教程

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

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

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

相关文章

阿里云服务器挖矿木马清除

这里写自定义目录标题 阿里云服务器挖矿木马清除清除步骤: 阿里云服务器挖矿木马清除 直接看图: 清除步骤: 是的,根据您提供的 systemctl 输出,c3pool_miner.service 看起来非常可疑,因为它的描述是 “…

VLM系列文章7-Molmo and PixMo

近期涌入了大量的MLLM模型,包括Llama-3.2-11B-Vision-Instruct、Qwen2-VL、mPLUG-Owl3、Ovis1.6-Gemma2-9B、InternVL2、MiniCPM-V 2.6 等工作。笔者看来,多模态模型可能不仅仅在刷榜上,可能更多的需要解决实际任务。因此,更能衡量…

倾斜传感器倾斜仪的工作原理

倾斜仪是一种用来测量物体倾斜角度的仪器,广泛应用于工程、建筑、地质等领域。以下是关于倾斜仪工作原理的文章: 倾斜仪工作原理详解 倾斜仪是一种高精度的测量仪器,用于检测和记录物体或结构的倾斜角度。它在许多领域,如建筑工程…

SpringBoot养老院管理系统—计算机毕业设计源码36270

摘 要 随着我国老年人口数量的逐年增加,人口抚养比也在迅速攀升,越来越多的老年人将走出家门进入养老院安度自己的晚年。同时国家和地方也相继出台了加快发展老龄事业的政策方针,作为机构养老主要组成部分的养老院将迅猛发展。在养老院规模扩…

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好 在新房装修的喜悦之余,业主们不得不面对一个常见却又棘手的问题——甲醛污染。甲醛,这种无形的敌人,以其难以察觉的存在,对家人和孩子的健康造成潜在威胁。很多业主们在装修期…

OJ在线评测系统 原生Java代码沙箱程序漏洞讲解 原生超时资源权限控制

核心流程实现四 原生实现Java程序漏洞讲解 我们的程序并不安全 到目前为止 核心流程已经实现 但是想要上线 安全么 首先如果用户提交恶意代码怎么办 执行阻塞 占用资源不释放 程序卡死 注意类名要改为Main 包名一定要去掉 如果这种代码放到服务器中 会无限占用时间 pac…

在GPU计算型实例中安装Tesla驱动超详细过程

摘要:在深度学习、AI等通用计算业务场景或者OpenGL、Direct3D、云游戏等图形加速场景下,安装了Tesla驱动的GPU才可以发挥高性能计算能力,或提供更流畅的图形显示效果。如果您在创建GPU计算型实例(Linux)时未同时安装Te…

[深度学习]循环神经网络

1 自然语言处理概述 语料:一个样本,句子/文章语料库:由语料组成词表:分词之后的词语去重保存成为词表 2 词嵌入层 import jieba import torch.nn as nn import torch # 文本数据 text北京东奥的进度条已经过半,不少外…

错误解决 ---- Unexpected lexical declaration in case block no-case-declarations

1. 报错提示 154:15 error Unexpected lexical declaration in case block no-case-declarations154:21 error resId is assigned a value but never used no-unused-vars158:15 error Unexpected lexical declaration in case block no-case-declarations158:21 e…

Java 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)

先决条件: 如何检查两个给定的线段是否相交? c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspnet/article/details/141713762 python https://blog.csdn.net/hefeng_aspnet/article/details/…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻!!! 结构体类型的声明 咱们在讲操作符那个章节中,对于结构体类型的声明进行了讲解,咱们先来回忆一下,为后面的讲解作准备…

mac怎么设置ip地址映射

最近开发的项目分为了两种版本,一个自己用的,一个是卖出去的。 卖出的域名是和自己的不一样的,系统中有一些功能是只有卖出去的版本有的,但我们开发完之后还得测试,那就需要给自己的电脑配置一个IP地址映射了&#xf…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…

JAVA毕业设计183—基于Java+Springboot+vue的旅游小程序系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的旅游小程序系统(源代码数据库)183 一、系统介绍 本项目前后端不分离,分为用户、管理员两种角色 1、用户: 注册、登录、公告信息(…

解读: 火山引擎自研vSwitch技术

最近看到一篇文章介绍火山云的网络vSwitch技术,虽然是2022年的比较老的介绍,但是对于我们看到vSwitch技术的发展还是有些参考的。下面就截取了当时火山vSwitch关心的几个问题,做了一下梳理。 背景 在云计算发展过程中,虚拟网络的…

虚拟环境默认安装到C盘的修改办法

问题: 创建的虚拟环境默认安装到了C盘。 将路径改成D盘下。 解决办法: 我是按照博客w11下载anaconda在d盘,新建的虚拟环境总是在c盘怎么解决_如何保证anaconda的全在e盘-CSDN博客 中的方法1解决的。 用记事本打开.condarc文档&#xff0…

C++之STL—函数对象谓词

函数对象(仿函数) 函数对象(仿函数)是一个**类**,不是一个函数 类名() 仿函数 直接调用: 、 谓词 定义:返回类型为bool 类型的仿函数 一元谓词:operator()接受一个参数 二元谓词&a…

JavaScript高级——事件循环模型

1、 2、所有代码分类 ① 初始化执行代码(同步代码):包含绑定 dom 事件监听,设置定时器,发送 ajax 请求的代码 ② 回调执行代码(异步代码):处理回调逻辑 3、js 引擎执行代码的基本流…

ubuntu系统下mamba-yolo模型的深度学习环境搭建

本文将介绍如何在ubuntu系统下配置目标检测模型mamba-yolo的深度学习环境 1. 环境要求 Python > 3.9 (本文使用python-3.11) CUDA > 11.6 (本文使用CUDA-11.8) Pytorch > 1.12.1 (本文使用torch-2.4.0&…

【4.6】图搜索算法-DFS和BFS解合并二叉树

一、题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是 如果两个节点重叠,那么将他们的 值相加作为节点合并后的新值,否则不为 NUL L…