ATTCK视角下的信息收集:主机发现

目录

1、利用协议主动探测主机存活

利用ICMP发现主机

利用ARP发现主机

利用NetBIOS协议发现主机

利用TCP/UDP发现主机

利用DNS协议发现主机

利用PRC协议发现主机程序

2、被动主机存活检测

利用Browser主机探测存活主机

利用ip段探测主机存活

利用net命令探测主机存活

利用arp命令探测主机存活

利用HOSTS文件探测主机存活

利用DNS缓存探测主机存活

3、内网多网卡主机发现

前提条件:

分类:

利用方法:

防御方法:


1、利用协议主动探测主机存活

在进行内网主机发现时,使用系统自带的命令或者软件可以减少在目标磁盘落地二进制文件,减少EDR终端检测与响应(Endpoint Detection and Response)的检测和拦截

利用ICMP发现主机

ICMP探测的优势在于是系统自带的,内网中终端设备一般会将该协议进行放行,并且安全设备的默认策略不会对该协议进行安全分析

比如说我们可以使用下面命令探测一个C网段中的有哪些存活的主机:

利用ARP发现主机

在利用ARP发现主机时候,可以利用arp-scan工具来发现主机,该工具会遍历预设的ip段并且发送ARP请求,如果主机回复,则会返回主机ip和MAC地址。

注:如果使用ARP扫描,尽量不要指定过大的扫描范围,否则会引起大量告警,导致权限丢失

工具下载地址:

GitHub - QbsuranAlang/arp-scan-windows-: send arp request to whole specific LAN

利用NetBIOS协议发现主机

NetBIOS协议对各种IDS、IPS、杀毒软件的规避效果比其他协议更好,因为利用NetBIOS是正常的机器名解析查询应答的过程,推荐优先使用,它的功能就是为局域网提供网络以及其他特殊的功能

NBNS协议时TCP/IP上的NetBIOS(NetBT)协议簇的一部分,它在基于NetBIOS名称访问的网络上提供主机名和地址映射方法,

nbtscan是一个命令行工具,用于扫描本地或者远程TCP/IP网络上开放NetBIOS名称服务器。

如果主机存活,则会发送NBNS消息查询对方主机名

 注:如果使用nbtscan进行批量扫描,会发送大量的请求,导致安设备警告,并且该工具会落地,会增加被发现的可能

可以使用window自带的命令nbstart来指定ip标识信息

利用TCP/UDP发现主机

下面介绍一款用于TCP/UDP扫描的工具:portcheck.exe

Portcheck是一款小众的端口扫描工具,没有反病毒软件认为它是恶意软件甚至不被认为是黑客工具

下载地址:PortCheck 2.1 - TCP port check Windows 10 (portcheck-tool.com)

例如:扫描一个c网段内445端口的开放情况

利用DNS协议发现主机

我们如果得到了内部的NDS服务器地址,也就是NS记录,一般会通过DHCP自动分配

可以指定内网中的NDS服务器,然后以目标域名为规则逐个解析常见生产力系统域名的二级域名,这样就能够发现大量内部业务以及ip段

(1)Invoke-DNSDIscovery.ps1 可以用于识别内部网络/Windows域上的常用二级域名列表,此脚本可以用于在突破边界后进行内部DNS侦查

这个脚本中内置了大量的常见的二级域名,可以执行以下命令来将存在的域名保存到dns_short.csv中

Invoke-DnsDicovery -Namelist nasmes.txt -Path dns_short.csv

也可以使用-Namelist names.exe语法自定义二级域名

(2)gobusterdns是爆破二级域名工具gobuster的精简版,该巩固只用于子域名爆破支持自定义DNS服务器运行,内置精简字典,可以导入域名列表进行扫描

./gobusterdns_linux -d dm.org -r 192.168.159.1:53 -i -q

利用PRC协议发现主机程序

我们使用PRCSCAN以无须经过身份认证来访问目标的135端口并且获取目标的RPC map,然后通过解析PRC map 中的UUID判断目标主机可能存在的进行,还可以通过相关的进程判断远程主机可能开放的端口。

