1 原则

在进行任何渗透测试之前,对目标进行 external reconnaissance 可以带来很多好处。这可以起到多种不同的作用,例如:

  • 验证客户在范围文档中提供的信息
  • 确保在远程工作时,你正在针对正确的范围采取行动
  • 寻找任何公开可访问的信息,这些信息可能会影响你的测试结果,例如泄露的凭证

在外部侦察过程中,有几个关键点是我们需要关注的。这些信息可能并非总是公开可获取,但了解现有情况是明智之举。如果在渗透测试中遇到瓶颈,回顾通过被动侦察可能获取的信息,可以给我们提供继续前进的思路,例如可能用于访问 VPN 或其他外部服务的密码破解数据。下表突出了我们在项目这个阶段需要搜索的“ What ”内容。

Data Point 数据点 Description 描述
IP Space 有效的 ASN 用于我们的目标,组织面向公众的基础设施、云存在和托管提供商使用的网段,DNS 记录条目等。
Domain Information 根据 IP 数据、DNS 和网站注册信息。谁管理该域名?我们的目标是否有任何子域名?是否存在任何公开可访问的域名服务?(邮件服务器、DNS、网站、VPN 门户等。)我们能确定有哪些防御措施吗?(使用的 SIEM、防病毒软件、IPS/IDS 等。)
Schema Format 我们能发现该组织的电子邮件账户、AD 用户名,甚至密码策略吗?任何能帮助我们构建有效用户名列表的信息,以便测试对外部服务进行密码喷洒、凭证注入、暴力破解等测试。
Data Disclosures 对于数据泄露,我们将寻找公开可访问的文件(.pdf,.ppt,.docx,.xlsx 等)以获取任何有助于揭示目标的信息。例如,任何包含 intranet 站点列表、用户元数据、共享或其他环境中关键软件或硬件的已发布文件(例如,推送到公共 GitHub 仓库的凭证,PDF 元数据中的内部 AD 用户名格式等)。
Breach Data 任何公开发布的用户名、密码或其他关键信息,这些信息可以帮助攻击者获得立足点。

1.1 关键数据点

Data Point 数据点 Description 描述
AD Users 尝试列举可以用于密码喷洒的有效用户账户。
AD Joined Computers 关键计算机包括域控制器、文件服务器、SQL 服务器、Web 服务器、Exchange 邮件服务器、数据库服务器等。
Key Services Kerberos、NetBIOS、LDAP、DNS
Vulnerable Hosts and Services 任何可以快速见效的东西。(即容易利用并获取立足点的主机)

2 流量分析

当我们进入主机后,可以通过流量分析搜集信息

2.1 使用wireshark快速分析

重点重视ARP和MDNS数据包

2.2 无图形化信息收集

如果我们处于没有图形界面(这是典型的)的主机,我们可以使用 tcpdump、net-creds 和 NetMiner 等工具来执行相同的功能。我们还可以使用 tcpdump 将捕获保存为.pcap 文件,将其传输到另一台主机,并在 Wireshark 中打开它。

2.2.1 Tcpdump 输出

1
sudo tcpdump -i ens224

3 内网扫描

3.1 内外网简介

在拿到 webshell/meterpreter/beacon 后,想办法获得信息系统拿到系统权限,进入到网络系统内部之后收集内部网络的各种信息,获取内部网络有价值的人员、资产信息

3.2 信息收集

3.2.1 工作组信息收集

这部分主要针对当前控制的单台机器,目标是了解本机状态、寻找提权漏洞以及收集可用于横向移动的本地凭证。

3.2.1.1 用户信息

此部分用于弄清楚“我是谁”、“机器上有谁”、“我能干什么”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
:: 查看当前在线/登录的会话,常用于判断管理员是否在线,避免操作冲突被发现
query user
qwinsta

:: 查看本机所有本地用户账户
net user

:: 查看当前属于本地管理员组的用户,确认当前账户是否具有最高权限
net localgroup administrators

:: 确认当前自身的权限,并验证是否属于本地管理员组
net localgroup administrators && whoami

