前言:小伙伴们还记得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会话中向外的连接可能无法通过认证,比如映射共享文件夹.所以连接一个独立的服务器的时候,这个特性很有用,连接一个跳板服务器的时候开启这个特性就没必要了.
RDP协议v8.1
2013年7月22日,微软发布了RDP协议v8.1的特性说明.可以通过点击”关于”来查看你的客户端是否支持v8.1
我会简单介绍一下新版协议中的有意思的地方,这样你就不用花时间去读微软464页的技术文档了.
37页的下方我们可以看到RDP客户端可以发送一个RESTRICTED_ADMIN_MODE_REQUIRED 标志.我们的测试工具就是发送了这个标志.
同样在这一页上的说明是这样的:”If the server supports this mode then it is
acceptable for the client to send empty credentials in the
TSPasswordCreds structure defined in MS-CSSP section 2.2.1.2.1.”(如果服务器支持这个模式,那么它会接受客户端用TSPasswordCreds这个结构发送空的认证信息).所以我们的测试工具需要发送一个空域名,空用户名,空密码的TSPassword结构到服务器端.
概念证明:场景
想象我们正在一个内网环境中进行渗透测试.我们的目标是登录一台Windows2012R2的远程桌面.这台服务器是一个独立的系统,而且开了防火墙,只允许RDP协议登录.
这个网络里还有一些其他的主机,其中一台已经被我们攻破.使用fgdump(或者其他获取hash的工具)获取了管理员的密码hash如下:
test:1001:NO PASSWORD*********************:36374BD2767773A2DD4F6B010EC5EE0D:::
我们假设这个密码是一个非常变态的强密码,无法破解它.这在以前是没有办法确实这个test账户是否能登录我们的目标服务器的.不过在windows2012R2上,我们可以使用哈希传递攻击,使用这个密码hash来登录服务器.
概念证明:实现
测试工具是我们在最新版的FreeRDP的基础上修改的.最新版的FreeRDP支持了很多新的特性,比如:SSL和CredSSP(NLA),只需要稍微做一些修改就可以支持”受限管理员”模式了.
建立RDP连接,通常的命令如下:
$ xfreerdp -u test -p Portcullis1 192.168.226.129
在修改版的FreeRDP中,-p选项被改成了密码hash,使用如下:
$ xfreerdp -u test -p 36374BD2767773A2DD4F6B010EC5EE0D 192.168.226.129
下图是使用hash登录的截图,图片下方是登录使用的命令.
是的,就是这么简单.不过这个可能要等2012R2普及之后才能显示出它巨大的威力.
限制条件
受限管理员模式顾名思义,只对管理员组有效.所以如果你获取到的用户属于远程桌面用户组,那么是无法通过hash登录的.会提示如下的错误:
工具使用
原版的工具使用使用说明如下:
解压工具包:
tar zxvf FreeRDP-pth.tar.gz (原参数写成了cfz,应该是笔误) cd FreeRDP
使用编译好的二进制文件:
$ client/X11/xfreerdp -u test -p 36374BD2767773A2DD4F6B010EC5EE0D 192.168.226.129
重新编译命令:
$ sh cmake.sh $ make
如果遇到编译问题,可以参考FreeRDP的文档.在Ubuntu12.04上测试通过.
测试心得
经过一番艰苦的斗争,在不同的机器上反复测试,不断失败,最后完美的方法就是下载最新版FreeRDP,然后自己打补丁编译.
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