系统内核漏洞提权
当目标系统存在该漏洞且没有更新安全补丁时,利用已知的系统内核漏洞进行提权,测试人员往往可以获得系统级别的访问权限。
查找系统潜在漏洞
手动寻找可用漏洞
在目标主机上执行以下命令,查看已安装的系统补丁。
systeminfo
测试人员会通过没有列出的补丁号,结合系统版本等信息,借助相关提权辅助网站寻找可用的提权漏洞,如MS18-8120与KB4131188对应、CVE-2020-0787与KB4540673对应等。
借助WES-NG查找可用漏洞
下载地址:https://github.com/bitsadmin/wesng
1、在本地主机上执行以下命令,更新最新的漏洞数据库。
python3 wes.py --update
这里因为我的kali无法直接连接到更新源,所以使用proxy代理。
2、在目标主机上执行systeminfo命令,并将执行结果保存到sysinfo.txt中。然后执行以下命令,使用WES-NG进行检查。
python3 wes.py sysinfo.txt --impact "ELevation of Privilege"
#–impact 指定漏洞类型为提权漏洞
执行以下命令,查找所有已公开EXP的提权漏洞。
python3 wes.py sysinfo.txt --impact "Elevation of Privilege" --exploits-only
根据查到的可用漏洞和给出的Exploit参考链接,测试人员可以寻找相应的漏洞利用程序。然后上传利用。
示例:
下载下来sysinfo.txt使用wes-ng执行之后,发现CVE-2018-8120可以用,在msf搜索。
配置好变量后,run
本地提权成功
系统服务提权
通常情况下,用户安装的一些应用软件会在本地注册一些服务,并且大多数服务在计算机开机时以系统SYSTEM权限启动。应用软件在注册服务时,会在以下路径中创建相应的注册表项。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\services
如下图中,其中的ImagePath健指向该系统服务所启动的二进制程序。
Windows系统服务在操作系统启动时运行,并在后台调用其相应的二进制文件。由于大多数系统服务是以系统权限(SYSTEM)启动的,如果让服务启动时执行其他程序,该程序就可以随着服务的启动获得系统权限,这是利
用系统服务提权的主要思路。
系统服务类提权从主观上可以归咎于用户的配置疏忽或操作错误,如不安全的服务权限、服务注册表权限脆弱、服务路径权限可控、未引用的服务路径等。
不安全的服务权限
ACL定义了安全对象的访问控制策略,用于规定哪些主体对其拥有访问权限和拥有什么样的权限。Windows的系统服务正是通过ACL来指定用户对其拥有的权限。常见的权限如下表:
低权限用户可以检查“Authenticated Users”组和“INTERACTIVE”组对系统服务的权限。前者为经过身份验证的用户,,包含系统中所有使用用户名、密码登录并通过身份验证的账户,但不包括来宾账户;后者为交互式用户组,包含系统中所有直接登录到计算机进行操作的用户。默认情况下,这两个组为计算机本地“Usrs”组的成员。
如果拿下的主机没有accesschk。
下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/accesschk
下载完上传到目标主机
环境搭建:先用本地管理员授予newman用户对apache服务的完全控制权限。
net start
查看服务。
给newman赋予apache权限。
subinacl.exe /service Apache2.4 /grant=newman=F
环境完成。提权操作
执行以下命令:
accesschk.exe /accepteula -uwcqv "newman" *
枚举目标主机“newman”是否具有更改服务配置的权限。
发现newman对apache服务完全控制权限。此时执行以下命令,把该服务启动时执行的二进制文件替换为预先上传的攻击载荷。当服务重启时,载荷会随服务启动继承系统权限。
sc config 服务名 binPath="cmd.exe /k c:\beacon.exe"
sc config Apache2.4 binPath= "cmd.exe /k c:\beacon.exe" #大小写敏感
修改成功,重启一下该服务。
成功攻击
服务注册表权限脆弱
Windows的注册表中存储了每个系统服务的条目,而注册表使用ACL来管理用户对其所拥有的访问权限。如果注册表的ACL配置错误,使得一个低权限用户对服务的注册表拥有写入权限,此时可以通过修改注册表来更改服务配置。例如,修改注册表中的ImagePath键,从而变更服务启动时的二进制文件路径。
1、执行如下,通过AccessChk在目标主机中检查newman用户是否对某个服务的注册表有写入权限
accesschk.exe /accepteula newman -uvwqk HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
发现对apache服务的注册表拥有完全控制权限.
2、将该服务注册表中的ImagePath键指向预先上传的攻击载荷:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache2.4 /v ImagePath /t REG_EXPAND_SZ /d "cmd.exe /k c:\beacon.exe" /f
3、检查该用户是否对该服务由重启权限。
accesschk.exe /accepteula newman -ucqv Apache2.4
从执行结果可知,当前用户有权限重启apache服务。
重启后
服务路径权限可控
如果目标主机上用户存在错误配置或操作,使得一个低权限的用户对此服务调用的二进制文件或其所在目录拥有写入权限,那么可以直接将该文件替换成攻击载荷,并随着服务的启动继承系统权限。
使用以下命令,用Accesschk查看apache这个服务的二进制文件所在目录是否有写入权限
accesschk.exe /accepteula -quv "C:\phpStudy\Apache\bin\"
有权限,可替换。
未引入的服务路径
未引用的服务路径(Unquoted Service Path)漏洞曾被称为可信任的服务路径(Trusted Service Path),利用了Windows文件路径解析的特性。当服务启动所执行的二进制文件的路径中包含空格且未有效包含在引号中时,就会导致该漏洞。
造成该漏洞的根本原因在于windows系统中用户创建进程的CreateProcess函数中,如下语法:
BOOL CreateProcessA(
[in, optional] LPCSTR lpApplicationName,
[in, out, optional] LPSTR lpCommandLine,
[in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes,
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] BOOL bInheritHandles,
[in] DWORD dwCreationFlags,
[in, optional] LPVOID lpEnvironment,
[in, optional] LPCSTR lpCurrentDirectory,
[in] LPSTARTUPINFOA lpStartupInfo,
[out] LPPROCESS_INFORMATION lpProcessInformation
);
其中,lpApplicationName参数用户指定要执行的模块或应用程序的路径或文件名。如果完整路径中包含空格且未有效包含在引号中,那么对于该路径中的每个空格,windows会按照从左到右的顺序依次尝试寻找并执行与空格前的名字相匹配的程序。例如:路径C:Program Files\Sub Dir\Program Name.exe
系统依次寻找并执行以下程序:
C:\Program.exe
C:\Program Files\Sub.exe
C:\Program Files\Sub Dir\Program.exe
C:\Program Files\Sub Dir\Program Name.exe
当系统在依次尝试服务路径中的空格时,会以当前服务所拥有的权限进行。因此,测试人员可以将一个经过特殊命名的攻击载荷上传到受影响的目录中,当重启服务时,攻击载荷将随着服务的启动继承系统权限。但前提是当前用户对受影响的目录具有写入权限。
使用vmic查看是否存在该种未引入的服务路径。
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
可能存在,把攻击载荷名字命名成two.exe文件,放入one file文件下。
成功上线。