整个过程只需要向目标的135端口发送十几个流量包,在网络与主机层的特征和动静比较小,方便隐蔽渗透

具体的过程:

  1. 首先使用CS(Cobaltstrike)控制目标主机来加载PRCSCAN脚

  2. 执行rpcsan 192.168.159.0/24命令来使用PRCSCAN匿名探测远程C段的主机信息

PRCSCAN脚本下载地址:GitHub - JDArmy/RPCSCAN: RPC远程主机信息匿名扫描工具

2、被动主机存活检测

在发现主机后,如果使用扫描技术,在扫描的时候应该避免使用nmap等工具进行暴力扫描,因为这样会触发安全设备的告警,导致权限丢失。

最开始可以对入口点机器进行分析,得到已经存在的资产ip,从而确定更多的ip段

利用Browser主机探测存活主机

SMB协议提供了Browsing机制,客户端利用该机制来访问网络中的计算机列表

在SMB协议中,经常通过广播的方式来获取当前的网络资源,但是这会消耗大量的网络资源,

Browsing机制提供了一个计算机列表,每当一台计算机在网络中寻找另外一个计算机的时候,无需再使用广播的方式,而是直接从计算机列表中查找目标计算机,维护这个列表的计算机就成为“Browser”

Browser分为:本地Browser(地主Browser)和工作组与域的Browser(域主Browser)

  • 本地的Browser是由网络中的计算机自动推举出来的,,并非事先设定好的

  • 域的Browser也是自动推举出来的,但是主域控制器的权重高

可以使用nbtstat -A ipadder命令探测主机是不是主Browser

还可以借助工具使用Browsing来进行被动主机发现,比如,在Kail中可以执行python2 1.py eth0命令来进行被动主机发现

利用ip段探测主机存活

要利用IP段探测主机的存活状态,您可以使用以下方法之一:

  1. 使用Ping命令: 在命令提示符或终端中,您可以使用ping命令来扫描IP段中的主机。例如,如果您要扫描192.168.1.1到192.168.1.255之间的IP地址,您可以执行类似以下命令:

    for /L %i in (1,1,255) do @ping -n 1 -w 100 192.168.1.%i | find "Reply"

    这个命令会对该IP段中的每个IP地址执行一次ping操作,然后检查是否有回复。这样您就可以确定哪些主机是存活的。

  2. 使用Nmap工具: Nmap是一款功能强大的网络扫描工具,它可以用于扫描IP段中的主机,以确定哪些主机是存活的。例如,您可以执行以下命令来扫描192.168.1.0/24网段中的主机:

    nmap -sn 192.168.1.0/24

    这将发送ICMP Echo请求到该网段中的每个IP地址,并收集响应以确定主机的存活状态。

        

这些方法可以帮助您确定给定IP段中哪些主机是存活的。

请注意,对未经授权的网络进行扫描可能违反法律或网络使用政策,因此在执行这些操作之前,请确保您有权进行这样的扫描。

利用net命令探测主机存活

net use 命令用于 ipc$命名管道连接,查看计算机连接信息以及连接与断开计算机共享资源,它不带任何参数使用

执行net use命令可以列出已经建立连接的网络列表

执行net session命令可以看到其他主机连接当前主机的记录

利用arp命令探测主机存活

arp命令用于显示和修改arp缓存中的项目

arp -a命令用于记录出现的ip地址与物理地址的列表信息

利用HOSTS文件探测主机存活

很多的网络管理员为了减轻DNS服务器的压力,会将内网中的一些生产力系统域名和ip地址写到HOSTS文件中,因此从hosts中也可以看到那些主机是存活的

利用DNS缓存探测主机存活

Windows会将经DNS解析过的域名缓存下来。如果你控制了一台PC,可以查看一下它的DNS解析记录,发现一些内网中的生产力系统域名

系统中有大量的文件记录可以帮助我们发现更多的存活ip

可以输入 ipconfig /displaydns进行查看

3、内网多网卡主机发现

在内网渗透中,目标网络一般是分区域使用防火墙进行隔离的,可以通过Windows的一些接口,NetBIOS进行网卡信息的手机,用来定位多网卡主机。

