简介
SUID是一种特殊的授权方式, 从攻击者视角来说, SUID文件分为两类: 系统自带文件、第三方文件; 系统自带文件是企业中基线检查的重点, 因此通常无法很好的利用, 但第三方文件可操作空间就比较大了.
但由于现阶段水平不够支撑来分析第三方程序的问题, 因此将主要用作SUID文件的cheat sheet
, 关于分析第三方文件SUID的问题将在日后添加, 文末第一篇文章专门讲如何挖掘第三方SUID文件的漏洞.
ps://SUID提权技术已经发展很久了, linux系统厂商已经做了内核层的防范, 常规提权方式已无法提权, 因此需开动脑筋构造新奇的提权方案.
目录
- SUID文件查找及攻击
SUID文件的查找及利用
1.linux中RUID、EUID两个概念被用于表示账号的权限, RUID表示当前用户的真实ID, 即uid; EUID表示当前账户的有效ID, 通常情况下等于RUID, 当在linux系统中执行操作时, 内核会先检查RUID、EUID是否有对应操作的权限, 然后再执行操作. 在一些特殊的场景下EUID不等于RUID, 如:运行设置了SUID或SGID标志位的程序, 此时EUID将会设置为文件所有者的uid.
2.linux中文件的x
、s
两类标志位表示文件的可执行权限, 其中s表示该文件使用文件所有者的权限执行.
3.在shell中运行命令时, shell会fork出一个子进程a, 子进程a继承当前账号的信息, 然后通过exec调用待执行的命令和对应的参数. 此时如果待执行命令设置类SUID标志位将以命令所有者的权限运行命令, 实现EUID的切换.
查找具有SUID的可执行文件
sys_suid_find1
$ find / -perm -4001 -user root -type f 2>/dev/null
该命令常用于查找设置类SUID标志位的系统文件, 这类文件的利用方式已经比较成熟, 这类文件需要放在linux基线中进行检查, 以确保系统的安全.
self_suid_find1
2
3
4
5
6
7
8
tempfile="/tmp/vul.txt"
trap "rm $tempfile" 0
find / \( -type f -a -user root -a -perm -4001 \) -print 1> $tempfile 2>/dev/null
for file in `cat $tempfile`; do
strings -a $file | awk '/^gets$|^strcpy$|^strcat$|^sprintf$/\
{ printf ("%-10s \t %-50s \n"), $1, file }' "file=$file" -
done
上述脚本常用于查找设置类SUID的自定义文件, 这类文件通常是定制化开发的, 无成熟的利用方式, 可通过strings
命令检查文件中可能存在漏洞的字符串.
系统自带文件产生SUID
cheat_sheet: nmap
、vim
、find
、bash
、more
、less
、nano
、cp
这些文件的提权方式与sudoers
错误配置提权方式相同, 如有不会可参考sudoers_get_root_cheatsheet
对第三方suid文件进行模糊测试
1 | # 假设第三方suid文件位于: /opt/giac/bin目录下 |
参考文章
1.discovering-local-suid-exploit-105447
2.suid-set-suid-linuxunix
3.use-misconfigured-suid-big-escalate-privileges-get-root