《域环境渗透》04. 信息收集 & 系统命令
本系列侧重方法论,各工具只是实现目标的载体。
命令与工具只做简单介绍,其使用另见《软件工具录》。
本专栏文章侧重于对 Windows 工作组与域环境的渗透攻击手法。
1:内网操作环境
一般突破外网边界,控制目标机器的手段有两种:
- 通过漏洞,使用 Webshell 或其他远控工具进行连接
- 通过钓鱼或近源,使用 CobaltStrike 进行连接
所控制的目标网络环境可能为:
- 目标机器放在云上(这种情况基本无内网,除非找到关键信息)
- 目标机器在公司本地机房(这种就是内网环境)
获取某台主机的控制权后,根据权限分类可分为以下四种情况(可通过 whoami
命令查询):
- 本地普通用户
- 本地管理员用户
- 域内普通用户
- 域内管理员用户
在上述四种权限情况中,如果主机加入了域:
- 本地普通用户只能查询本地工作组的相关信息,不能查询域内信息
- 本地管理员用户和域内用户可以查询域内信息
内网信息主要包括公司的整个网络结构,是否为域,用户信息等。
2:工作组信息收集
2.1:基本信息收集
查询操作系统版本信息:
- 英文系统:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
- 中文系统:
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
查询系统架构:
echo %PROCESSOR_ARCHITECTURE%
查看电脑开机时间:
net statistics workstation
2.2:网络信息收集
获取本机的网络配置信息:
ipconfig /all
查询端口信息:
netstat -ano
查询共享列表:
- 方法 1:
net share
- 方法 2:
wmic share get name,path,status
查询路由信息:
route print
查询 ARP 信息:
arp -a
查询远程连接的计算机会话:
net session
查询已存储的无线网络配置文件:
netsh wlan show profiles
查找指定 WLAN 的信息和密码:
netsh wlan show profiles name="<SSID>" key=clear
- 示例:
netsh wlan show profiles name="HomeWiFi" key=clear
查看防火墙配置:
netsh firewall show config
查询防火墙是否开启:
netsh firewall show state
2.3:用户信息收集
查看当前用户:
whoami
查看所有本地用户:
- 方法 1:
net user
- 方法 2:
wmic useraccount get name,SID
查询所有本地用户组:
net localgroup
查询管理员组信息:
net localgroup administrators
2.4:软件服务信息
查看安装的软件及版本:
- 方法 1:
wmic product get name,version
- 方法 2:
powershell "Get-WmiObject -class win32_product | Select-Object -Property name,version"
查询杀软等信息:
wmic /node:localhost /namespace:\\root\securitycenter2 path antivirusproduct get displayname /format:list
查看进程信息:
- 方法 1:
tasklist
- 方法 2:
wmic process list brief
看当前进程对应的用户身份:
tasklist /v
查询本机运行的服务:
wmic service list brief
查看计划任务:
schtasks /query /fo LIST /v
查看开机启动项:
wmic startup get command,caption
2.5:其他信息收集
查询当前保存的凭据:
cmdkey /l
查询最近打开的文件:
dir %APPDATA%\Microsoft\Windows\Recent
查看补丁信息:
- 方法 1:
systeminfo
- 方法 2:
wmic qfe get Caption,Description,HotFixID,InstalledOn
3:域内信息收集
3.1:判断机器是否在域内
3.1.1:方法 1
查看当前网卡和 IP 信息:
ipconfig /all
一般情况下,如果计算机在域内,【主 DNS 后缀】项是一个域名;而工作组情况为空。
3.1.2:方法 2
查看系统详细信息:
systeminfo
一般情况下,如果计算机在域内,【域】项是一个域名;而工作组默认是 “ WORKGROUP ”。
3.1.3:方法 3
查看当前登录域及域用户:
net config workstation
一般情况下,如果计算机在域内,会显示域名;而工作组显示工作组名与主机名。
3.1.4:方法 4
查看域内时间:
net time /domain
执行命令后可能出现 3 种情况:
- 机器未加入域
- 提示 “ 找不到域控制器 ”
- 机器在域内,但当前用户是本地工作组用户
- 提示 “ 拒绝访问 ”
- 机器在域内,当前用户是域内用户
- 显示域控当前时间
3.2:基本信息收集
查看域 SID(去掉最后的用户 UID 即为域 SID):
whoami /all
查询域信任信息:
nltest /domain_trusts
查询域密码策略:
net accounts /domain
3.3:用户信息收集
查询所有域用户:
net user /domain
查看某个用户的详细信息:
net user <username> /domain
- 示例:
net user administrator /domain
查询域内所有用户组:
net group /domain
查看某个用户组的成员:
net group "<group name>" /domain
- 示例:
net group "domain admins" /domain
查询加入域的机器:
net group "domain computers" /domain
3.4:定位域控
得到域控机器名后,可以通过
ping
命令定位域控 IP。
查看域控制器组的成员:
net group "Domain Controllers" /domain
列出指定域中的所有域控:
nltest /DCLIST:<域名>
- 示例:
nltest /DCLIST:redteam.red
查看当前域的主域控制器:
netdom query pdc
通过 DNS SRV 记录查询 LDAP 服务信息(一般情况下,LDAP 服务器为主域控制器):
nslookup -type=SRV _ldap._tcp
查看当前时间(一般情况下,时间服务器为主域控制器):
net time /domain
3.5:定位域用户登录情况
要定位哪些账号登录了哪些机器,需要借助一些工具。
3.5.1:PsLoggedon.exe
简介:
PsLoggedon.exe 工具属于 PsTools 工具包,用于查看机器登录的用户。
工具本质是检测注册表中 HKEY_USERS 的 key 值、调用 NetSessionEnum 的 API 来判断谁登录过哪台机器。
如果无法读取注册表,效果会很差。
相关命令:
搜索网络邻居计算机,并显示用户是否登录:
PsLoggedon.exe \\<username>
查询登录过该机器的用户:
PsLoggedon.exe \\<computer name>
示例:
3.5.2:PVEFindADUser.exe
简介:
PVEFindADUser.exe 用于查找域用户登录的位置,以及谁在特定计算机上登录。
- 需要计算机支持 framework 2.0
- 需要以管理员权限运行
对于非本机的其他计算机,判断准确度可能存在问题。
相关命令:
查看当前域中用户与计算机登录情况:
PVEFindADUser.exe -current
示例:
3.5.3:PowerView.ps1
简介:
PowerView.ps1 脚本包含了一系列网络执行和 Windows 域枚举利用的功能。
使用时需要 PowerShell 导入脚本:Import-Module .\PowerView.ps1
相关命令:
获取域管理员的登录位置信息:
Import-Module .\PowerView.ps1
Invoke-UserHunter
示例:
4:内网主机发现
对于内网主机的发现,本质上是对 ICMP、ARP、NetBIOS 等协议的利用。
4.1:系统命令利用
使用 ping
命令配合 CMD 语法进行 C 段扫描:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.8.%I | findstr "TTL="
使用 arp
命令查看 ARP 缓存表信息:
arp -a
4.2:工具使用
- nbtscan
- fscan
- kscan
- PTscan
- CobaltStrike 插件
- Metasploit 内置功能
5:内网端口探测
利用 telnet
命令探测端口是否开放:
telnet <ip> <port>
工具使用:
- fscan
- kscan
- PTscan
- CobaltStrike 插件
- Metasploit 内置功能
6:其他敏感数据
内网的核心敏感数据包括:数据库信息、电子邮件信息、个人数据、企业业务数据、技术数据等。
可以说,价值较高的数据基本都在内网中。
高价值机器:
- 系统管理人员、财务、人事、业务人员的个人计算机
- 系统管理服务器
- 办公系统服务器
- 财务应用系统服务器
- 数据库服务器
- 文件服务器
- 产品源码服务器(Svn / Git 服务器)
- 电子邮件服务器
- 安全监控服务器
高价值文件:
- 站点源码备份文件
- 数据库备份文件
- 各种账号密码密码、令牌文件
其他数据:
- RDP 和 IPC 连接记录
- 无线 WiFi 密码
- 浏览器保存的密码、cookie、浏览记录
- 回收站中的信息
7:相关系统命令
7.1:查找文件
列出指定目录及其子目录下的所有指定文件:
1 | dir /a /s /b E:\T\"*.txt" |
7.2:查找文件内容
在当前目录及其子目录下的所有指定文件中,查找包含字符串 “ pass ” 的行(不区分大小写):
1 | findstr /s /i "pass" *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak > tmp.txt |
7.3:防火墙相关
查看防火墙配置:
netsh firewall show config
查询防火墙是否开启:
netsh firewall show state
关闭防火墙(Win 2003 及之前版本):
netsh firewall set opmode disable
关闭防火墙:
netsh advfirewall set allprofiles state off
允许指定程序进行 TCP/UDP 连接(Win 2003 及之前版本):
netsh firewall add allowedprogram "<file path>" "<rule name>" enable
- 示例:
netsh firewall add allowedprogram "C:\nc.exe" "Allow nc" enable
添加入站规则,允许指定程序进行 TCP/UDP 连接:
netsh advfirewall firewall add rule name="<rule name>" dir=in action=allow program="<file path>"
添加出站规则,允许指定程序进行 TCP/UDP 连接:
netsh advfirewall firewall add rule name="<rule name>" dir=out action=allow program="<file path>"
添加入站规则,允许指定端口进行 TCP 连接:
netsh advfirewall firewall add rule name="<rule name>" protocol=TCP dir=in action=allow localport=<port>
自定义防火墙日志储存位置:
netsh advfirewall set currentprofile logging filename "C:\temp\fw.log"
7.4:远程桌面相关
添加入站规则,允许 3389 端口进行 TCP 连接:
netsh advfirewall firewall add rule name="Allow Remote Desktop" protocol=TCP dir=in action=allow localport=3389
查看远程桌面连接是否开启:
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
启用远程桌面连接(Win 2003):
wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
启用远程桌面连接(Win 2008 & Win 2012):
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
启用远程桌面连接(Win 7):
reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
8:其他
8.1:相关工具
PsTools(包含 PsLoggedon.exe):
https://learn.microsoft.com/en-us/sysinternals/downloads/pstools
PVEFindADUser.exe:
https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
PowerSploit(包含 PowerView.ps1):
https://github.com/PowerShellMafia/PowerSploit/
nbtscan:
相关地址:http://www.unixwiz.net/tools/nbtscan.html
Github:https://github.com/resurrecting-open-source-projects/nbtscan
fscan:
https://github.com/shadow1ng/fscan
kscan:
https://github.com/lcvvvv/kscan
PTscan:
https://github.com/phantom0301/PTscan
8.2:参考资料
《浅谈内网信息收集之定位域管理员》:
https://www.cnblogs.com/lcxblogs/p/13992793.html
人生到处知何似,应似飞鸿踏雪泥。
——《和子由渑池怀旧》(宋)苏轼