:: 【高频关键命令】查看当前用户的完整信息。
:: 重点关注 Mandatory Label (判断 UAC 级别,High为高权限)
:: 以及特权信息 (如是否拥有 SeImpersonatePrivilege 提权必备特权)
whoami /all

:: 查看系统保存的登录凭证 (Windows Credentials),可能会直接拿到其他机器的账密
cmdkey /l

:: 查看本地密码策略(了解密码长度、复杂度、锁定阈值,为后续爆破做准备)
net accounts

:: 通过 WMIC 获取所有本地用户的名称和 SID 号
wmic useraccount get name,SID

3.2.1.2 系统

用于收集操作系统版本、补丁情况(寻找提权EXP)、运行的进程等基础信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
:: 查看系统详细信息,重点关注 OS 版本、系统架构(x86/x64) 以及已安装的初始补丁
systeminfo

:: 快速查看系统版本号
ver

:: 查看系统环境变量,有时能在变量中发现写死的路径或凭证
set

:: 查看当前运行的进程及其对应的服务,常用于寻找杀软、特定业务服务
tasklist /svc

:: 查找指定目录下及子目录下未隐藏的 exe 文件,用于寻找本地安装的第三方软件或遗留工具
dir /s *.exe

:: 【提权关键】快速、详细地查看已安装的系统补丁(KB号),用于对比提权漏洞库
wmic qfe get Caption,Description,HotFixID,InstalledOn

:: 查看系统的自启动项,常用于寻找权限维持(后门)的挂载点
wmic startup get command,caption

3.2.1.3 网络信息

用于了解当前机器的网络位置、出网情况以及与其他机器的连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
:: 查看基础网络配置 (IP、子网掩码、网关)
ipconfig

:: 查看详细网络配置,重点关注 DNS 服务器(在域环境中,DNS通常就是域控)
ipconfig /all

:: 查看当前活动的网络连接及对应的 PID,寻找内网其他存活服务或判断是否出网
netstat -ano

:: 查看内网 ARP 缓存表,这是被动发现同网段存活主机的最佳方式,不产生扫描流量
arp -a

:: 查看本机路由表,判断是否存在多网卡、多网段(双宿主主机)
route print

:: 查看本机的共享目录,寻找敏感文件或确认是否存在可写的共享
net share

:: 查看连接到本机的远程 Session(需要管理员权限),看谁连过这台机器
net session

:: 磁盘映射
net use K: \\192.168.1.10\c$

3.2.1.4 防火墙信息

判断端口转发和反弹 Shell 是否会受到限制。

1
2
3
4
5
:: 查看防火墙状态 (适用于 Windows Server 2003 及更早版本)
netsh firewall show state

:: 查看所有网络配置文件(域、专用、公用)的防火墙状态 (适用于 Windows Server 2008 及以后版本)
netsh advfirewall show allprofiles state

3.2.1.5 RDP远程桌面

用于判断是否可以通过图形化界面接入,以及确认 RDP 是否被修改了默认端口。

1
2
3
4
5
:: 查看 RDP 服务是否开启 (回显 0x0 为开启,0x1 为关闭)
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

:: 【关键】查看 RDP 的实际监听端口,很多企业会修改默认的 3389 端口。回显为十六进制,需自行转十进制(如 0xd3d 即为 3389)
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

3.2.1.6 代理信息

如果目标机器不出网,检查代理配置是寻找出网途径的重要手段。

1
2
:: 查看当前用户的 IE/系统全局代理配置,可能会发现内网的代理服务器 IP 和端口
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

3.2.1.7 Wifi密码

对于笔记本电脑或带有无线网卡的台式机,获取 WiFi 密码可用于突破物理边界。

1
2
3
4
5
:: 查看当前机器曾经连接过的所有 WiFi SSID 名称
netsh wlan show profiles

:: 查看指定 WiFi 的明文密码 (将“这里填WIFI名称”替换为上一步获取的 SSID)
netsh wlan show profile name="这里填WIFI名称" key=clear

3.2.1.8 回收站信息

常常能捡漏发现管理员删除的敏感文件(如密码本、配置文件)。

