域内横向移动技术,是在复杂的内网攻击中被广泛使用的一种技术,尤其是在高及持续威胁(APT)中。攻击者会利用该技术,以被攻陷的系统为跳板,访问其它域内主机,扩大资产范围(包括跳板机中的文档和存储的凭证,以及通过跳板机连接的数据库、域控制器或其他重要资产)。
通过此类攻击手段,攻击者最终获取域控制器的访问权限,甚至完全控制基于windows操作系统的基础设施和业务相关的账户。因此,必须使用强口令来保护特权用户不被横向移动攻击,从而避免域内其他机器沦陷。建议系统管理员定期修改密码,从而使攻击者获取的权限失效。
0x01 常用 Windows 远程连接和相关命令
在渗透测试中,拿到目标计算机的用户明文密码或者NTLM Hash后,可以通过PTH (Pass the Hash,凭据传递)的方法,将散列值或明文密码传送到目标机器中进行验证。与目标机器建立连接后,可以使用相关方法在远程Windows操作系统中执行命令。在多层代理环境中进行渗透测试时,由于网络条件较差,无法使用图形化界面连接远程主机。此时,可以使用命令行的方式连接远程主机(最好使用Windows自带的方法对远程目标系统进行命令行下的连接操作)并执行相关命令。
在实际的网络环境中,针对此类情况,网络管理人员可以通过配置Windows系统自带的防火墙或组策略进行防御。(理解:利用防护墙阻断你连我的3389或者阻断一些协议)
1、IPC(internet process connection)
IPC共享“命名管道”的资源,是为了实现进程间的通信而开放的命名管道。IPC可以通过验证用户名和密码获取相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。
通过 ipc$ ,可以与目标主机建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载操作 还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。
(1) 我们如何建立一个 ipc$ ?
如下命令:
1 | net use \\192.168.152.159\ipc$ "487280636@qq.com" /user:ONE\mayi |
随后使用 net use
可以查看当前连接
如上表示连接成功。
(2) ipc$ 的利用条件
开启了139、445端口
ipc$可以实现远程登录及对默认共享资源的访问,而139端口的开启表示NetBIOS协议的应用。通过139、445端口,可以实现对共享文件/打印机的访问。因此,一般来讲,ipc$需要139、445端口的支持。
有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机。
管理员开启了默认共享
默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(c$、d$、e$等)和系统目录winnt或windows(admin$)。通过ipc$,可以实现对这些默认共享目录的访问。
(3) 连接失败的原因
- 用户名或密码错误
- 目标没有打开ipc$ 默认共享
- 不成功连接139、445端口
- 命令输入错误
(4) 常见错误号
- 错误号5:拒绝访问。
- 错误号51: Windows 无法找到网络路径,即网络络中存在问题
- 错误号53:找不到网络路径,包括IP地址错误、目标未开机,目标的 lanmanserver(工作站服务)服务未启动、目标有防火墙(端口过滤)。
- 错误号67:找不到网络名,包括 lanmanworkstation服务未启动、ipc$ 已被删除。
- 错误号1219:提供的凭据与已存在的凭据集冲突。例如,已经和目标建立了ipc$,需要在删除原连接后重新进行连接。
- 错误号1326:未知的用户名或错误的密码。
- 错误号1792:试图登录,但是网络登录服务器没有启动,包括目标NetLogon服务未启动(连接域控制器时会出现此情况)
- 错误号2242:此用户的密码已过期。例如目标机器设置了账号管理策略,强制用户定期修改密码。
2、使用Windows自带的工具获取远程主机信息
(1) dir 命令
在使用net use
命令与远程目标机器建立ipc$ 后,可以使用dir
命令列出远程主机中的文件。
(2) tasklist 命令
在使用net use 命令与远程目标机器建立ipc$后,可以使用tasklist命令的/S(service)、/U(user)、/P(password)参数列出远程主机上运行的进程。
1 | tasklist /S 192.168.152.159 /U ONE\mayi /P 487280636@qq.com |
3、计划任务
(1) at命令
at是windows自带的用于创建计划任务的命令,它主要工作在windows server 2008 之前版本的操作系统中。使用at命令在远程目标机器上创建计划任务的流程大致如下:
- 使用net time命令确定远程机器当前的系统时间。
- 使用copy命令将Payload 文件复制到远程目标机器中。
- 使用at命令定时启动该Payload文件。
- 删除使用at命令创建计划任务的记录
在使用at命令在远程机器上创建计划任务之前,需要使用net use命令建立ipc$。具体详细如下:
查看目标系统时间
net time命令可用于查看远程主机的系统时间。
1 | net time \\192.168.152.159 |
将文件复制到目标系统中
首先,在本地创建一个calc.bat文件,其内容为“calc”。使用Windows自带的copy命令将一个文件复制到远程主机的C盘中。命令如下:
1 | copy calc.bat \\192.168.152.159\c$ |
使用at创建计划任务
使用net time命令获取当前远程主机的系统时间。使用at命令让目标系统在指定时间运行一个程序:(win2008之前的系统)
1 |
不支持请求,懵
清除at记录
计划任务不会随着它本身的执行而被删除,因此,网络管理员可以通过攻击者创建的计划任务获知网络遭受了攻击。
1 | at \\192.168.152.159 7 /delete #删除创建的计划任务 |
使用at远程执行命令后,先将执行结果哦写入本地文本文件,再使用type命令远程读取该文本文件。
1 | at \\192.168.152.159 4:10PM cmd.exe /c "ipconfig" >C:/1.txt" |
(2) schtasks 命令
Windows Vista、Windows Server 2008及之后版本的操作系统已经使用schtasks 命令代替at命令。
- 在远程主机上创建一个名称为“test”的计圳任务。该计划任务在开机时启动,启动程序为C盘下的 calc.bat,启动权限为System。
1
schtasks /create /s 1.1.1.10 /tn test /sc onstart /tr c:\calc.bat /ru system /f
- 在远程主机上运行名为test的计划任务
1
schtasks /run /s 1.1.1.10 /i /rn "test"
- 在使用schtasks命令时不需要输入密码,原因是此前已经与目标机器建立了ipc$。如果没有建立ipc$,可以添加参数/u /p
/u administrator
/p “123456Aa”
/f 强制删除 - 任务执行后删除计划任务
1
schtasks /delete /s 1.1.1.10 /tn "test" -f
- 最后删除ipc$在使用schtasks命令时,会在系统中留下日志文件C:\Windows\Tasks\SchedLgU.txt。如果执行schtasks命令后没有回显,可以配合ipc$执行文件,使用type命令远程查看执行结果。
1
2net use 名称 /del /y
#在删除ipc$时,要确认删除的是自己创建的ipc$
0x02 Windows系统散列值获取
1、LMHash 和 NTLM Hash
Windowus 操作系统通常使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit中,加密后为散列值。Widows操作系统中的密码一般由两部分组成,一部分为 LM Hash, 另部分为NTLM Hash。在Windows操作系统中,Hash的结构通常如下。
1 | 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为空值或被禁用)。
NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加者算法,NTLMHash是基于MD4加密算法进行加密的。个人版从Windows Vista以后,服务器版从Wndows Sever2003以后,Windows 操作系统的认证方式均为NTLM Hash.
2、单机密码抓取与防范
要想在Windows操作系统中抓取散列值或明文密码,必须将权限提升至System。本地用户名、散列值和其他安全验证信息都保存在SAM文件中。lsass.exe进程用于实现Windows的安全策略(本地安全策略和登录策略)。可以使用工具将散列值和明文密码从内存中的lsass.exe 进程或SAM文件中导出。
在Windows操作系统中,SAM文件的保存位置是C:\WindowslSystem32\config。该文件是被锁定的,不允许复制。在渗透测试中,可以采用传统方法,在关闭Windows操作系统之后,使用PE盘进人文件管理环境,直接复制SAM文件,也可以使用VSS等方法进行复制。下面对常见的单机密码抓取工具和方法进行分析。
(1) GetPass
(工具没找到) 据说直接运行对应版本即可。
(2) PwDump7
在命令行环境中运行PwDump7程序,可以得到系统中所有账户的NTLM Hash,可以通过彩虹表来破解散列值。如果无法通过彩虹表来破解,可以使用哈希传递的方法横向渗透测试。(https://www.openwall.com/passwords/windows-pwdump)
(3) 通过SAM和system文件抓取密码
无工具导出SAM和system文件
需要管理员权限:1
2>reg save hklm\sam C:\Users\mayi\Desktop\sam.hive
>reg save hklm\system C:\Users\mayi\Desktop\system.hive通过 ProcDump 工具获取 lsass.dmp 文件。
Procdump是微软官方发布的工具,可以在命令行下将目标lsass文件导出,且杀毒软件不会拦截。先用在目标机器上传微软的工具Procdump,导出其lsass.exe:【下载】1
2procdump64.exe -accepteula -ma lsass.exe lsass.dmp
#本机win10测试失败通过读取SAM和System 文件获取 NTLM hash
使用mimikatz【下载】1
2mimikatz.exe
lsadump::sam /sam:sam.hive /system:system.hive
使用mimikatz直接读取本地SAM文件
将mimikatz免杀处理后上传至目标机器,在命令行中打开mimikatz(容易被杀)
1 | privilege::debug #提升权限 |
(4) 使用mimikatz在线读取SAM文件
不一定查得到,同样需要免杀绕过。
1 | mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" #在线读取散列值及明文密码 |
(5) 使用mimikatz离线读取lasass.dmp
- 导出 lasass.dmp 文件,有的系统可以直接右击进程然后选择‘转储进程’即可如图
也可以使用 - 在mimikatz中使用如下命令导入lasass.dmp文件
1
2sekurlsa::minidump C:\Users\ADMINI~1\AppData\Local\Temp\lsass.DMP
#看到Switch to MINIDUMP 加载成功 - 导出密码散列值
1
sekurlsa::logonPasswords full #导出密码散列值
(6) 单机密码抓取的防范
微软为了防止用户的明文密码在内存中泄露,发布了KB2871997补丁,关闭了Wdigest功能。
Windows Server2012及以上版本默认关闭Wdigest,使攻击者无法从内存中获取明文密码。Windows Server2012以下版本,如果安装了KB2871997补丁,攻击者同样无法获取明文密码。
在命令行环境开启或关闭Wdigest Auth,有如下两种方法:
- 使用 red add命令
1
2
3reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f // 开启Wdigest Auth
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f // 关闭Wdigest Auth - 使用 powershell
1
2
3
4#开启
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
3、Windows 密码哈希破击方法
获取到密码hash后,我们可能需要对其进行破解,以得到明文密码。
(1) ophcrack在线破解
如今网上有很多的网站提供在线密码破解服务,在获取密码哈希后,可以对其进行在线破解。
网址:https://www.objectif-securite.ch/en/ophcrack
放入NThash然后点GO即可。
(2) ophcrack工具
ophcrack是一款Windows密码哈希值破解工具,其官方给我们提供了几十GB的哈希表。
ophcrack下载地址:https://ophcrack.sourceforge.io/
ophcrack提供的彩虹表下载地址:https://ophcrack.sourceforge.io/tables.php
ophcrack使用十分简单,打开程序,点击Load导入哈希值,然后通过加载Tables后,执行Crack即可进行破解
(没用过,先就了解下)
(3) Hashcat工具
我们主要学习这个工具。Hashcat号称是世界上最快的密码破解工具,世界上第一个和唯一一个基于GPGPU规则的引擎。
Windows版下载地址:https://hashcat.net/hashcat/
linux版下载地址:https://github.com/hashcat/hashcat
下载下来之后,进入其源码的目录执行“make && make install”命令即可编译安装。kali自带
首先我们使用 -b 参数,测试使用当前机器进行爆破的基准速度(虚拟机中使用加 –force强制执行):
-m 指定哈希值的类型
常用的如下:
- -m 1000:NTLM
- -m 5600:Net-NTLMv2
- -m 5500:NetNTLMv1 / NetNTLMv1+ESS
- -m 0:MD5
- -m 2500:WPA/PSK
- -m 100:sha1
更多哈希类型可以【参考官网】
-a 指定破解模式
- -a 0:字典模式
- -a 1:组合模式
- -a 3:掩码暴力破解
常用命令组合
利用字典爆破:
1 | ./hashcat -m xx -a 0 <hashfile> <passwords.list1> <passwords.list2> |
-a 0:指定以字典模式破解。
-m xx:指定hashfile文件里的哈希值类型。
-o:把破解到的结果写入文件
<passwords.list>:指定字典文件。
如下测试:
1 | root@kali:/# hashcat -m 1000 -a 0 de60a66e7bf8f0870c3d59fd3f1600df -o result.txt password.list --force |
4、如何防范攻击者抓取明文密码和散列值
(1) 设置Active Diretory 2012 R2功能级别
Windws Sever 2012R2新增了一个名为“受保护的用户”的用户组。只要将需要保护的用户放人该组,攻击者就无法使用mimikaz等工具抓取明文密码和散列值了。
(2) 安装KB2871997
KB2871997是微软用来解决PsExec或IPC远程查看(ipc$ )问题的补丁,能使本地账号不再被允许远程接人计算机系统,但系统默认的本地管理员账号Administrator 这个SID为500的用户例外——即使将 Administrator改名,该账号的SID仍为500,攻击者仍然可以使用横向攻击方法获得内网中其他计算机的控制权。安装KB2871997后,仍需禁用默认的Administrator账号,以防御哈希传递攻击。
在日常网络维护中,可以通过Windows update进行自动更新,也可以访同微软官方网站下载补丁文件进行修复。
(3) 通过修改注册表禁止在内存中存储明文密码
微软在Windows xp版本中台南佳了一个名为WDigest的协议。该协议能够使Windows将明文密码存储在内存中,以方便用户登录本地计算机。
修改注册表,解决内存中以明文存储密码的问题。
1 | reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 |
注销电脑后,使用mimikatz抓取密码。此时只能获取NTML Hash,因为NTML Hash很难被破解,所以设置的Windows密码足够强壮,并定时修改密码,就可以降低被彻底攻陷的可能性。
(4) 防御mimikatz 攻击
根据Debug权限确定哪些用户可以将调试器附加到任何进程或者内核中。在默认情况下,此服务为本地管理员Administrator所有。不过除非是系统进程,本地管理员几乎不需要使用此权限。
win+r 运行 secpol.msc查看如下:
mimikatz在抓取散列值或明文密码时需要使用Debug权限(因为mimikatz需要和Isass进程进行交互,如果没有Debug权限,mimikatz 将不能读取lsass进程)。因此,在维护网络时,可以针对这一点采取防御措施。将拥有Debug权限的本地管理员从Administrators组中删除。重启系统,再次运行mimikatz,输人”privilege::debug”, 将看到错误信息。此时,已经无法使用mimikatz抓取散列值及明文密码了。
0x03 哈希传递攻击
1、哈希传递攻击的概念
该方法通过找到与账户相关的密码散列值(通常是NTLM Hash )来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管管理员账号和密码,
因此,如果计算机的本地理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登录内网中的其他计算机。通过哈希传递,攻击者不需要花时间破解密码散列值(进而获得密码明文)。
在Windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软直接的产品和工具显然不会支持这种攻击,于是,攻击者往往会使用第三方工具来完成任务。在Windows server2012R2及之后版本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的控制。
2、哈希传递攻击适用情况
(1) 在工作组中:
- Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
- Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员组内用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。
(2) 在域环境中:
只要是域管理员组内的用户(可以是域管理员组内非administrator用户)的哈希值都能进行传递攻击,攻击成功后可以访问域内任意一台机器。
3、MSF进行哈希传递攻击PtH(Pass the Hash)
(1) 工作组环境,必须是 administrator用户
当我们获取到了某台主机的 administrator 用户的密码哈希值 ,并且该主机的445端口打开着。我们则可以利用 exploit/windows/smb/psexec 模块用MSF进行远程登录(哈希传递攻击)。这个是rhost可以是一个主机,也可以设置一个网段。
1 | msf > use exploit/windows/smb/psexec |
(2)域环境
当我们获取到了域管理员组内任意用户的密码哈希值 ,并且该主机的445端口打开着。我们则可以利用 exploit/windows/smb/psexec 模块用MSF进行哈希传递攻击。
1 | msf > use exploit/windows/smb/psexec |
4、mimikatz 进行哈希传递攻击
工作组
1 | rivilege::debug #先提权 |
域
1 | rivilege::debug #先提权 |
5、使用AES进行Key传递攻击(PTK,Pass The Key)
前提:只适用于域环境,并且目标主机需要安装 KB2871997补丁
我们也是使用 mimikatz 工具
(1) 获取AES凭证
1 | privilege::debug |
(2) 利用获得到的AES256或AES128进行Key攻击
1 | privilege::debug |
6、更新KB2871997补丁产生的影响
KB2871997 补丁将使本地帐号不再可以用于远程接入系统,不管是 Network logon 还是 Interactive login。其后果就是:无法通过本地管理员权限对远程计算机使用 Psexec、WMI、smbexec、IPC 等,也无法访问远程主机的文件共享等。
在实际测试中,更新KB2871997之后,发现无法使用常规的哈希传递方法进行横向移动,但 administrator(SID=500) 账号例外,使用该账号的散列值依然可以进行哈希传递攻击。这里需要强调的是 SID=500 的账号。即使将administrator账号改名,也不会影响SID的值。所以,如果攻击者使用SID为500的账号进行哈希传递攻击,就不会受到KB2871997的影响。
其实 KB2871997 的补丁并没有多大的用处,由于在 Windows Vista 时代,微软就通过将LocalAccountTokenFilterPolicy 值默认设置为 0 来禁止非administrator账号的远程连接(包括哈希传递攻击),但是administrator用户不受影响。即使目标主机更新了KB2871997的补丁,仍然可以使用PID=500的用户进行哈希传递攻击,而 PID=500 的用户默认为 aministrator,所以仍然可以使用administrator用户进行哈希传递攻击。并且在打了KB2871997 补丁的机器上,通过将LocalAccountTokenFilterPolicy设置为1,也还是可以使用普通管理员账号进行哈希传递攻击。
【参考链接】
0x04 票据传递攻击
要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。mimikatz 同样提供了不需要本地管理员权限进行横向渗透测试的方法,例如票据传递( Pass The Ticket, PTT)。下面我们学习一下票据传递攻击。
1、票据传递攻击(PtT,Pass the Ticket) 初步理解
票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或者NTML哈希的方法,PtT最常见的用途是使用黄金票据和白银票据,通过PtT访问主机相当简单。
(1) kerberos认证粗略流程
Kerberos 主要是用在域环境下的身份认证协议。kerberos协议中主要有三个存在的角色:
- 访问服务的 Client
- 提供服务的 Server
- KDC(Key Distribution Center) 密钥分发中心
注意: KDC 服务框架中包含一个 KRBTGT 账户,它是在创建域时系统自动创建的一个账号,可以暂时理解为他就是一个无法登陆的账号,在发放票据时会使用到它的密码 HASH 值。
在KDC中又分为两个部分:Authentication Service(AS)和Ticket Granting Service(TGS):
- AS 的作用就是验证Client端的身份,验证通过会返回一张TGT(Ticket Granting Ticket) 票给 Client。
- TGS 的作用是通过client的票(TGT)换取访问server端的票ST(Service Ticket) 也被称为TGS Ticket。
个人理解,TGT票就是证明了你是好人或者说你是我信任的人,而ST票证明你有权限。
kerberos认证粗略流程:
- client向kerberos服务请求,希望获取访问server的权限。kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法。这就是AS服务完成的工作,通过在AD中存储黑名单和白名单来区分client。成功后,AS返回TGT(使用KDC中krbtgt用户的NTLM Hash加密Session Key和客户端的信息得到的 TGT)给client。
- client得到了TGT后,继续向kerberos的TGS请求,希望获取访问某个server的权限。kerberos又得到这个消息,这时候通过client消息中的TGT,判断出client拥有了这个权限,给了client访问server的权限ticket。
- client得到ticket后,终于可以成功访问server。这个ticket只是针对这个server,其他server需要再次向TGS申请ticket(门票)。
(2) 黄金票据
黄金票据特点:
- 需要与DC通信
- 需要krbtgt用户的hash
Kerberos黄金票据是有效的TGT Kerberos票据,因为它是由域Kerberos帐户(KRBTGT)加密和签名的 。TGT仅用于向域控制器上的KDC服务证明用户已被其他域控制器认证。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的。
要创建黄金票据,我们需要知道以下信息:
- 要伪造的域用户(这里我们一般填写域管理员账户)
- 域名
- 域的SID值(就是域成员SID值去掉最后的)
- krbtgt账号的哈希值
实验
- 进入mimikatz,使用如下命令查看哈希和域sid(测试发现普通域用户无法获得,需要域管理员组的用户)
1
2
3lsadump::dcsync /domain:one.com /user:krbtgt
##如果没有权限就使用如下提权一下
privilege::debug - 方法一:在mimikatz中生成黄金票据并导入
1
2
3privilege::debug #提权
kerberos::golden /user:administrator /domain:one.com /sid:S-1-5-21-3207984876-4145485252-2180772908 /krbtgt:abe0960aa136dce3a6bb9fbe03aa8d3d /ptt #生成票据并导入
# kerberos::golden /user:要伪造的域用户(我们这一般写域控) /domain:域名 /sid:域的sid值 /krbtgt:krbtgt的哈希 /ptt
随后我们可以使用kerberos::list
查看票据
验证是否成功:销毁票据:1
2C:\Documents and Settings\mayi>net use k: \\WIN-4IRPOMA33TP.one.com\c$
命令成功完成。但是后面我测试发现,删除了票据还是可以完成映射。1
2kerberos::purge #删除票据
kerberos::list #查看票据
【域成员主机不能为03和xp及以下】否则导入票据报错 我这里可能是报错了,脑袋~的,以后再细看看。
(3) 白银票据
白银票据特点:
- 不需要与KDC进行交互
- 需要目标服务的NTLM Hash
在第三步认证中的Ticket的组成:
1 | Ticket=Server Hash(Server Session Key+Client info+End Time) |
当拥有Server Hash时,我们就可以伪造一个不经过KDC认证的一个Ticket。
(3) 黄金票据和白银票据的不同
访问权限不同:
- 黄金票据Golden Ticket:伪造TGT,可以获取任何Kerberos服务权限
- 白银票据Silver Ticket:伪造TGS,只能访问指定的服务
加密方式不同:
- Golden Ticket由krbtgt的Hash加密
- Silver Ticket 由服务账号(通常为计算机账户)Hash加密
认证流程不同:
- Golden Ticket的利用过程需要访问域控,
- 而Silver Ticket不需要
隐蔽性不同:
白银票据依赖于服务账号的密码散列值,而黄金票据需要利用krbtgt账号的密码散列值,因此白银票据更隐蔽
(4) 将内存中票据导出,然后再加载
- 使用如下命令将内存中的票据导出执行以上命令后,会在当和日录下出现多个服务的票据文件,例如krbgt、cifs、ldap 等。为防止出错我们在导入票据前先将内存中的票据删除。
1
mimikatz "privilege::debug" "sekurlsa::tickets /export" #使用mimikatz,可以将内存中的票据导出
将票据加载到内存:1
2kerberos::purge #删除票据
kerberos::list #查看票据1
2mimikatz "kerberos::ptt "C:\Users\Administrator\Desktop\[0;3e4]-0-0-40a50000-WIN-2008$@GC-WIN-2012.hello.testlab.kirbi"
#将票据文件注入内存
0X05 PsExec
起初PsExec主要用于大批量Windows主机的运维,在域环境下效果尤其好。但是,攻击者渐渐开始使用PsExec,通过命令行环境与目标机器进行连接,甚至控制目标机器,而不需要通过远程桌面协议( RDP )进行图形化控制,降低了恶意操作被管理员发现的可能性(因为PsExec是Windows提供的工具,所以杀毒软件将其列在白名单中)。PsExec可以在Windows Vista/NT 4.0/2000/XP/Server 2003/Server 2008/Server 2012/Server 2016(包括64位版本)上运行。
1、PsTools 工具包中的PsExec
PsExec包含在PsTools工具包中【下载地址】这个工具包还不错里面有其它的使用exe。
1 | ## 建立连接 |
在使用PsExec时,需要注意以下几点。
- 需远程系统开启admin$共享(默认是开启的)
- 连接目标系统后,不需要输人账号和密码。
- 在使用psexec执行远程命令时,会在目标系统中创建一个psexec服务。
- 命令执行后,psexec服务将被自动删除。由于创建或删除服务时会产生大量的日志,可以在进行攻击溯源时通过日志反推攻击流程。
- 使用PsExec可以直接获得System权限的交互式Shell。
2、Metasploit 中的psexec模块
1 | search psexec |
未做测试
1 | use exploit/windows/smb/psexec |
0x06 WMI的使用
自PsExec在内网中被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,可以使用WMI进行横向移动。通过渗透测试发现,在使用wmi.exe进行横向移动时,Windows 操作系统默认不会将WMI的操作记录在日志中。因为在这个过程中不会产生日志,所以对网络管理员来说增加了攻击溯源成本。而对攻击者来说,其被发观的可能性有所降低、隐救性有所提高。
1、基本命令使用
在远程执行一个命令并将回显重定向到远程机器的txt文件里。
1 | wmic /node:1.1.1.3 /user:Administrator /password:@Admin process call create "cmd.exe /c ipconfig >c:\ip.txt" |
建立ipc后,使用type命令读取执行结果:
1 | net use \\1.1.1.3\ipc$ "@Admin" /user:administrator |