前言: 小伙伴们还记得metasploit的模块可以使用hash登录windows么,可惜仅仅对XP,2003有效。本文会介绍一种使用hash登录 widnows2012R2服务器远程桌面的方法。是的,你没有看错,使用Hash登录远程桌面!windows2012R2中文版测试通过!
windows2012R2采用了新版的远程桌面协议(RDP).本文主要讨论一下新版协议中的”受限管理员”(Restricted Admin)这个特性.相信渗透测试人员和系统管理员都会对这个特性有足够的兴趣,通过这个特性,我们可以实现哈希传递攻击(Pass-the_Hash attacks).下面会先简要介绍一下哈希传递攻击,然后在windows2012R2上演示如何实现这样一种攻击.测试工具是我们在FreeRDP的基础上修改的,可以在这里下载.
简单点说,哈希传递就是用户登录的时候使用密码的哈希值代替密码来完成认证.很多windows的协议都是需要用户提供他们的密码哈希值,并不一定非得需要用户提供密码.这一点在渗透测试过程中非常重要,因为发现用户的密码哈希比发现用户的密码容易多了.
对于8.1版的RDP大部分情况下都需要用户提供他们的密码.但是有一个例外,那就是受限管理员模式,这种情况下用户可以使用他们的密码哈系来登录.
微软发布过防御哈希传递攻击的指南.
在windows2012R2运行”mstsc /?”命令,会给出如下对受限管理员模式的说明:
所以,开启了受限管理员模式之后,一些恢复已登录用户明文密码的工具比如minikatz就会失效了.基于这个理由,系统管理员肯定会被建议在2012的系统上开启这个特性.它的缺点是这个RDP会话中向外的连接可能无法通过认证,比如映射共享文件夹.所以连接一个独立的服务器的时候,这个特性很有用,连接一个跳板服务器的时候开启这个特性就没必要了.
2013年7月22日,微软发布了RDP协议v8.1的特性说明.可以通过点击”关于”来查看你的客户端是否支持v8.1
我会简单介绍一下新版协议中的有意思的地方,这样你就不用花时间去读微软464页的技术文档了.
想象我们正在一个内网环境中进行渗透测试.我们的目标是登录一台Windows2012R2的远程桌面.这台服务器是一个独立的系统,而且开了防火墙,只允许RDP协议登录.
这个网络里还有一些其他的主机,其中一台已经被我们攻破.使用fgdump(或者其他获取hash的工具)获取了管理员的密码hash如下:
1
|
test:1001:NO PASSWORD*********************:36374BD2767773A2DD4F6B010EC5EE0D:::
|
我们假设这个密码是一个非常变态的强密码,无法破解它.这在以前是没有办法确实这个test账户是否能登录我们的目标服务器的.不过在windows2012R2上,我们可以使用哈希传递攻击,使用这个密码hash来登录服务器.
测试工具是我们在最新版的FreeRDP的基础上修改的.最新版的FreeRDP支持了很多新的特性,比如:SSL和CredSSP(NLA),只需要稍微做一些修改就可以支持”受限管理员”模式了.
建立RDP连接,通常的命令如下:
1
|
$ xfreerdp -u test -p Portcullis1 192.168.226.129
|
在修改版的FreeRDP中,-p选项被改成了密码hash,使用如下:
1
|
$ xfreerdp -u test -p 36374BD2767773A2DD4F6B010EC5EE0D 192.168.226.129
|
下图是使用hash登录的截图,图片下方是登录使用的命令.
是的,就是这么简单.不过这个可能要等2012R2普及之后才能显示出它巨大的威力.
受限管理员模式顾名思义,只对管理员组有效.所以如果你获取到的用户属于远程桌面用户组,那么是无法通过hash登录的.会提示如下的错误:
原版的工具使用使用说明如下:
解压工具包:
1
2 |
[tar zxvf FreeRDP-pth.tar.gz (原参数写成了cfz,应该是笔误)
cd FreeRDP |
1
|
$ client/X11/xfreerdp -u test -p 36374BD2767773A2DD4F6B010EC5EE0D 192.168.226.129
|
1
2 |
$ sh cmake.sh
$ make |
测试心得
经过一番艰苦的斗争,在不同的机器上反复测试,不断失败,最后完美的方法就是下载最新版FreeRDP,然后自己打补丁编译.
1
2 3 4 5 6 |
git clone git://github.com/FreeRDP/FreeRDP.git
cd FreeRDP wget http://labs.portcullis.co.uk/wp-content/uploads/2013/10/FreeRDP-pth.diff_.txt patch -p1 < FreeRDP-pth.diff_.txt cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_SSE2=ON . make |