服务提权
服务提权,是 Windows 平台提升权限的经典途径,但实际上服务提权又可以根据利用的根源分为 3种 更具体的不当配置,甚至。一些有关服务提权的 CVE 或者exploit-db上漏洞原理也是来自这 3 个 (如果你发现了某个应用漏洞也是相同原理的服务匹配以下任一情形,只要你愿意申请,就能有 CVE)。
服务提权可以分为这三类:
配置不当的服务权限
攻击者对于服务本身具有特定权限,例如修改服务的二进制文件路径、停止/启动服务、修改其他服务参数等。因此,利用手法可以是将服务二进制文件指定为攻击者的载荷。此外,由于还可以修改服务的其他参数,例如是否自启动,可以实现主机持久化。在下一个章节我们会进行介绍。
修改二进制文件路径:将服务的二进制文件指向恶意的载荷
停止与启动服务:使修改生效
启动类型:通过服务来维持访问
未用引号引用的服务路径
因为文件夹或者文件是允许存在空格的,例如文件夹 “C:\Program Files”,但如果不加引号,即 C:\Program Files,Windows会把 C:\Program 当成目标文件夹。并且当服务区解析二进制文件的地址的时候,例如该二进制文件地址为 “C:\Program Files\Weak Services\Unquoted Service.exe” ,那么从前往后依次解析到的是
C:\Program.exe
C:\Program Files\Weak.exe
C:\Program Files\Weak Services\Unquoted.exe
因此,如果我们想要利用,可以在上述任一一路径丢入一个二进制文件。但需要注意的是,我们需要对响应的文件夹具有写权限。
如果还是有些不理解,大家可以记住这样的模式:对于一个二进制文件的地址如果是 "C:\A B\C D\E F.exe"
我们可以在 C:\ 丢入 A.exe,即 C:\A.exe
我们可以在 "C:\A B" 丢入 C.exe,即 "C:\A B\C.exe"
我们可以在 "C:\A B\C D\" 丢入 E.exe,即 "C:\A B\C D\E.exe"
我们以 CVE 漏洞 CVE-2022-37197 (https://www.exploit-db.com/exploits/51029) 举例,二进制文件的地址为 C:\Program Files (x86)\IOTransfer\Updater\IOTUpdater.exe,并没有用引号包裹该路径,那么会导致路径解析错误,通过在特定路径防止恶意载荷,可以让恶意载荷被读取。
C:\>wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """
IOTransfer Updater IOTUpdaterSvc C:\Program Files (x86)\IOTransfer\Updater\IOTUpdater.exe
Auto
C:\>sc qc IOTUpdaterSvc
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: IOTUpdaterSvc
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\Program Files (x86)\IOTransfer\Updater\IOTUpdater.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : IOTransfer Updater
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
配置不当的服务二进制文件
攻击者对于该服务的二进制文件具有修改权。因此,常规的利用手法是用生成一个恶意的服务二进制文件,替换掉原有的服务二进制文件。之后,该服务就会执行恶意的二进制文件。
让我们来查看 CVE-2021-35312 的利用 (https://www.exploit-db.com/exploits/50184):
根据描述,我们发现二进制文件 RemoteBackup.Service.exe 默认被分配了错误的文件权限,导致低权限用户也有变更权。通过替换成恶意载荷,便可以获得 SYSTEM 权限。
不用担心一时间无法仔细区分出这 3 种脆弱的服务配置,powerup.ps1 脚本如果发现了上述任一类型,也就是只要是实际可利用的脆弱服务,它能帮助我们自动利用。