域内信息收集

手动收集 - 常见命令

查询网络配置信息

ipconfig /all

查询操作系统及软件的信息

  1. 查询操作系统和版本信息
systeminfo | findstr /B /C:"OS"

会显示系统信息,如图:

  1. 查看系统体系结构

    echo %PROCESSOR_ARCHITECTURE%
  2. 查看安装的软件及版本、路径

利用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

查询用户列表

  1. 查询本机用户
net user
  1. 查询本地管理员(包含域用户)
net localgroup administrators
  1. 查看当前在线用户
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

查询防火墙相关配置

  1. 关闭防火墙

Win Server 2003之前:

netsh firewall set opmode disable

之后的版本:

netsh advfirewall set allprofiles state off
  1. 查看防火墙配置
netsh firewall show config
  1. 修改防火墙配置

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
  1. 自定义防火墙日志的储存位置
netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"

查看代理配置

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

查询并开启远程连接服务

  1. 查看远程连接端口
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
  1. Win Server 2003中开启3389端口
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtseconnections 1
  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

查询当前权限

  1. 查看当前权限:
whoami

若为本机普通用户,显示为主机名\用户名,例如:desktop-lqcon8a\evalexp

若为本地管理员,显示为主机名\administrator

若为域内用户,显示为域名\用户名

在域中,每一个及其都有一个机器用户,用户名为主机名$,如PC$

  1. 获取域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

  1. 查询指定用户的详细信息
net user XXX /domain

判断是否存在域

ipconfig

先用:ipconfig /all查询DNS,再通过nslookup查询DNS地址:

ipconfig /all
nslookup hack.test

查看系统详细信息

systeminfo

查询当前登录域与登录用户信息

net config workstation

判断主域

利用域服务器通常作为时间服务器使用来判断:

net time /domain

三种情况:

  1. 存在域,但是当前用户不属于域

    返回拒绝访问

  2. 存在域且当前用户属于域

    返回时间

  3. 当前网络环境为工作组,不存在域

    返回找不到域控制器

探测域内存活主机

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、69FTP/TFTP匿名上传、下载、爆破和嗅探
2049NFS服务配置不当
139SAMBA服务爆破、未授权、远程代码执行
389LDAP目录访问协议注入、允许匿名访问、弱口令

远程连接服务端口:

端口号端口说明使用说明
22SSH爆破、SSH隧道内网转发、SCP文件传输
23Telnet远程爆破、嗅探、弱口令
3389RDP远程桌面Shift后门(Win Server 2003以下)、爆破
5900VNC弱口令
5632PcAnywhere抓取密码、代码执行

Web应用:

端口号端口说明使用说明
80、443、8080常见Web服务端口Web攻击、爆破、对应服务器版本漏洞
7001、7002WebLogicJava反序列化、弱口令
8080、8089JBoss/Resin/Jetty/Jenkins反序列化、控制台弱口令
9090WebSphere控制台Java反序列、弱口令
4848GlassFish控制台弱口令
1352Lotus Domino邮件服务弱口令、信息泄露、爆破
10000webmin控制面板弱口令

数据库服务:

端口号端口说明使用说明
3306MySQL数据库注入、提权、爆破
1433MSSQL数据库注入、提权、SA弱口令、爆破
1521Oracle数据库TNS爆破、注入、反弹shell
5432Postgresql数据库爆破、注入、弱口令
27017、27018MongoDB数据库爆破、未授权、NoSQL注入
6379Redis数据库未授权、弱口令爆破
5000Sysbase/DB2数据库爆破、注入

邮件服务:

端口号端口说明使用说明
25SMTP邮件服务邮件伪造
110POP3协议爆破、嗅探
143IMAP协议爆破

常见网络协议端口:

端口号端口说明使用说明
53DNS域名系统允许区域传送、DNS劫持、缓存投毒、欺骗
67、68DHCP服务劫持、欺骗
161SNMP协议爆破、收集目标内网信息

特殊服务端口:

端口号端口说明使用说明
2181ZooKeeper服务未授权
8069Zabbix服务远程执行、SQL注入
9200、9300Elasticsearch服务远程执行
11211Memcached服务未授权
512、513、514Linux rexec服务爆破、远程登录
873rsync服务匿名访问、文件上传
3690SVN服务SVN泄露、未授权访问
50000SAP 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

获取域内的用户和管理员的信息

查询所有域用户列表

  1. 向域控查询
net user /domain
  1. 获取域内用户详细信息
wmic useraccount get /all
  1. 查看存在的用户
dsquery user
  1. 查询本地管理员组用户
net localgroup administrators

查询域管理员用户组

  1. 查询域管用户
net group "domain admins" /domain
  1. 查询管理员用户组
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提权等。

本机检查

  1. 获取域管理员列表
net group "Domain Admins" /domain
  1. 列出本机的所有进程及进程用户
tasklist /v

查询域控制器的域用户会话

查询域控制器的域用户会话,其原理是:再域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理员会话的系统列表。

  1. 查询域控制器列表
net group "Domain Controllers" /domain
  1. 收集域管理员列表

可以用LDAP查询,也可以用net:

net group "Domain /Admins" /domain
  1. 收集所有活动域的会话列表

使用netsess查询:

NetSess -h
  1. 交叉引用域管理员列表与获得会话列表

在拥有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即可开始查看具体内容。

敏感数据的防护

重点核心业务机器及敏感信息防护

  1. 核心业务机器
    • 高级管理员、系统管理、财务、认识、业务人员个人计算机
    • 产品管理系统服务器
    • 办公系统服务器
    • 财务应用系统服务器
    • 核心产品源码服务器(SVN或者GIT)
    • 数据库服务器
    • 文件服务器、共享服务器
    • 电子邮件服务器
    • 网络监控系统服务器
    • 其它服务器
  2. 敏感信息和敏感文件
    • 站点源码备份文件、数据库备份文件
    • 各类数据库的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文件。