privilege escalate with SUID

简介
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中文件的xs两类标志位表示文件的可执行权限, 其中s表示该文件使用文件所有者的权限执行.

3.在shell中运行命令时, shell会fork出一个子进程a, 子进程a继承当前账号的信息, 然后通过exec调用待执行的命令和对应的参数. 此时如果待执行命令设置类SUID标志位将以命令所有者的权限运行命令, 实现EUID的切换.

查找具有SUID的可执行文件

sys_suid_find

1
$ find / -perm -4001 -user root -type f 2>/dev/null

该命令常用于查找设置类SUID标志位的系统文件, 这类文件的利用方式已经比较成熟, 这类文件需要放在linux基线中进行检查, 以确保系统的安全.

self_suid_find

1
2
3
4
5
6
7
8
#!/bin/sh
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: nmapvimfindbashmorelessnanocp这些文件的提权方式与sudoers错误配置提权方式相同, 如有不会可参考sudoers_get_root_cheatsheet

对第三方suid文件进行模糊测试

1
2
3
4
5
6
7
8
# 假设第三方suid文件位于: /opt/giac/bin目录下
$ cut -f2 vul.txt|sed -e '/giac/!d' - >ssuid
$ cd /opt/giac/bin
#!/bin/sh
for file in `cat ssuid`; do
ls $file
./file `prel -e 'print "A"x2048'`
done

参考文章

1.discovering-local-suid-exploit-105447
2.suid-set-suid-linuxunix
3.use-misconfigured-suid-big-escalate-privileges-get-root

owefsad wechat
进击的DevSecOps,持续分享SAST/IAST/RASP的技术原理及甲方落地实践。如果你对 SAST、IAST、RASP方向感兴趣,可以扫描下方二维码关注公众号,获得更及时的内容推送。
0%