在获得目标机器基本权限以后,面临我们最大的问题就是如何从普通用户提升为管理员用户。众所周知,Windows服务是以SYSTEM权限运行的,因此,它们的文件夹、文件和注册的键值,都是受到强访问控制保护的。但在某些情况下,会有一些没有受到有效保护的服务。
windows服务漏洞。Windows系统服务运行在后端,由操作系统通过SCM(服务控制管理)控制,它负责处理所有发送给windows服务的命令,接收windows服务的更新。如果我们能够修改一个服务的二进制文件路径属性,在重启服务的时候,我们可以让服务以system权限替我们启动一个命令。
同样此时假设我们通过一系列前期渗透,已经成功获得了目标机的meterpreter shell(过程略),当前权限为administrator,我们想获取系统的system权限,但是尝试了各类提权方法后失败。
1. 先检测目标主机是否存在该漏洞。
我们将检查大量的访问权限,最简单的方法时使用AccessChk(SysInterals套件中的一个工具)。这个工具是由Mark Russinovich写的用于在Windows上进行一些系统或程序的高级查询、管理和故障排除。在进行渗透测试的时候鉴于反病毒软件的检测等原因我们应该尽量少的接触目标磁盘,由于AccessChk是微软官方工具,所以基本不会引起杀毒软件的报警。
中文版下载地址:http://technet.microsoft.com/ZH-cn/sysinternals/bb664922 。
首先我们Metasploit下使用upload命令将AccessChk上传至目标机下,如图1所示。
然后我们到目标机CMD下就可以使用如下的命令来判断到底哪个服务可以被认证的用户修改,不论用户的权限级别。如图2所示。
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
Authenticated Users 是指Windows系统中所有使用用户名、密码登录并通过身份验证的账户,不包括来宾账户Guest。运行后我们看到有一个可以修改的服务PFNet,SERVICE_ALL_ACCESS意思我们对PFNet的属性拥有完全控制权。正常情况下未授权的用户是不应该有这些Windows服务权限的,但由于管理员甚至是第三方开发人员错误的配置才可能导致这种漏洞的出现。
知识点:几个有用的accesschk命令
第一次执行sysinternals工具包里的工具时,会弹出一个许可协议弹框,这里可以添加一个参数“/accepteula”去自动接受许可协议
accesschk.exe/accepteula
找出某个驱动器下所有权限配置有缺陷的文件夹路径
accesschk.exe–uwdqsUsersc: accesschk.exe–uwdqs"AuthenticatedUsers"c:
找出某个驱动器下所有权限配置有缺陷的文件路径
accesschk.exe–uwqsUsersc:*.* accesschk.exe–uwqs"AuthenticatedUsers"c:*.*
接着使用SC命令来查看PFNet服务的配置也可以用来管理Windows服务,见图3所示。
BINARY_PATH_NAME值指向了该服务的可执行程序(Executable.exe)路径,如果如果我们将这个值修改成任何命令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行。(确保SERVICE_START_NAME被指向了LocalSystem)。
2.Metasploi下设置模块参数
Metasploit中有对应的利用模块service_permissions,我们还是把当前的meterpreter shell转为后台执行。然后使用该模块,并设置相应参数。如图4所示。
3.攻击
输入run命令,可以看到自动反弹了一个新的meterpreter,我们在此meterpreter shell下输入getuid 发现是system 权限,如图5所示。证明我们已经提权成功了。
我们输入sessions可以看到多了一个ID为5的就是新反弹回来的,如图6所示。
该模块尝试使用两种方法来提升到system权限。第一种,如果Meterpreter session正以管理员权限运行,该模块会尝试创建并运行一个新的服务。如果当前账户权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹权限有问题,并允许对其进行劫持。
当创建新的服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装的文件路径是随机生成的。使用该模块的AGGRESSIVE选项会利用目标机上每一个有缺陷的服务。当该选项被禁止的时候,该模块在第一次权限提升成功后就会停下来。