11

渗透技巧——Windows系统远程桌面的多用户登录

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E7%9A%84%E5%A4%9A%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

0x00 前言


在渗透测试中,经常会接触Windows服务器的远程桌面服务,通过界面对服务器进行管理。而对于普通的Windows系统,在某些条件下也需要进行界面操作。

虽然我们可以通过编写程序来实现界面操作(捕获桌面信息,压缩传输,发送鼠标键盘消息等),但是如果能够使用远程桌面服务,岂不是更加方便高效

那么,对应非服务器版本的Windows系统,在使用远程桌面服务有哪些需要注意的问题呢,本文将会逐个分析介绍。

0x01 简介


本文将要介绍如下内容:

  • 开启远程桌面的方法
  • 使用mimikatz支持远程桌面多用户的原理
  • 测试工具rdpwrap

0x02 开启远程桌面的方法


1、查询系统是否允许3389远程连接

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

1表示关闭,0表示开启

查看远程连接的端口:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

端口格式为16进制,如下图

Alt text

0xd3d转换为十进制为33389

2、本机开启3389远程连接的方法

方法1:通过cmd

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f

方法2:通过reg文件

内容如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"PortNumber"=dword:00000d3d

导入注册表:

regedit /s a.reg

注:

如果修改连接端口,系统重启后才能生效

补充

如果系统未配置过远程桌面服务,第一次开启时还需要添加防火墙规则允许3389端口,如下图

Alt text

修改防火墙配置,允许3389端口的命令如下:

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

3、远程连接方法

kali使用3389远程连接:

rdesktop 192.168.1.1:3389

Windows:

mstsc.exe

0x03 非服务器版本的Windows系统默认只允许一个账户登录


具体表现为:

远程登录时,使用与原系统相同的账户,原系统将被切换到登录界面

Alt text

使用不同的账户,登录时提示其他用户已登录到此计算机,如下图

Alt text

选择继续后,原系统桌面将弹框提示是否断开当前连接(30秒后默认选择同意,退回到登录界面)

Alt text

0x04 非服务器版本的Windows系统支持多用户登录的方法


1、使用mimikatz

privilege::debug
ts::multirdp

执行如下图

Alt text

开启多用户登录功能,最高支持到Win7

使用与原系统相同的账户,原系统还是会被切换到登录界面

使用与原系统不同的账户,登录成功,如下图

Alt text

通过查看mimikatz的源码找到修改思路,代码位置如下:

https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kuhl_m_ts.c

Windows在开启服务Remote Desktop Services时,会加载termsrv.dll,如下图

Alt text

通过修改内存中的termsrv.dll实现开启多用户功能,具体操作如下:

Win7 x86:

查找:0x3B86200300000F84

替换为:0xC78620030000FFFFFF7F9090

Win7 x64:

查找:0x39873C0600000F84

替换为:0xC7873C060000FFFFFF7F9090

当然,该方法在系统重启后失效

更近一步,如果我们直接修改文件termsrv.dll,能否实现永久开启多用户登录的功能呢?

继续接下来的测试

2、修改termsrv.dll

推荐工具: CFF Explorer

测试系统: Win7 x64

打开c:\windows\system32下的termsrv.dll

Hex Editor

查看十六进制数据39873C0600000F84

Alt text

0x0001738A处开始,选中12字节,替换为C7873C060000FFFFFF7F9090

保存dll

注:

需要先停止远程桌面服务才能替换termsrv.dll

替换termsrv.dll后,重新开启服务TermService

尝试使用不同用户远程连接,成功,验证该思路正确

完整操作如下:

1.查看Remote Desktop Services服务状态

sc qc TermService

2.如果服务启动,需要先关闭

net stop TermService /y

3.删除原termsrv.dll

del c:\windows\system32\termsrv.dll

4.替换新termsrv.dll

5.启动服务

net start TermService

6.远程连接

成功实现多用户登录

补充1:

Win7 x86:

查找:0x3B86200300000F84

替换为:0xC78620030000FFFFFF7F9090

补充2

常见Windows系统的版本号:

系统 版本号 Win7 6.1.7600 Win7sp1 6.1.7601 Win8 6.2.9200 Win8.1 6.3.9600

3、使用工具rdpwrap

工程地址:

https://github.com/stascorp/rdpwrap

工具地址:

https://github.com/stascorp/rdpwrap/releases

支持Win Vista - Win 10

不修改termsrv.dll,通过传入不同参数实现

RDPWInst.exe -i is

测试如下图

Alt text

释放rdpwrap.dll和rdpwrap.ini至System32文件夹

rdpwrap.dll会被加载到同termsrv.dll相同的进程

此时,能够使用不同用户进行远程连接

RDPWInst.exe -u

0x05 小结


本文介绍了三种支持远程桌面多用户登录的方法,适用于不同条件,对于替换termsrv.dll的方法,需要根据系统具体版本,使用不同的替换位置


LEAVE A REPLY


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK