BINARY_PATH_NAME 如果没有加双引号的话,在启用服务过程中查询路径的时候,遇上空格会造成截断,那么利用思路就出来了,在C:Program Files(程序路径,我本机是安装在C盘)这个目录的同级目录 也就是C: 放置一个Program的程序,启用服务的过程中是不是就加载了这个程序呢?
当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。
当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
这可能有点不直观,所以让我们来看一个实际的例子。假设服务配置类似于以下存在bug的示例服务:
C:Program FilesVulnerable ServiceSub Directoryservice.exe
Windows命令解释程序可能会遇到名称中的空格,并且希望通过将字符串包装在引号中来对它们进行转义。在上面的示例中,如果系统运行该服务,它将尝试运行以下可执行文件:
C:Program.exe
C:Program FilesVulnerable.exe
C:Program FilesVulnerable ServiceSub.exe
C:Program FilesVulnerable ServiceSub Directoryservice.exe
为了讲清楚这个漏洞,定义一个名为example.exe的程序,这是一个简单打印出自己名称的正常二进制文件:
#include
void main(int argc, char *argv[])
{
printf("[*] Executed %s", argv[0]);
}
考虑当从命令行通过其绝对路径执行此程序时会发生什么,在引号内:
C:>"C:ExampleSub Directoryexample.exe"
[*] Executed C:ExampleSub Directoryexample.exe
C:>
or:
C:>C:ExampleSub Directoryexample.exe
'C:ExampleSub' is not recognized as an internal or external command, operable program or batch file.
C:>
这意味着如果服务路径不加引号,我们可以放置一个与第一个名称相同的恶意二进制文件作为文件系统对象,并在其名称中包含空格,并且当服务尝试执行其二进制文件时会将它运行。我们所需要的只是对路径中目录的写权限。
通过隐藏example.exe来利用上述示例,C:ExampleSub.exe在没有空格的情况下调用上面的示例,如易受攻击的服务:
C:>C:ExampleSub Directoryexample.exe
[*] Executed C:ExampleSub
C:>
写入我们的木马Sub.exe
成功上线
一条命令找到这些错误配置:
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows" |findstr /i /v """
总结:
1、在msf中exploit/windows/local/trusted_service_path,这个模块也可以进行相应的利用
2、比较鸡肋,因为大家都知道C: 目录默认是不让写的,但是大家可以去了解下什么叫Weak File Permissions,能帮助到你进行深一步的提权!
3、对于路径配置的提权,我们所需要的权限只需要能写