在无须进行身份验证的情况下,可以获得远程主机是否有多个网卡和多个ip地址,以绕过限制,访问受保护的网络

在内网渗透中,发现内网多网卡主机可以通过以下方法实现:

前提条件:

  • 你需要在目标网络内,能够直接访问目标主机。

  • 目标主机上必须开启了相关的服务或接口,如IOXIDResolver、NBNS或PRC。

  • 开放135端口/UDP137端口

分类:

  • IOXIDResolver接口:通过调用IOXIDResolver接口,可以获取到远程主机的多个网卡信息。

  • NBNS:通过NetBIOS Name Service (NBNS) ,可以获取到远程主机的名称和IP地址。

  • PRC:通过Port Range Classification (PRC),可以确定任意主机可以访问的网络范围。

利用方法:

  1. 使用IOXIDResolver接口获取远程多网卡主机:使用相关的工具或编程语言,通过调用IOXIDResolver接口,获取远程主机的网卡信息。这些信息可以包括多个IP地址和对应的网卡信息。

  2. 使用NBNS获取远程多网卡主机:通过发送NetBIOS请求,获取远程主机的名称和IP地址。根据不同的NetBIOS应答,可以判断目标主机是否存在多个网卡。

    1. 使用nextnet通过UDP137端口枚举多网卡主机

    2.  nextnet 192.168.159.0/24

  3. 使用PRC获取任意主机可以访问的网络范围:通过分析目标主机的端口开放情况,结合已知的端口和服务信息,确定目标主机所在的网络范围。

防御方法:

  • 确保目标主机上的相关服务或接口已经关闭或限制访问。

  • 配置防火墙,限制对敏感接口的访问。

  • 定期更新和修补系统漏洞,以防止利用这些漏洞进行内网渗透。

  • 使用网络入侵检测系统(IDS)或入侵防御系统(IPS)来监测和阻止潜在的内网扫描行为。

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

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

相关文章

【软件测试】学习笔记-测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度,通常的做…

UAV | 多算法在多场景下的无人机路径规划(Matlab)

近年来,无人机(unmanned aerial vehicle,UAV)由于其灵活度高、机动性强、安全风险系数小、成本低等特点,被广泛应用于搜索巡逻、侦察监视、抢险救灾、物流配送、电力巡检、农业灌溉等军用或民用任务。路径规划是无人机执行任务的关键&#xf…

第34期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

数据结构之绪论

一个著名公式: 程序数据结构算法 非数值计算:无法用数学的公式或方程来描述 描述非数值计算问题的数据模型不是数学方程,而是诸如表,树和图之类的具有逻辑关系的数据 数据结构:是一门研究非数值计算的程序设计中计算机…

pyqt6 + pycharm 搭建+使用入门

首先安装PyQt6和PyQt6-tools。使用如下命令: pip install PyQt6 PyQt6-tools 但是运行后会报如下错误: 这个时候按照提示执行命令升级pip即可 python.exe -m pip install --upgrade pip 配置pycharm: 打开pycharm,进入setting&am…

大事务提交优化

经常性的报死锁异常,经常性的主从延迟......通过报错信息按图索骥,发现代码是这样的。 这是一段商品发布的逻辑,我们可以看到参数校验、查询、最终的insert以及update全部揉在一个事务中。遇到批量发布商品的时候就经常出现问题了&#xff0c…

css实现一个斑马条纹动画,实现一个理发店门口的小转转,进度条动画同理!

css实现一个斑马条纹动画,实现一个理发店门口的小转转 前置基础知识 css背景background的重复渐变属性repeating-linear-gradient() 该属性类似于linear-gradient(),但他会在整个方向上重复渐变以覆盖整个容器 一、先写一个普通渐变例子linear-gradient() &…

【JAVA】volatile 关键字的作用

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 volatile 的作用: 结语 我的其他博客 前言 在多线程编程中,保障数据的一致性和线程之间的可见性是…

复旦MBA科创青干营(二期):探索合肥科创企业的创新之路