1
2
:: 遍历系统回收站的物理目录内容。回收站通常位于 C:\$Recycle.Bin,每个用户按 SID 分配独立的子目录。
cmd.exe /c "dir /a /s C:\$Recycle.Bin"

3.2.1.9 Chrome浏览器信息

浏览器往往保存着各种内部系统、OA、邮箱的明文密码。

1
2
3
4
5
6
:: 路径:包含保存的密码的 SQLite 数据库
%LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data

:: 思路补充:
1. 单纯拷贝 Login Data 无法直接读取,因为被 DPAPI 加密。
2. 需要一并获取 Local State 文件(包含加密密钥)或使用 Mimikatz (`dpapi::chrome`) / HackBrowserData 等工具在目标机器上直接导出,或打包相关文件离线解密。

3.2.1.10 Powershell信息收集

PowerShell 是现代渗透测试的利器,以下为基础环境探测。

1
2
3
4
5
6
7
8
9
# 查看当前的 PowerShell 执行策略(如果是 Restricted,可能需要绕过才能运行 ps1 脚本)
Get-ExecutionPolicy

# 使用 PowerShell 获取系统硬件及基本信息
Get-WmiObject -Class Win32_ComputerSystem

# 获取本地用户和组(替代 net user / net localgroup 的现代方法)
Get-LocalUser
Get-LocalGroup

3.2.1.11 内网信息收集脚本


3.2.2 域信息收集

当确认机器处于域环境(如通过 ipconfig /all 看到主 DNS 后缀,或 net config workstation 看到域控名)后,收集的重心将转向 Active Directory。

3.2.2.1 Net组件

最基础、最原生的 Windows 命令,不需要额外安装工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
:: 查看当前计算机名、全名、登录的域等工作站基础信息
net config workstation

:: 查看域内所有的用户,用于初步评估域规模
net user /domain

:: 查看域内所有的安全组,重点寻找带有 "Admin", "IT", "Helpdesk" 等字眼的组
net group /domain

:: 【核心高价值】查看域管理员组内的成员,这是红队最终的攻击目标之一
net group "domain admins" /domain

:: 查看域控制器的计算机名
net group "domain controllers" /domain

:: 查看域密码策略(密码过期时间、锁定策略等,对域内用户进行密码喷洒前必看)
net accounts /domain

:: 查看当前网络中存在的域(可能存在多域、子域信任关系)
net view /domain

:: 查看当前域内的所有计算机列表
net view & net group "domain computers" /domain

:: 建立 IPC$ 隧道连接,用于后续利用 psexec / wmiexec 进行横向移动或访问隐藏共享
net use \\域控IP或主机名\ipc$ "密码" /user:域名\用户名

3.2.2.2 Dsquery

Windows Server 自带的 Active Directory 命令行工具,查询能力比 net 命令更强。

1
2
3
4
5
6
7
8
:: 查询目录中的所有普通用户
dsquery user

:: 查找目录中的 Active Directory 域控制器 (DC) / LDS 实例
dsquery server

:: 查询域内所有的计算机名称
dsquery computer

3.2.2.3 Other (其他高级查询)

涉及环境变量和 SPN(服务主体名称),主要用于高级域渗透手法(如 Kerberoasting)。

1
2
3
4
5
6
7
8
9
10
11
:: 查看当前用户登录认证的域控服务器名称
echo %logonserver%

:: 查看指定用户的 SPN 记录。SPN 是服务绑定到的账户的唯一标识符。
setspn -L administrator

