内网信息收集概述#
对所处的网络环境进行判断
我是谁?—— 对当前机器角色的判断。
这是哪?—— 对当前机器所处网络环境的拓扑结构进行分析和判断。
我在哪?—— 对当前机器所处区域的判断。
收集本机信息#
手动搜集#
(1)查询网络配置#
ipconfig /all
(2)查询操作系统及软件的信息#
查看操作系统和版本信息
英文版
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
中文版
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
查看安装的软件及版本、路径等
wmic product get name,version
Powershell 版本:
powershell.exe "Get-WmiObject -class Win32_Product | Select-Object -Property name,Version"
(3)查询本机服务信息#
wmic service list brief
(4)查询进程列表#
tasklist
// 或者
wmic process list brief
常见杀毒软件进程如下
360sd.exe
360tray.exe
ZhuDongFangYu.exe
KSafeTray.exe
SafeDogUpdateCenter.exe
McAfee McShield.exe
egui.exe //NOD32
AVP.EXE // 卡巴斯基
avguard.exe // 小红伞
bdagent.exe //BitDefender
(5)查看启动程序信息#
wmic startup get command,caption
(6)查看计划任务#
schtasks /query /fo LIST /v
(7)查看主机开机时间#
net statistics workstation
(8)查询用户列表#
net user
// 获取本地管理员组成员:
net localgroup administrators
// 查看当前再线用户 (不行)
query user || qwinsta
(9)列出或断开本地计算机与所连接的客户端之间的会话#
需要管理员权限
net session
(10)查询端口列表#
netstat -ano
(11)查询补丁列表#
systeminfo
使用 wmic 命令查看安装在系统中的补丁:
wmic qfe get Caption,Description,HotFixID,InstalledOn
(12)查询本机共享列表#
net share
//wmic:
wmic share get name,path,status
(13)查询路由表及所有可用接口的 ARP 缓存表#
route print
arp -a
(14)查询防火墙相关配置#
关闭防火墙
//windows server 2003之前
netsh firewall set opmode disable
//Windows server 2003之后
netsh advfirewall set allprofile state off
查看防火墙配置
netsh firewall show config
修改防火墙配置
windows server 2003 之前允许指定程序全部连接
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
windows server 2003 之后的版本
//允许制定程序退出
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="c:\nc.exe"
//允许指定程序退出
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C:\nc.exe"
//允许3389端口放行
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
自定义防火墙日志的存储位置
netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
(15)查看代理配置情况#
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
(16)查询并开启远程连接服务#
查看远程连接端口
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
在 Windows server 2003 中开启 3389
wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
在 Windows server 2008 和 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
// 修改注册表方式
reg query "HKLM\System\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
自动搜集#
WMIC(Windows Management Instrumentation Command-Line,Windows 管理工具命令行)是最有用的 Windows 命令行工具
Windows XP 的低权限用户不允许访问 WMIC
Windows7 以上版本的低权限用户允许访问 WMIC 并执行相关查询操作
不仅可以管理本地计算机,还可以管理同一域内的所有计算机(需要一定权限),而且在被管理的计算机上不可事先安装 WMIC
书里提供了一个使用 WMIC 的脚本,执行上一节所有命令,并将结果写入 HTML 文件:
wmic_info.bat
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html
3、Empire 下的主机信息收集#
Empire 提供了用于收集主机信息的模块
查看本机用户、域组成员、密码设置时间、剪贴板内容、系统基本信息、网络适配器信息、共享信息等:
usemodule situational_awareness/host/winenum
execute
有管理员权限的情况下,查看目标主机事件日志、应用程序控制策略日志、RDP 登录信息、PowerShell 脚本运行和保存的信息等:
usemodule situational_awareness/host/computerdetails
查询当前权限#
1、查看当前权限
whoami
有三种情况:本地普通用户
、本地管理员用户
、域内用户
如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息;而本地管理员用户和域内用户可以查询域内信息。
域内的所有查询都是通过域控制器实现的(基于 LDAP 协议),而这个查询需要经过权限认证,所以,只有域用户才拥有这个权限;当域用户执行查询命令时,会自动使用Kerberos 协议进行认证,无需额外输入账号和密码。
本地管理员 Administrator 权限可以直接提升为 System 权限(使用 PsExec 等),因此,在域中,除普通用户外,所有的机器都有一个机器用户(用户名为机器名加上 $)。在本质上,机器的 system 用户对应的就是域里面的机器用户。所以,使用 System 权限也可以运行域内的查询命令。
2、获取域 SID
whoami /all
3、查询指定用户的详细信息
net user xxx /domain
没有管理员权限
--- 判断是否存在域 ---#
查看 dns 服务器#
域控制器
和DNS服务器
是否在同一台服务器上?(使用 nslookup 反向解析)
ipconfig /all
// 将查看到的 DNS 服务器用 nslookup 进行解析
nslookup burnchi.cc
查看系统详细信息#
systeminfo 中的域即域名、登陆服务器指的是域控制器。
systeminfo | findstr /B/C:"登录服务器" // 如果结果不为 **"WORKGROUP"** 则主机为域主机
查询当前登录域及登录用户信息#
只有 DC 才能执行
net group workstation
判断主域#
net time /domain
// 命令用于查看域内时间,同时也可以查看域控制器
执行结果有三种情况:
- 发生系统错误 5:存在域,但当前用户不是域用户 -
- 显示时间信息:存在域,且当前用户是域用户 -
- 找不到域控制器:不存在域
探测域内存活主机#
NetBIOS 快速探测#
前提
需要上传到目标主机使用。
NetBIOS 是局域网程序使用的一种 API,为程序提供了请求低级别服务的统一的命令集。NetBIOS 也是计算机的标识名,主要用于局域网中计算机的互访。
使用 nbtscan (http://www.unixwiz.net/tools/nbtscan.html)
nbt.exe 192.168.1.0/20
fscan 探测(推荐)#
fscan64.exe -h 10.0.0.0/24
使用管理员权限速度更快
使用 ICMP 探测#
对每个 IPping (速度超慢)
for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.0.0.%I | findstr "TTL="
ARP 扫描#
通过 ARPscan 工具扫描探测内网
arp.exe -t 192.168.1.0/20
Empire 中的 ARPscan 模块#
usemode situational_awareness/network/arpscan
execute
Nishang 中的 Invoke-ARPScan.ps1#
powershell.exe -exec bypass -Command "& (Import-module c:\windows\temp\Invoke-ARPscan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20)" >> c:\windows\temp\log.txt
type c:\windows\temp\log.txt
通过常规的 TCP/UDP 端口扫描探测内网#
上传 ScanLine 进行扫描#
scanline -h -t 22,80-90,110,445 -u 53,161 -O c:\windows\temp\log.txt -p 192.168.1.1-254 /b
fscan#
fscan64.exe -h 10.0.0.0/24
扫描域内端口#
需要关注的点:
- 端口的 Banner 信息 -
- 端口上运行的服务 -
- 常见应用的默认端口
Telnet(需要添加功能)#
telnet DC 22
fscan#
fscan64.exe -p 1-60000 -h 10.0.0.107
-p string
设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default "21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
Metasploit 端口扫描#
Metasploit 不用多说
use auxiliary/scanner/portscan/tcp
set ports 1-1000
set RHOST 192.168.1.1
set THREADS 10
run
其他#
还可以使用如 PowerSploit、NiShang 的 Invoke-portscan 脚本、nmap
然后一些漏洞的信息可以参考
http://www.securityfocus.com/bid
https://www.exploit-db.com/
收集域内信息#
本节的域内查询命令在本质上都是通过 LDAP 协议到域控制器上进行查询的,故需要域用户的权限,本地用户无法运行(除非是 System 用户)
在默认情况下,Domain Admins 和 Enterprise Admins 对域内所有域控制器有完全控制权限
命令如下:
查询域#
net view /domain
查询域内所有计算机#
net view /domain:HACKE
查询域内所有用户组列表#
net group /domain
查询所有域成员计算机列表#
net group "domain computers" /domain
获取域内密码信息#
net accounts /domain
域内信任信息#
nltest /domain_trusts
查找域控制器#
命令如下:
查看域控制器的机器名#
nltest /DCLIST:hacke
查看当前时间#
net time /domain
查看域控制器的主机名#
nslookup -type=SRV _ldap._tcp
查看域控制器组#
net group "Domain Controllers" /domain
查看主控制器#
可能在域控才能执行?
netdom query pdc
获取域内用户和管理员信息#
查询所有域用户列表#
net user /domain
获取域内用户的详细信息#
wmic useraccount get /all
// 查看存在的用户,但是这个只能在域控
或者安装了对应服务的主机
使用,否则会提示命令不存在
dsquery user
在 DC 执行
查找目录中的计算机#
dsquery computer
在 DC 执行
dsquery 命令#
查询本地管理员组用户#
域内 Domain Admins 组中的用户默认为域内机器的本地管理员用户
net localgroup administrators
查询域管理员用户组#
// 查询域管理员用户组
net group "domain admins" /domain
// 查询管理员用户组
net group "Enterprise Admins" /domain
定位域管理员#
在内网中,通常会部署大量的网络安全系统和设备,例如 IDS、IPS、日志审计、安全网关、反病毒软件等。
在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员权限。也就是说,当计算机被添加到域中,成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中。因此,域管理员组的成员均可访问本地计算机,且具备完全控制权限。
在获取了 Windows 域中的普通权限在进行横向渗透时,需要知道域内用户登录的位置,是否是任何系统 / 主机的本地管理员,以及所属组等信息。能够使用的工具有:psloggedon.exe、PVEFindADUser.exe、netness.exe、hunter、NetView、PowerView。
1、psloggedon.exe
能够通过此工具查看远程计算机的资源,也就是说能够查看目标主机有哪些账户在登录状态
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psloggedon
psloggedon.exe \DC
2、PVEFindADUser.exe
PVEFindADUser 能够用于查找活动目录用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户:本地用户、通过 RDP 登录的用户、用于运行服务和计划任务的用户。(这个工具需要.NET 3.5)
Windows Server 2012 安装.NET 3.5 可能不成功,需要指定安装源:https://www.cr173.com/soft/921507.html
下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
PVEFindADUser.exe <参数>
参数:
-h:显示帮助信息
-u:检查程序是否有新版本
-current [“username”]:如果仅指定了 - current 参数,将获取目标计算机上当前登录的所有用户;如果指定了用户名(Domain\Usemame),则显示该用户登录的计算机
-last [“username”]:如果仅指定了 - last 参数,将获取目标计算机的最后的登录用户;如指定了用户名(Domain\Usemame),则显示此用户上次登录的计算机。根据网络的安全策略,可能会隐藏最后的登录用户的用户名,此时使用该工具可能无法得到该用户名
-noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行 ping 命令
-taget:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主机;如果指定了此参数,则后跟由逗号分隔的主机名列表
3、NetView.exe
NetView 是一个枚举工具,使用 WinAPI 枚举系统,利用 NetSessionEnum 找寻登陆会话,利用 NetShareEnum 找寻共享,利用 NetWkstaUserEnum 枚举登录的用户。同时还能够查询共享入口和有价值的用户。
下载地址:https://github.com/mubix/netview
netview.exe <参数>
参数:
-h:显示帮助信息
-f aaa.txt:指定要提取主机列表的文件
-e aaa.txt:指定要排除的主机名的文件
-o aaa.txt:将所有输出重定向到指定的文件
-d aaa.txt:指定要提取主机列表的域 ° 如果没有指定’则从当前域中提取主机列表
-g group:指定搜索的组名。如果没有指定,则在 Domain Admins 组中搜索
-c:对已找到的共享目录 / 文件的访问权限进行检查
4、PowerView
PowerView 是 — 款 PowerShell 脚本,提供了辅助定位关键用户的功能
下载地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView
5、Empire
Empire 中也存在此类型的脚本:
usemodule situational_awareness/network/powerview/user_hunter
execute
6、Nmap 的 NSE 脚本
通过 Nmap 的 NSE 脚本获取远程机器的登陆会话
smb-enum-sessions.nse 获取域内主机的用户登录会话,查看当前是否有用户登录,无需管理员权限
smb-enum-domains.nse 对域控制器进行信息收集,可以获取主机信息用户、可使用密码策略的用户等
smb-enum-users.nse 可以使用此脚本对域控进行扫描
下载地址:https://nmap.org/nsedoc/scripts/smb-enum-sessions.html
十、查找域管理进程
在获取了管理员权限的系统中寻找域管理员登录进程,进而搜集域管理员的凭据
一个假设情况:
渗透测试人员在某个内网环境中获得了一个域普通用户的权限,首先通过各种方法获得当前服务器的本地管理员权限,然后分析当前服务器的用户登录列表及会话信息,知道哪些用户登陆了这台服务器。如果渗透测试人员通过分析发现,可以获取权限的登录用户都不是域管理员账户,同时没有域管理员组的用户登录这台服务器,就可以使用另一个账号并寻找该账号在内网的哪台机器上具有管理权限,再枚举这台机器上的登录用户,然后继续进行渗透测试,直至找到一个可以获取域管理员权限的有效路径为止。
有一篇参考:五种寻找 “Domain Admin” 运行的进程的方法
1、本机检查
// 获取域管理员列表
net group "Domain Admins" /domain
// 列出本机的所有进程和进程用户
tasklist /v
2、查询域控的域用户会话
// 查询域控列表
net group "Domain Controllers" /domain
// 收集域管理员列表
net group "Domain Admins" /domain
// 收集所有活动域的会话列表
netsess -h
十一、利用 powershell 收集域信息
使用 PowerView
下载地址:
https://github.com/shigophilo/tools/blob/master/PowerView.ps1
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
一些使用:
powerview 使用记录
powerview 使用小记
十二、敏感数据防护
1、资料、数据、文件的定位流程
内网数据防护首先要熟悉攻击者获取数据的流程
在实际的网络环境中,攻击者主要通过各种恶意方法来定位公司内部各相关人员的机器,从而获得资料,数据文件,流程如下:
定位内部人事组织结构
在内部人事组织结构中寻找需要监视的人员
定位相关人员的机器
监视相关人员存放文档的位置
列出存放文档的服务器的目录
2、核心业务机器
高级管理人员、系统管理员、财务/人事/业务人员的个人计算机
产品管理系统服务器
办公系统服务器
财务应用系统服务器
核心产品源码服务器(IT 公司通常会架设自己的 SVN 或者 GIT 服务器)
数据库服务器
文件服务器、共享服务器
电子邮件报务器
网络监控系统服务器
其他服务器(分公司、工厂)
3、敏感信息
站点源码备份文件数据库备份文件等
各类数据库的 Web 管理人口,例如 phpMyAdmin、Adminer
测览器密码和测览器 Cookie
其他用户会话、3389 和 ipc$连接记录、“回收站” 中的信息等
Windows 无线密码
网络内部的各种账号和密码,包括电子邮箱、VPN、FTP、TeamView 等