11月18日-19日,复旦MBA科创青干营二期学生开启了整合实践活动的第三次企业参访,前往位于合肥的蔚来第二先进制造基地、安徽万邦医药科技股份有限公司和合肥国轩高科动力能源有限公司,在学术导师和科创企业家“双导师”的指导下,深…

【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )

文章目录 一、函数对象与谓词1、一元函数对象2、" 谓词 " 概念3、find_if 查找算法 二、一元谓词示例1、代码示例 - 一元谓词示例2、执行结果 一、函数对象与谓词 1、一元函数对象 " 函数对象 " 是通过 重载 函数调用操作符 () 实现的 operator() , 函数对…

【数值分析】非线性方程求根,牛顿法,牛顿下山法,matlab实现

4. 牛顿法 收敛时牛顿法的收敛速度是二阶的,不低于二阶。如果函数有重根,牛顿法一般不是二阶收敛的。 x k 1 x k − f ( x k ) f ′ ( x k ) x_{k1}x_k- \frac{f(x_k)}{f(x_k)} xk1​xk​−f′(xk​)f(xk​)​ matlab实现 %% 牛顿迭代例子 f (x) x…

创建Qt项目

项目工程名称一般不要有特殊符号,不要有中文 项目工程保存路径可修改的,但路径不要带中文 构建系统,有3种,这里使用qmake qmake和cmake区别 构建过程不同,项目管理不同。 1、构建过程,qmake是Qt框架自带的…

MySQL数据库:索引

目录 一. 索引的价值 二. 数据库与磁盘的IO 2.1 磁盘的结构 2.2 磁盘访问 2.3 MySQL与磁盘的交互 三. 对索引的理解 3.1 Page的结构 3.2 B树和B树索引结构 3.2.1 B树的结构 3.2.2 B树 3.3 聚簇索引和非聚簇索引 四. 索引的操作 4.1 索引的创建 4.2 索引的查看 4.…

new FormData 同时发送表单 json 以及文件二进制流

需要新增时同时发送表单 json 以及对应的文件即可使用以下方法传参 let formDataParams new FormData(); 首先通过 new FormData() 创建你需要最后发送的表单 接着将你的对象 json 存储,注意使用 new Blob 创建大表单转换成 json 格式。以…

解决:TypeError: ‘tuple’ object does not support item assignment

解决:TypeError: ‘tuple’ object does not support item assignment 文章目录 解决:TypeError: tuple object does not support item assignment背景报错问题报错翻译报错位置代码报错原因解决方法方法一:方法二:今天的分享就到…

【Flink精讲】Flink数据延迟处理

面试题:Flink数据延迟怎么处理? 将迟到数据直接丢弃【默认方案】将迟到数据收集起来另外处理(旁路输出)重新激活已经关闭的窗口并重新计算以修正结果(Lateness) Flink数据延迟处理方案 用一个案例说明三…

开源许可证

文章目录 一、简介二、详细信息参考 一、简介 开源是指公开源代码,但这并不代表就是免费的。 开源许可证是一种法律许可。 通过它,版权拥有人明确允许,用户可以免费地使用、修改、共享版权软件。 版权法默认禁止共享,也就是说&am…

如何选择消息队列?Kafka 与 RabbitMQ

在上一期中,我们讨论了使用消息队列的好处。然后,我们回顾了消息队列产品的历史。现在看来,当我们需要在项目中使用消息队列时,Kafka 是首选产品。但是,当我们考虑特定要求时,它并不总是最佳选择。 数据库…

【Kubernetes】认证授权RBAC (一)

认证授权RBAC 一、k8s安全管理:认证、授权、准入控制概述1.1、简介【1】认证基本介绍【2】授权基本介绍【3】准入控制基本介绍 1.2、认证【1】客户端认证【2】Bearertoken【3】Serviceaccount【4】拓展:kubeconfig文件 1.3、授权【1】什么是RBAC&#xf…

rust 注释文档生成 cargo doc

rust的cargo文档生成 只需要在每个函数写清楚注释,就可以自动生成文档,很方便 即不用写文档,又可以快速查看,是开发rust的必备技能 rust安装和开发环境配置,可以参考:链接 1.写注释的方法 连续三个 \ 即…