信息收集
当我们拿到一台或多台可控的主机时,需要对当前主机进行信息收集,核心就是发现更多的目标和收集各种密码。
总结: 拿到一台机器后,尝试上线到C2,这里判断一下是否出网,然后看一下是否有域,再查一下网段信息,尽量扩大后续目标范围,最后再去机器上翻文件、找密码(本机密码、浏览器密码、各种服务密码)、找敏感进程等。
主机信息
当前shell主机的信息。
是否出网
在出网的情况下,方便上线到C2,也方便做内网穿透,更容易进行后续操作。
- TCP/HTTP出网:
powershell curl http://baidu.com
- DNS出网:
nslookup baidu.com
- ICMP出网:
ping baidu.com
、tracert baidu.com
是否有域
ipconfig
可以查看当前机器是否处于内网、是否有域、当前内网网段、DNS地址等等;如果主DNS后缀有内容,就说明在域内。
ipconfig /all # 看主DNS后缀
nslookup <主DNS后缀> # 获取DNS服务器的IP地址,一般是DC
systeminfo
查看系统详细信息的时候,可通过“域”字段来判断是否在域内,如果是WORKGROUP则说明是工作组。
systeminfo | findstr "域:"
systeminfo | findstr "Domain:"
查询工作站时,如果”工作站域“显示WORKGROUP则说明是工作组。
net config workstation
网段信息
为了寻找更多的目标,比如当前是10.0.0.0的网段,不知道其他的网段,如果直接去全局扫的话,影响太大。
此外通过网段信息也可以找到跨网段的机器,这样可以扩大攻击范围,如从DMZ进入核心内网等。
Windows:
ipconfig /all
netstat -ano
arp /a
tracert -d -h 10 ip
route print
type C: \Windows\System32\drivers\etc\hosts
wevtutil qe Security /q:"*[System[(EventID=4624)]]" /rd:true /f:text | findstr /C:"源网络地址:" | findstr /V /C:"127.0.0.1" /C:"-" /C:"::1" # windows日志查看登陆记录
Linux:
ifconfig
netstat -antlp
arp
traceroute
last
ip addr
cat /etc/hosts
route
其他:
比较笨的办法,全局ping网关
# linux
for i in 192.168.{1..254}.1; do if ping -c 1 -w 1 $i &>/dev/null; then echo $i is alived; fi; done
# windows
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.%I.1 | findstr "TTL="
各种密码
- 本机hash(mimikatz)
- 浏览器密码(LaZagne)
- 配置文件中的各种密码,如mysql、sqlserver、redis、VPN等服务的密码
- 应用中的各种密码,如xshell、navicat等
- Wi-Fi密码(
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
)
敏感文件
多翻一翻机器上的文件,除了密码外,万一有其他重要的敏感信息,如拓扑图、通讯录、集群等等。
Windows
dir /a /s /b D:\"*conf*" dir /s /b "*密码*" "*登录*" "*资产*" "*VPN*" "*Svn*" "*Git*" "*交接*" "*离职*" "*网络*" "*后台*" "*拓扑*" "*邮箱*" "*工资*" "*管理员*" "*巡检*" findstr /I /c:"user=" /c:"pass=" /c:"login=" /c:"uid=" /c:"pwd=" /si *.conf *.asp *.php *.jsp *.aspx *.cgi *.xml *.ini *.inf *.txt *.cgi
Linux
find / -name "*.properties" | xargs egrep -i "user|pass|pwd|uname|login|db_" grep -rli "user|pass|pwd|uname|login|db_" ./
进程列表
通过进程列表,可以看到运行的软件和服务,如邮件客户端、VPN客户端等,从而获取到敏感信息,甚至利用第三方应用进行提权。
tasklist /svc
wmic process list brief
当然也可以看看杀软,可通过在线网站【Windows杀软在线查询】进行对比匹配。
其他
这一块感觉都不是特别重要了,也不是刚需,可以根据需求查对应的信息。
当前SID
whoami /user
whoami /all
当前用户/组和权限
net user
net user xxx
net user xxx /domain # 域内
net localgroup administrators
安装软件列表
查看目标主机上安装的第三方应用有哪些,是否可以用来留后门等。
wmic product get name,version
powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name
开机启动项
wmic startup get command,caption
计划任务
schtasks /query /fo LIST /v
服务列表
wmic service list brief
net start
post/windows/gather/enum_applications # msf
RDP
查看RDP的端口( 0xd3d
表示3389
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
环境变量
set
在线用户
query user
qwinsta
quser
操作系统版本
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
echo %PROCESSOR_ARCHITECTURE% # 架构
是否为虚拟机
# msf
post/windows/gather/checkvm
补丁信息
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn
可以去Windows提权辅助工具1或者Windows提权辅助工具2来查询可用的提权补丁。
共享信息
查看本机共享列表和可访问的域共享列表
net share
wmic share get name,path,status
wmic share get /format:list
# List shares on a remote PC
wmic /node: COMPUTER_NAME share get
DNS缓存记录
ipconfig /displaydns
防火墙配置
netsh firewall show config
netsh firewall show state # 防火墙状态
代理信息
如果有代理可以看到 ProxyServer
字段
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
域内信息
域内的所有查询都是通过LDAP协议去AD进行查询的,而这个查询需要经过权限认证,所以只有域用户才拥有这个权限,当域用户运行查询命令时,会自动使用Kerberos协议进行认证,无须额外输入账号和密码。
域内组
通过域内组可以查到很多的信息,如域内主机、域内用户、域控等。
查看域内组
net group /domain
其中系统自带的常见组如下:
Domain Admins
:域管理员组。Domain Computers
:域内机器。Domain Controllers
:域控制器。Domain Guest
:域访客组,权限较低。Domain Users
:域用户。Enterprise Admins
:企业系统管理员用户。
在默认情况下,Domain Admins
和Enterprise Admins
对域内所有域控制器有完全 控制权限
查询组内的对象
net group "Domain Admins" /domain # 域管列表
net group "Domain Controllers" /domain # 域控列表
net group "Domain Users" /domain # 域内用户列表, net user /domain 平替
net group "Domain Computers" /domain # 域内主机列表
定位域控
在真实环境中,一般存在两台或两台以上的域控制器,1台作为主域控,1台作为备份域控;备份域控主要是在主域控瘫痪时,为整个域继续提供正常的服务。
nltest
命令用于在 Windows 系统上执行各种与域相关的测试和操作,包括获取当前计算机的域控制器信息。
nltest /DCLIST:org.gm7
nltest /DSGETDC:org.gm7
nltest /DNSGETDC:org.gm7
- 使用
nslookup
命令查询 SRV 记录的语法,其目的是查找与 LDAP 服务相关的 SRV 记录。
nslookup -type=SRV _ldap._tcp
- 查询域控的时间
net time /domain
- 一般情况下DNS服务会搭建在DC上,所以DNS服务器就是DC
ipconfig /all | findstr /R "DNS Servers"
ipconfig /all | findstr /R "DNS 服务器"
- 域内用户组
Domain Controllers
中的对象就是DC
net group "Domain Controllers" /domain
- 通过SPN定位到开放了特定服务的机器,一般就会是DC
setspn -T org.gm7 -Q */* | findstr "DNS"
setspn -T org.gm7 -Q */* | findstr "ldap"
- 如果上述的都定位不到DC,那么可以尝试寻找开放了88(Kerberos),389(LDAP),53(DNS)端口的服务器。
定位到DC后,如果拿到的是机器名,可以使用ping获取到具体的IP地址。
ping -n 1 PDC
定位域管
域管理员可以上域内的任意机器,包括域控,换句话说,拿到了域管账号就相当于拿下了整个域。
有的域成员机器上登录过域管账号,当拿下这一台机器后 ,就可以尝试从内存中读取明文密码或者hash,这个时候既有域控的地址,也有域管身份凭证,就可以内网漫游了。
所以我们要定位域管在哪些机器上登陆过。常用来定位域内管理员的渠道有两个,一是日志,二是会话:
- 日志是指本地机器的管理员日志,可以使用脚本或
wevtutil
导出查看。 - 会话是指域内每个机器的登录会话,可以匿名查询, 无须权限,可以使用
netsess.exe
或PowerView
等工具查询。
使用powerview的
Find-DomainUserLocation
模块(Invoke-UserHunter
平替),枚举域内每台机器来寻找域管。PS C:\Users\d4m1ts\Desktop\Recon> Import-Module .\PowerView.ps1 PS C:\Users\d4m1ts\Desktop\Recon> Find-DomainUserLocation UserDomain : ORG UserName : Administrator ComputerName : DESKTOP-9CAT508.org.gm7 IPAddress : 172.16.93.2 SessionFrom : SessionFromName : LocalAdmin :
使用psloggedon来枚举当前机器或指定机器登陆了哪些用户。
C:\Users\d4m1ts\Desktop>PsLoggedon64.exe PsLoggedon v1.35 - See who's logged on Copyright (C) 2000-2016 Mark Russinovich Sysinternals - www.sysinternals.com Users logged on locally: 2024/4/9 10:01:01 ORG\d4m1ts <unknown time> ORG\Administrator No one is logged on via resource shares. C:\Users\d4m1ts\Desktop>PsLoggedon64.exe \\PDC PsLoggedon v1.35 - See who's logged on Copyright (C) 2000-2016 Mark Russinovich Sysinternals - www.sysinternals.com Users logged on locally: <unknown time> ORG\Administrator Unable to query resource logons
SPN扫描
之前介绍过,SPN(Service Principal Name)是Kerberos身份验证中用于标识特定服务实例(如HTTP、SMB、MySQL)的唯一名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。
因此可通过SPN发现一些敏感的服务,但需要注意的是,SPN结果的服务不一定是存活的。
setspn -Q */* # 查看当前域内所有的SPN
setspn -T org.gm7 -Q */* # 指定域查询SPN
setspn -L d4m1ts # 查找指定用户的SPN
一些常用的定位敏感服务。
# 定位数据库相关服务
setspn -T org.gm7 -Q */* | findstr "MSSQLSvc"
setspn -T org.gm7 -Q */* | findstr "oracle"
# 定位LDAP服务器
setspn -T org.gm7 -Q */* | findstr "ldap"
# 定位邮件服务器
setspn -T org.gm7 -Q */* | findstr "exchangeMDB"
setspn -T org.gm7 -Q */* | findstr "SMTPSVC"
setspn -T org.gm7 -Q */* | findstr "IMAP"
setspn -T org.gm7 -Q */* | findstr "POP3"
# 定位WEB服务器
setspn -T org.gm7 -Q */* | findstr "HTTP"
setspn -T org.gm7 -Q */* | findstr "HTTPS"
# 定位DNS服务器
setspn -T org.gm7 -Q */* | findstr "DNS"
# 定位文件服务器
setspn -T org.gm7 -Q */* | findstr "ftp"
setspn -T org.gm7 -Q */* | findstr "nfs"
# 定位开启远程连接服务服务器
setspn -T org.gm7 -Q */* | findstr "TERMSRV" >>> PerfLogs rdp .txt
setspn -T org.gm7 -Q */* | findstr "WSMAN" >> C: PerfLogs winrm .txt
setspn -T org.gm7 -Q */* | findstr "vnc" >> C: PerfLogs vnc .txt
setspn -T org.gm7 -Q */* | findstr "vpn" >> C: PerfLogs vpn .txt
setspn -T org.gm7 -Q */* | findstr "tnetdgines" >> C: PerfLogs tnetdgines .txt
域信任关系
nltest /domain_trusts
dsquery
dsquery)是一个内置在Windows Server 2008中的命令行工具,在安装了活动目录域服务(AD DS)服务器(域控)上可用,可以用来查询AD中各种对象。
dsquery computer ----- 寻找AD中的计算机
dsquery server ----- 寻找AD中的域控制器
dsquery user ----- 寻找AD中的用户
dsquery contact ----- 在AD中查找与指定的搜索条件相匹配的联系人
dsquery subnet ----- 寻找AD中的子网
dsquery group ----- 寻找AD中的群组
dsquery ou ----- 寻找AD中的组织单位
dsquery site ----- 寻找AD中的站点
dsquery quota ----- 寻找AD中的配额规格
dsquery partition ----- 寻找AD中的磁盘分区
dsquery * ----- 使用标准的LDAP查询在AD中寻找任何对象
dsquery server –domain Yahoo.com | dsget server–dnsname –site ---搜索域内域控制器的DNS主机名和站点名
dsquery computer domainroot –name *-xp –limit 10 ----- 搜索域内以-xp结尾的机器10台
dsquery user domainroot –name admin* -limit 10 ---- 搜索域内以admin开头的用户10个
其他
一般拿到域控权限后,需要统计主机数量来证明数据量,可在DC中使用如下命令统计:
dsquery computer -limit 0 | find /c /v ""
powershell.exe -Command "(Get-ADComputer -Filter *).Count"
内网探测
内网探测是内网渗透中不可或缺的一个环节,在扫描的时候,应尽量避免使用Namp等工具进行暴力扫描,也不要在目标机器上使用图形化的工具, 而要尽量使用目标系统自带的各种工具,推荐使用PowerShell脚本。
特定服务探测
使用 CrackMapExec 探测常用的服务。【推荐】
cme smb 172.16.93.2/24 # 根据 SMB 探测服务器 cme ssh 172.16.93.2/24 # 根据 SSH 探测服务器 cme ldap 172.16.93.2/24 # 根据 LDAP 探测服务器 cme mssql 172.16.93.2/24 # 根据 MSSQL 探测服务器 cme winrm 172.16.93.2/24 # 根据 WINRM 探测服务器
使用MSF探测常用的服务,也可以通过端口探测。
# module列表 auxiliary/scanner/http/http_version auxiliary/scanner/smb/smb_version auxiliary/scanner/ftp/ftp_version auxiliary/scanner/ssh/ssh_version auxiliary/scanner/telnet/telnet_version auxiliary/scanner/mysql/mysql_version auxiliary/scanner/db2/db2_version
多网卡机器探测
在内网渗透过程中,目标网络中一般是划分不同区域使用防火墙进行隔离的。在日常运维过程中,运维人员为了方便操作,会将特定主机配置多网卡以访问不同网络区域的机器。
假如机器A通10.1.0.1/24段,但是不通10.1.1.1/24段,而机器B可以同时通10.1.0.1/24段和10.1.1.1/24段,那么寻找并拿下机器B就可以实现跨网段,也就可以发现更多的攻击目标,或者说更敏感的数据。(如从DMZ进入到内网)
可使用工具 SharpOXID-Find 进行探测。
C:\Users\d4m1ts\Desktop>SharpOXID-Find.exe -c 172.16.93.1/24
[+] ip range 172.16.93.1 - 172.16.93.254
[*] Retrieving network interfaces of 172.16.93.2
[>] Address:DESKTOP-9CAT508
[>] Address:172.16.93.2
[>] Address:fd15:4ba5:5a2b:1008:4446:59a:f9a4:2af8
[>] Address:fd15:4ba5:5a2b:1008:44a4:e53c:8e4:d1dd
[*] Retrieving network interfaces of 172.16.93.15
[>] Address:PDC
[>] Address:172.16.93.15
[>] Address:fd15:4ba5:5a2b:1008:dcd:73da:d2f0:3ba1
Finish!
NetBIOS探测
通过NetBIOS协议,可以获取内网中的主机名、IP地址以及其他相关信息。
可使用命令行工具 nbtscan 进行探测。
C:\Users\d4m1ts\Desktop>nbtscan.exe 172.16.93.1/24
Doing NBT name scan for addresses from 172.16.93.1/24
IP address NetBIOS Name Server User MAC address
------------------------------------------------------------------------------
172.16.93.15 PDC <server> <unknown> 00-0c-29-f1-fc-2a
ARP探测
使用MSF的arp_sweep模块。
auxiliary/scanner/discovery/arp_sweep
ICMP探测
依次对内网中的每个IP地址执行 ping命令,可以快速有效地找出内网中所有存活的主机。
# windows
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.174.%I | findstr "TTL="
for /l %i in (1,1,255) do @ping 192.168.100.%i -w 1 -n 1 | find /i "ttl"
# linux
for i in 10.28.98.{1..254}; do if ping -c 1 -w 1 $i &>/dev/null; then echo $i is alived; fi; done
端口探测
上面的NetBIOS、ARP、ICMP探测大多数情况下只能探测主机的存活,并无法探测到主机上有哪些服务,而我们知道要进行横向肯定是对特定服务进行攻击,如NTLM认证、SMB、SqlServer、WEB等,因此要想全面的获取到攻击面就需要进行端口扫描。
使用MSF
search portscan auxiliary/scanner/portscan/ack normal No TCP ACK Firewall Scanner auxiliary/scanner/portscan/tcp normal No TCP Port Scanner auxiliary/scanner/portscan/syn normal No TCP SYN Port Scanner
使用PowerSploit中的
Invoke-Portscan.ps1
脚本Import-Module .\Invoke-Portscan.ps1 Invoke-Portscan -Hosts 172.16.93.1/24 -T 4 -TopPorts 25 -oA c:\windows\temp\res.txt Invoke-Portscan -Hosts 172.16.93.1/24 -T 4 -ports '445,1433,8080,3389,80,22' -oA c:\windows\temp\res.txt
综合工具
如果内网环境中没有防护,或者在客户授权加白的情况下进行测试,那么可以使用一些现成的工具进行大范围扫描。