域内信息收集
手动收集 - 常见命令
查询网络配置信息
ipconfig /all
查询操作系统及软件的信息
- 查询操作系统和版本信息
systeminfo | findstr /B /C:"OS"
会显示系统信息,如图:
-
查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
-
查看安装的软件及版本、路径
利用wmic查询:
wmic product get name,version
或者使用Powershell(必须使用Windows Powershell而不是Powershell Core)调用wmic:
powershell "Get-WmiObject -Class win32_product | Select-Object -Property name,version"
查询本机服务信息
wmic service list brief
查询进程
CMD里:
tasklist
Powershell里:
ps
查看启动程序
wmic startup get command,caption
查看计划任务
schtasks /query /fo LIST /v
查看主机统计信息
net statistics workstation
查询用户列表
- 查询本机用户
net user
- 查询本地管理员(包含域用户)
net localgroup administrators
- 查看当前在线用户
query user || qwinsta
列出或断开本地计算机与所连接的客户端之间的会话
net session
查询端口列表
netstat -ano
查看补丁列表
wmic qfe get Caption,Description,HotFixID,InstalledOn
查询本地共享列表
net share
利用WMIC可以使用:
wmic share get name,path,status
查询路由表以及ARP缓存
route print
arp -a
查询防火墙相关配置
- 关闭防火墙
Win Server 2003之前:
netsh firewall set opmode disable
之后的版本:
netsh advfirewall set allprofiles state off
- 查看防火墙配置
netsh firewall show config
- 修改防火墙配置
Win Server 2003前,修改为允许指定程序全部连接:
netsh firewall add allowedprogram C:\xxx.exe "allow xxx" enable
之后的版本,允许指定程序进入或退出:
netsh advfirewall firewall add rule name="allow xxx" dir=in/out action=allow program="C:\xxx.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"
查看代理配置
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
查询并开启远程连接服务
- 查看远程连接端口
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
- Win Server 2003中开启3389端口
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtseconnections 1
- 在Win Server 2008和Win Server 2012中开启3389端口
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 add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
查询当前权限
- 查看当前权限:
whoami
若为本机普通用户,显示为主机名\用户名,例如:desktop-lqcon8a\evalexp
若为本地管理员,显示为主机名\administrator
若为域内用户,显示为域名\用户名
在域中,每一个及其都有一个机器用户,用户名为主机名$,如PC$。
- 获取域SID
whoami /all
例如输出为:
User Name SID
======================= =============================================
hack\user S-1-5-21-1247147951-2834560004-982910220-1001
则表示当前hack域的SID为:S-1-5-21-1247147951-2834560004-982910220,用户user的SID为:S-1-5-21-1247147951-2834560004-982910220-1001
- 查询指定用户的详细信息
net user XXX /domain
判断是否存在域
ipconfig
先用:ipconfig /all
查询DNS,再通过nslookup查询DNS地址:
ipconfig /all
nslookup hack.test
查看系统详细信息
systeminfo
查询当前登录域与登录用户信息
net config workstation
判断主域
利用域服务器通常作为时间服务器使用来判断:
net time /domain
三种情况:
-
存在域,但是当前用户不属于域
返回拒绝访问
-
存在域且当前用户属于域
返回时间
-
当前网络环境为工作组,不存在域
返回找不到域控制器
探测域内存活主机
NetBIOS快速探测
给出工具地址:lifenjoiner/nbtscan: The NBTscan mod for Windows without dependency of cygwin (github.com)
用法:
.\nbtscan.exe 192.168.31.0/24
ICMP快速探测
一句话:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="
ARP探测
不常用
- arp-scan 工具
- Empire的arpscan
- Nishang的Invoke-ARPScan
常规TCP/UDP端口扫描
用CS的端扫、Railgun或者内网fscan扫。
扫描域内端口
Talnet扫描
直接尝试Talnet去链接端口可以判断
MSF端扫
模块:auxiliary/scanner/portscan/tcp
或者使用:db_nmap
PowerSploit
渗透Powershell脚本集合(已经非常远古了)。
地址:PowerSploit/Recon at master · PowerShellMafia/PowerSploit (github.com)
Invoke-Portscan -Hosts 192.168.1.0/24 -T 4 -ports '80,8080,3389' -oA "C:\windows\temp\result.txt"
端口Banner信息
Railgun和fscan都集成了的。
文件共享服务端口:
端口号 | 端口说明 | 使用说明 |
---|---|---|
21、22、69 | FTP/TFTP | 匿名上传、下载、爆破和嗅探 |
2049 | NFS服务 | 配置不当 |
139 | SAMBA服务 | 爆破、未授权、远程代码执行 |
389 | LDAP目录访问协议 | 注入、允许匿名访问、弱口令 |
远程连接服务端口:
端口号 | 端口说明 | 使用说明 |
---|---|---|
22 | SSH | 爆破、SSH隧道内网转发、SCP文件传输 |
23 | Telnet远程 | 爆破、嗅探、弱口令 |
3389 | RDP远程桌面 | Shift后门(Win Server 2003以下)、爆破 |
5900 | VNC | 弱口令 |
5632 | PcAnywhere | 抓取密码、代码执行 |
Web应用:
端口号 | 端口说明 | 使用说明 |
---|---|---|
80、443、8080 | 常见Web服务端口 | Web攻击、爆破、对应服务器版本漏洞 |
7001、7002 | WebLogic | Java反序列化、弱口令 |
8080、8089 | JBoss/Resin/Jetty/Jenkins | 反序列化、控制台弱口令 |
9090 | WebSphere控制台 | Java反序列、弱口令 |
4848 | GlassFish控制台 | 弱口令 |
1352 | Lotus Domino邮件服务 | 弱口令、信息泄露、爆破 |
10000 | webmin控制面板 | 弱口令 |
数据库服务:
端口号 | 端口说明 | 使用说明 |
---|---|---|
3306 | MySQL数据库 | 注入、提权、爆破 |
1433 | MSSQL数据库 | 注入、提权、SA弱口令、爆破 |
1521 | Oracle数据库 | TNS爆破、注入、反弹shell |
5432 | Postgresql数据库 | 爆破、注入、弱口令 |
27017、27018 | MongoDB数据库 | 爆破、未授权、NoSQL注入 |
6379 | Redis数据库 | 未授权、弱口令爆破 |
5000 | Sysbase/DB2数据库 | 爆破、注入 |
邮件服务:
端口号 | 端口说明 | 使用说明 |
---|---|---|
25 | SMTP邮件服务 | 邮件伪造 |
110 | POP3协议 | 爆破、嗅探 |
143 | IMAP协议 | 爆破 |
常见网络协议端口:
端口号 | 端口说明 | 使用说明 |
---|---|---|
53 | DNS域名系统 | 允许区域传送、DNS劫持、缓存投毒、欺骗 |
67、68 | DHCP服务 | 劫持、欺骗 |
161 | SNMP协议 | 爆破、收集目标内网信息 |
特殊服务端口:
端口号 | 端口说明 | 使用说明 |
---|---|---|
2181 | ZooKeeper服务 | 未授权 |
8069 | Zabbix服务 | 远程执行、SQL注入 |
9200、9300 | Elasticsearch服务 | 远程执行 |
11211 | Memcached服务 | 未授权 |
512、513、514 | Linux rexec服务 | 爆破、远程登录 |
873 | rsync服务 | 匿名访问、文件上传 |
3690 | SVN服务 | SVN泄露、未授权访问 |
50000 | SAP Management Console | 远程执行 |
域内基础信息收集
查询域
net view /domain
查询域内所有计算机
net view /domain:XXX
查询域内用户组列表
net group /domain
查询域成员计算机列表
net group "domain computers" /domain
获取域密码信息
net accounts /domain
获取域信任信息
nltest /domain_trusts
查找域控制器
查看域控制器的机器名
nltest /DCLIST:XXX
查看域控的主机名
nsloopup -type=SRV _ldap._tcp
查看当前时间
net time /domain
查看域控制器组
net group "Domain Controllers" /domain
netdom query pdc
获取域内的用户和管理员的信息
查询所有域用户列表
- 向域控查询
net user /domain
- 获取域内用户详细信息
wmic useraccount get /all
- 查看存在的用户
dsquery user
- 查询本地管理员组用户
net localgroup administrators
查询域管理员用户组
- 查询域管用户
net group "domain admins" /domain
- 查询管理员用户组
net group "Enterprise Admins" /domain
定位域管理员
主要通过日志和会话定位域管。
psloggedon.exe
该工具通过搜索网上邻居的计算,并显示该用户当前是否登录,原理是检查注册表中的HKEY_USERS项的Key值来查询谁登录过,因此某些功能需要管理员权限才可以用。
用法:
psloggedon [-] [-l] [-x] [\\computername|username]
-x
不显示登录时间,-l
不显示本地或网络资源登录,只显示本地登录
PVEFindADUser.exe
一般使用:
PVEFindADUser.exe -current
netview.exe
地址:mubix/netview: Netview enumerates systems using WinAPI calls (github.com)
绝大部分无需管理员权限即可使用。
参数:
- -h 帮助
- -f file 指定要提取主机列表的文件
- -e file 指定要排除的主机名的文件
- -o file 将所有输出重定向到指定的文件
- -d domain 指定要提取主机列表的域;未指定就从当前域提取
- -g group 指定搜索的组名,没有指定就搜Domain Admins组
- -c 对已找到的共享目录/文件的访问权限进行检查
Nmap的NSE脚本
若存在域账户或本地账户,就可以用Nmap的smb-enum-sessions.nse引擎获取远程机器的登录会话。
常见的NSE:
- smb-enum-domains.nse 收集域控信息,可以获取主机信息、用户、可使用密码策略的用户等
- smb-enum-users.nse 进行域渗透测试时,如果获得了某台域内主机的权限,但是权限有限,无法获取更多的域用户信息,就可以借助这个脚本对域控进行扫描
- smb-enum-shares.nse 遍历远程主机的共享目录
- smb-enum-processes.nse 对主机的系统进程进行遍历。通过这些信息,可以知道目标主机上正在运行哪些软件
- smb-enum-sessions.nse 获取域内主机的用户登录会话,查看当前是否有用户登录
- smb-os-discovery.nse 收集目标主机的操作系统、计算机名、域名、域林名称、NetBIOS机器名、NetBIOS域名、工作组、系统时间等信息。
PowerView脚本
PowerSploit里的一个脚本。
- Invoke-StealthUserHunter
- Invoke-UserHunter
Empire的user_hunter模块
模块名:situational_awareness/network/powerview/user_hunter
查找域管理进程
域权限提升过程常常伴着明文凭据或者通过mimikatz提权等。
本机检查
- 获取域管理员列表
net group "Domain Admins" /domain
- 列出本机的所有进程及进程用户
tasklist /v
查询域控制器的域用户会话
查询域控制器的域用户会话,其原理是:再域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理员会话的系统列表。
- 查询域控制器列表
net group "Domain Controllers" /domain
- 收集域管理员列表
可以用LDAP查询,也可以用net:
net group "Domain /Admins" /domain
- 收集所有活动域的会话列表
使用netsess查询:
NetSess -h
- 交叉引用域管理员列表与获得会话列表
在拥有netsess.exe的情况下,把域控列表添加到dc.txt里:
FOR /F %i in (dc.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions.txt && FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a
查询远程系统中运行的任务
首先从Domain Admins组中收集域管理员列表,命令如下:
net group "Domain Admins" /domain
然后把目标域系统列表添加到ip.txt,运行脚本:
FOR /F %i in (ip.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>nul > output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n > nul && echo [!] %n was found running a process on %i && pause
扫描远程系统的NetBIOS信息
某些版本才允许用户通过NetBIOS查询已登录用户。
for /F %i in (ip.txt) do @echo [+] Checking %i && nbstat -A %i 2>nul > nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > nul && echo [!] %n was found logged into %i
也可以通过nbtscan工具。
脚本:
for /F %i in (ip.txt) do @echo [+] Checking %i && nbtscan -f %i 2>nul > nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > nul && echo [!] was found logged into %i
域分析工具BloodHound
地址:BloodHoundAD/BloodHound: Six Degrees of Domain Admin (github.com)
这个工具的使用得先安装Neo4j。
下载地址:https://neo4j.com/artifact.php?name=neo4j-community-4.4.5-windows.zip
然后没必要照着书上来做,直接下载BloodHound,启动连接数据库即可。
图形化界面就不用多说什么,自己琢磨琢磨就玩明白了。
数据采集可以用这个工具的Collectors:BloodHound/Collectors at master · BloodHoundAD/BloodHound (github.com)
把生成的文件上传到BloodHound即可开始查看具体内容。
敏感数据的防护
重点核心业务机器及敏感信息防护
- 核心业务机器
- 高级管理员、系统管理、财务、认识、业务人员个人计算机
- 产品管理系统服务器
- 办公系统服务器
- 财务应用系统服务器
- 核心产品源码服务器(SVN或者GIT)
- 数据库服务器
- 文件服务器、共享服务器
- 电子邮件服务器
- 网络监控系统服务器
- 其它服务器
- 敏感信息和敏感文件
- 站点源码备份文件、数据库备份文件
- 各类数据库的Web管理入口,如phpMyAdmin、Adminer
- 浏览器密码和浏览器Cookie
- 其它用户会话、3389和ipc$连接记录、”回收站“
- Windows无线密码
- 网络内部的各种账号和密码,包括电子邮箱、VPN、FTP、TeamView等
应用与文件形式信息的防护
对于低版本的Office软件加密,可以使用软件破解;对于高版本的Office软件,可以通过微软SysInternals Suite套件中的ProcDump来获取密码。
域内网端划分情况以及拓扑结构
收集信息后可以尝试绘制内网的拓扑结构图,CS可以生成。
基本架构
要对目标网站的基本情况进行简单的判断,分析目标服务器所使用的Web服务器、后端脚本、数据库、系统平台等。
常见的Web架构如下:
- ASP + Access + IIS 5.0/6.0 + Win Server 2003
- ASPX + MSSQL + IIS 7.0/7.5 + Win Server 2008
- PHP + MySQL + IIS
- PHP + MySQL + Apache
- PHP + MySQL + Nginx
- JSP + MySQL + Nginx
- JSP + MSSQL + Tomcat
- JSP + Oracle + Tomcat
- SpringBoot + MySQL + Docker
域内网段划分
见安全域的划分。
多层域结构
判断出内网是否存在多层域、当前计算机是几级子域、改子域的域控及根域的域控是哪些、其它域的域控是哪些、哪些域建立了域信任关系。
绘制内网拓扑图
拿到上述的各类信息,绘制出内网的拓扑图即可。
绘制出拓扑图可以快速地了解域的内部环境、准确定位内网中的目标。
自动化收集
使用WMIC创建一个脚本:
for /f "delims=" 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
执行后会输出一个HTML文件。