:: 【Kerberoasting 前置操作】查询整个域内的所有 SPN 记录,寻找注册在普通域用户下的服务(这类服务账户更容易被破解出明文密码)
setspn -T domain.com -Q */*

:: 查看远程计算机(IP为目标IP)的运行进程,用于横向移动前评估目标机器上是否有杀软或分析人员
tasklist /S 远程IP /U domain\username /P 密码 /V

3.2.2.4 定位域控

在域渗透中,拿下域控 (DC) 就等于拿下了整个域,因此第一步往往是找出域控的 IP 和主机名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
:: 方法一:查看域时间。绝大多数情况下,域内的主时间服务器就是域控制器。同时返回域控的主机名。
net time /domain

:: 方法二:查看指定域的域控制器列表。返回域控的主机名。
nltest /dclist:yourdomain.com

:: 方法三:通过 DNS 结构查询。域控通常会注册 LDAP 服务的 SRV 记录,此命令最准确,可直接解析出域控的 IP 地址和名称。
nslookup -type=SRV _ldap._tcp.dc._msdcs.yourdomain.com

:: 方法四:查看网络配置。通常企业内网中,域控往往兼任 DNS 服务器,所以 ipconfig /all 中的首选 DNS 地址大概率就是域控 IP。
ipconfig /all

:: 方法五:查看当前登录会话是由哪台服务器验证的。
echo %logonserver%

3.2.3 bloodhouse绘图

可以通过bloodhound将信息下载绘图

1
proxychains4 bloodhound-python -u "XIAORANG-EXC01$" --hashes :9b2081c3dc250a9b0a55c54c4dcc9cbb -d xiaorang.lab -dc XIAORANG-WIN16.xiaorang.lab -c all --dns-tcp -ns 172.22.3.2 --auth-method ntlm --zip

3.3 主机扫描

在域内进行横向渗透时,首先要注意收集主机的端口和ip信息

1
net view /domain #查询域内主机信息

查询通讯

1
arp -a

发现主机

1
nbtscan -r 192.168.0.0/24

3.3.1 存活判断

3.3.1.1 常见命令

在获取了潜在的内网IP段或主机名后,首先要验证这些主机是否存活,以及当前控制的跳板机与目标之间的网络路由是否可达。

  • 基于 ICMP 协议 (常规 Ping) 最简单直接的方法,但实战中经常会遇到目标开启了 Windows 防火墙(默认拦截外部 Ping 请求)导致误判目标不存活。

    1
    ping 192.168.0.10
    • 批量化操作
      使用fping可以进行快速判断
      1
      fping -asgq 172.16.5.0/23
  • 基于 TCP/UDP 协议 (绕过禁 Ping) 当 ICMP 被拦截时,可以尝试向目标机器常见的开放端口(如 80, 445, 3389)发送 TCP/UDP 请求来判断主机是否存活。

    • 系统自带命令(如 PowerShell):
      1
      2
      # 测试目标机器的 445 端口是否可达
      Test-NetConnection -ComputerName 192.168.0.10 -Port 445
  • 基于DNS协议

    • 基于 DNS 的探测通常不直接向目标主机发请求,而是通过询问内网中的 DNS 服务器来侧面推断主机的存活状态。
      1
      2
      3
      4
      5
      # 使用内网 DNS 服务器 (192.168.0.2) 反查 192.168.0.10
      nslookup 192.168.0.10 192.168.0.2

      # 在 Linux 下使用 dig 进行反查 (-x)
      dig -x 192.168.0.10 @192.168.0.2
  • 基于 HTTP/HTTPS 协议的存活判断 (Web 探测)

    • Web 服务是企业内网部署最广泛的应用。只要我们向目标 IP 的 Web 端口(通常是 80, 443, 8080 等)发送一个 HTTP 请求,只要服务器返回了任何 HTTP 状态码,就绝对证明该主机当前是存活的。 注意:不需要返回 200 OK 才算存活。返回 401 Unauthorized (需要密码)、403 Forbidden (禁止访问)、302 Found (重定向) 甚至 500 Internal Server Error (服务器内部错误) 都能百分之百确认这台机器不仅开着机,而且还在运行 Web 服务。
      1
      2
      3
      # -I 发送 HEAD 请求,-m 3 设置超时时间为 3 秒
      curl -I -m 3 http://192.168.0.10
      curl -k -I -m 3 https://192.168.0.10 # -k 用于忽略 HTTPS 证书校验
  • Nmap 免 Ping 扫描:
    • nmap -Pn -sT -p 445 192.168.0.10

3.3.1.2 MSF命令

1
2
3
4
5
auxiliary/scanner/discovery/arp_sweep #arp扫描
auxiliary/scanner/discovery/udp_sweep #udp扫描
auxiliary/scaaner/netbios/nbhame #netbios扫描
auxiliary/scanner/snmp/snmp_enum #snmp扫描
auxiliary/scanner/smb/smb_version #smb扫描

3.3.2 端口判断

确认主机存活后,下一步是探测其开放的端口,以此推断目标运行的服务和操作系统。在内网横向移动中,为了降低被安全设备(IDS/IPS/态势感知)发现的风险,通常不建议进行暴力的全端口扫描(1-65535),而是针对特定的高危端口进行精准探测。

  • 内网高价值目标端口清单:
    • 文件共享与远程执行: 445 (SMB, 极易存在漏洞如永恒之蓝或用于 psexec), 135 (RPC), 139 (NetBIOS)
    • 远程运维登录: 3389 (RDP), 22 (SSH)
    • 域控核心服务: 53 (DNS), 88 (Kerberos), 389 (LDAP), 3268 (全局编录服务器)
    • 数据库服务: 1433 (MSSQL), 3306 (MySQL), 1521 (Oracle), 6379 (Redis 未授权访问)

3.3.2.1 常用端口扫描探测工具

  • Telnet / Netcat (nc): 系统常自带,适合单点、单端口快速验证。
    1
    nc -zv 192.168.0.10 445 3389
  • Nmap: 端口扫描界的行业标准,支持各种隐蔽扫描(如 SYN 半连接扫描 -sS)。
  • 综合型自动化工具 (如 fscan, kscan): 目前实战中最常用的工具,不仅能扫端口,还能顺带检测弱口令、常见 Web 漏洞和系统漏洞,极大提高横向效率。

3.3.2.2 MSF工具

1
2
3
4
5
auxiliary/scanner/portscan/ack #TCP ACK端口
auxiliary/scanner/portscan/ftpbounce #FTP bounce端口扫描
auxiliary/scanner/portscan/syn #SYN端口扫描
auxiliary/scanner/portscan/tcp #TCP端口扫描
auxiliary/scanner/portscan/xmas #TCP XMas端口扫描

3.3.3 nmap扫描

现在我们已经获得了网络中活动主机的列表,可以进一步枚举这些主机。我们希望确定每个主机正在运行哪些服务,识别关键主机(如 Domain Controllersweb servers ),并识别潜在的易受攻击主机以便稍后探测。由于我们关注的是 AD,在进行了广泛的扫描后,我们最好专注于通常与 AD 服务一起出现的标准协议,例如 DNS、SMB、LDAP 和 Kerberos 等。

3.3.4 代理服务器 (内网穿透 / 隧道技术)

在真实的内网渗透实战中,攻击者的物理机通常只能直接访问到外网的边界服务器(如 Web 服务器),而无法直接与深层内网中的机器(如域控所在的办公网段)进行通信。代理服务器的作用就是打通攻击机与深层内网的通信隧道(Pivoting/跳板),让攻击者的本地工具(如本地的 Nmap、Metasploit、BurpSuite)能够直接作用于内网目标。

  • 代理的主要模式:
    • SOCKS 代理 (正向/反向): 这是最常用的全局代理模式(推荐使用 SOCKS5)。建立后,攻击者在本地使用 Proxychains (Linux) 或 Proxifier (Windows) 挂载代理,即可像在内网一样直接访问任何内网 IP。
    • 端口转发 (Port Forwarding): 当不需要全局代理时,仅仅将内网机器的某个特定端口(例如将域控的 3389 端口)通过跳板机映射到攻击者公网 VPS 的某个端口上。
  • 实战主流隧道/代理工具:
    • Frp / Chisel: 目前最主流、性能极佳的代理工具,支持多平台,通常用于建立反向 SOCKS5 代理。
    • Neo-reGeorg: 经典的 HTTP 隧道代理。当目标边界服务器防火墙策略极其严格,只允许 80/443 端口出入站流量时,可以通过上传 JSP/PHP 网页脚本,利用 Web 流量复用来建立正向代理。
    • Metasploit 自带路由: 如果已经获取了 Meterpreter shell,可以使用 run autoroute -s 命令结合 auxiliary 的 SOCKS 模块快速搭建代理。

3.4 防御扫描

3.4.1 获取杀软信息

在执行敏感操作(如抓密码、传木马)前,必须确认防线。

1
2
:: 通过 WMIC 精准获取杀毒软件名称及状态(比 tasklist 盲猜更准确)
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState,instancename

3.4.1.1 检查Microsoft Defender

3.4.1.1.1 检查Defender 状态的 Get-MpComputerStatus

Windows Defender(在 Windows 10 2020 年 5 月更新后也称为 Microsoft Defender)多年来有了很大的改进,默认情况下会阻止 PowerView 等工具。

我们可以使用内置的 PowerShell cmdlet Get-MpComputerStatus 来获取当前的 Defender 状态。

3.4.1.1.2 AppLocker

应用程序白名单是一份经批准的软件应用程序或可执行文件的列表,允许它们存在于系统上并运行。其目的是保护环境免受有害恶意软件和不符合组织特定业务需求的未批准软件的侵害。

AppLocker 是微软的应用程序白名单解决方案,它赋予系统管理员控制用户可以运行哪些应用程序和文件的能力。

它对可执行文件、脚本、Windows 安装器文件、DLL、打包应用程序和打包应用程序安装器提供了细粒度的控制。

通常,组织会阻止 cmd.exe 和 PowerShell.exe 以及对某些目录的写入访问,但所有这些都可以被绕过。组织还经常专注于阻止 PowerShell.exe 可执行文件,但会忽略其他 PowerShell 可执行文件位置,如 %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exePowerShell_ISE.exe 。在下面显示的 AppLocker 规则中,我们可以看到这种情况。所有域用户都不允许运行位于以下路径的 64 位 PowerShell 可执行文件:

3.4.1.1.2.1 使用 Get-AppLockerPolicy cmdlet
1
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

3.4.2 PowerShell限制语言模式

1
$ExecutionContext.SessionState.LanguageMode

3.4.3 LAPS

微软本地管理员密码解决方案(LAPS)用于随机化和轮换 Windows 主机上的本地管理员密码,并防止横向移动。

我们可以枚举哪些域用户可以读取已安装 LAPS 的机器的 LAPS 密码集,以及哪些机器未安装 LAPS。

LAPSToolkit 通过多种功能极大地简化了这一过程。其中之一是解析所有启用 LAPS 的计算机的 ExtendedRights 。这将显示专门委派读取 LAPS 密码的组,这些组通常是受保护组中的用户。一个将计算机加入域的帐户会获得该主机的 All Extended Rights ,这个权限使该帐户能够读取密码。枚举可能会显示一个可以读取主机 LAPS 密码的用户帐户。这可以帮助我们针对可以读取 LAPS 密码的特定 AD 用户。

3.4.3.1 使用 Find-LAPSDelegatedGroups

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Find-LAPSDelegatedGroups

OrgUnit Delegated Groups
------- ----------------
OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\Domain Admins
OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\LAPS Admins
OU=Workstations,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\Domain Admins
OU=Workstations,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\LAPS Admins
OU=Web Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\Domain Admins
OU=Web Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\LAPS Admins
OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\Domain Admins
OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\LAPS Admins
OU=File Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\Domain Admins
OU=File Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\LAPS Admins
OU=Contractor Laptops,OU=Workstations,DC=INLANEF... INLANEFREIGHT\Domain Admins
OU=Contractor Laptops,OU=Workstations,DC=INLANEF... INLANEFREIGHT\LAPS Admins
OU=Staff Workstations,OU=Workstations,DC=INLANEF... INLANEFREIGHT\Domain Admins
OU=Staff Workstations,OU=Workstations,DC=INLANEF... INLANEFREIGHT\LAPS Admins
OU=Executive Workstations,OU=Workstations,DC=INL... INLANEFREIGHT\Domain Admins
OU=Executive Workstations,OU=Workstations,DC=INL... INLANEFREIGHT\LAPS Admins
OU=Mail Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\Domain Admins
OU=Mail Servers,OU=Se

3.4.3.2 使用 Find-AdmPwdExtendedRights

The Find-AdmPwdExtendedRights 检查每个启用 LAPS 的计算机上任何具有读取访问权限的组以及具有 “所有扩展权限” 的用户的权限。具有 “所有扩展权限” 的用户可以读取 LAPS 密码,并且可能比委托组中的用户受到的保护较少,因此值得检查。

1
2
3
4
5
6
7
8
9
10
Find-AdmPwdExtendedRights

ComputerName Identity Reason
------------ -------- ------
EXCHG01.INLANEFREIGHT.LOCAL INLANEFREIGHT\Domain Admins Delegated
EXCHG01.INLANEFREIGHT.LOCAL INLANEFREIGHT\LAPS Admins Delegated
SQL01.INLANEFREIGHT.LOCAL INLANEFREIGHT\Domain Admins Delegated
SQL01.INLANEFREIGHT.LOCAL INLANEFREIGHT\LAPS Admins Delegated
WS01.INLANEFREIGHT.LOCAL INLANEFREIGHT\Domain Admins Delegated
WS01.INLANEFREIGHT.LOCAL INLANEFREIGHT\LAPS Admins Delegated

3.4.3.3 使用 Get-LAPSComputers

我们可以使用 Get-LAPSComputers 函数来搜索密码过期时启用了 LAPS 的计算机,甚至如果用户有访问权限,还可以搜索明文随机密码

4 识别用户

如果我们的客户没有提供用于开始测试的用户(这种情况很常见),我们需要找到一种方法来在域中建立立足点,方法是通过获取清晰的文本凭证或域用户的一个 NTLM 密码哈希,或者在加入域的主机上获取 SYSTEM shell,或者在域用户上下文中获取一个 shell。

在内部渗透测试的早期阶段,获取具有凭证的有效用户至关重要。这种访问权限(即使是最低级别)也打开了进行枚举甚至攻击的许多机会。

4.1 Kerbrute

Kerbrute 可以作为更隐蔽的域账户枚举选项。它利用了 Kerberos 预认证失败通常不会触发日志或警报的事实。我们将结合使用 Kerbrute 和 Insidetrust 的 jsmith.txtjsmith2.txt 用户列表。

这个仓库包含许多不同的用户列表,在从非认证视角尝试枚举用户时非常有用。我们可以将 Kerbrute 指向之前找到的 DC,并给它一个单词列表。该工具运行快速,我们将获得结果,让我们知道找到的账户是否有效,这为后续在本模块中我们将深入探讨的密码喷洒等攻击提供了一个很好的起点。

1
kerbrute userenum -d INLANEFREIGHT.LOCAL --dc 172.16.5.5 jsmith.txt -o valid_ad_users


4.2 Token 窃取与利用

令牌是系统的临时密钥,相当于账号密码,用来决定是否允许这次请求和判断是属于哪个用户的,它允许你在不提供账号密码或者其他凭证的情况下,访问网络和系统资源。令牌最大的特点就是随机性、不可预测性

假冒令牌可以假冒一个网络中的另一个用户进行各类操作,所以当一个攻击者需要域管理员的操作权限时,需要通过假冒域管理员的令牌进行攻击

令牌的种类

  • 访问令牌(Access token):表示访问控制主体的系统对象
    • Delegation Token:授权令牌,是交互式的会话(例如本地用户直接登录、远程桌面登录访问)
    • Impresonation Token:模拟令牌。是非交互式的会话(例如使用net use访问共享文件夹)
  • 会话令牌(Session token):是交互会话中唯一的身份标识符
  • 密保令牌(Servurity token):又叫做认证令牌或硬件令牌,是一种计算机身份的物理设备

    4.2.1 Access Token的窃取与利用

    AccessToken的窃取与利用需要administorator管理员权限,也就是说要提权

窃取方法:

  • incofnito.exe程序
  • InvokeTokenManipulat.ps1脚本
  • MSF里的incognito模块

4.2.1.1 incognito

https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip

AccessToken的列举(需要administrator权限)

4.2.1.2 窃取进程

除了可以伪造令牌,也可以从进程里窃取令牌,首先使用ps列出进程,然后使用steal_token pid窃取令牌就有对应权限