1. 原理和利用

  Cron Jobs 计划任务。通过/etc/crontab文件,可以设定系统定期执行的任务。但crontab文件只能是root权限进行编辑。当我们以普通权限远程登录用户的时候,查看/etc/crontab文件内容,如果存在就可以尝试利用。

  Crontab 语法:

    * * * * * <username,比如root,来限定权限> <command to be executed>
    - - - - -
    | | | | |
    | | | | ----- Weekday (0 - 7) (Sunday is 0 or 7, Monday is 1...)
    | | | ------- Month (1 - 12)
    | | --------- Day (1 - 31)
    | ----------- Hour (0 - 23)
    ------------- Minute (0 - 59)

    例如,30 21 * * * cd /Users/vickie/scripts/security; ./scan.sh

    这个crontab语句告诉系统在每天的9:30(*代表所有),进入存放scan.sh的shell的文件夹内然后执行该shell。

  我们以maintenance.sh为例。假如存在30 21 * * * cd /path/to/maintenance.sh命令。并且当这个maintenance的写权限是对所有用户开放时,我们就可以在这个文件中添加命令,最终以管理员的权限执行该命令。此时就可以产生提权。

  例如,我们在该文件中添加echo “vickie ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers命令,这时名为sudoer的用户就提升为管理员权限。

  拿网上最流行的例子为例,该python文件名为cleanup.py。作用是删除cleanup文件夹下所有的文件。

1 #!/usr/bin/env python
2 import os
3 import sys
4 try:
5        os.system('rm -r  /home/moonteam/cleanup/*')
6 except:
7     sys.exit()

  其在crontab的命令为:

1 */2 * * * * root /tmp/cleanup.py

  这时由于cleanup.py的权限是对所有人开放,我们可以将里面的代码改成:

  os.system('chmod u+s /bin/dash')  //启用/bin/dash的SUID

  等到两分钟以后该脚本被执行后,输入/bin/dash,进入到root权限,提权成功!

 

2. 获得文件的可写入权限(通配符*注入)

  这里以chown命令为例,*注入还有其他命令都可以,思路差不多。

  例如一个按时间的自动执行脚本的内容为:

1 cd directory1
2 chown root *

  对于这个管理员而言,这个*就是不安全的使用方法,假如directory1文件夹下有文件1.txt,2.txt。那么对于这个命令而言,chown root *就可以转换成:

1 chown root 1.txt 2.txt

  然而这个chown命令,有--reference参数,该参数的作用为:把对指定文件的root权限授予给你指定的文件的拥有者或组。

  例如以下的命令:

1 chown root 1.txt --reference=create_by_hacker.txt

  此时表示create_by_hacker.txt的创建者hacker(夺取了root用户的)拥有了1.txt的所有权。

  对于命令来说,如果有文件的名字是"--reference=create_by_hacker.txt",那么它会优先执行命令而不是代表一个文件。

  这时再来看命令: chown root *

  由于文件夹中有个文件叫--reference=create_by_hacker.txt和create_by_hacker.txt,此时这条命令就变成为: 

1 chown root 1.txt 2.txt create_by_hacker.txt --reference=create_by_hacker.txt

  由于优先执行命令的特性,1.txt 2.txt create_by_hacker.txt --reference=create_by_hacker.txt这四个文件的所有权都将被hacker用户拿走。

  假如1.txt,2.txt换成其他文件(比如python文件或者.sh文件),都是root所有,并且在crontab内被执行,那么我们就可以获取到这些文件的写入权限,然后写入提权代码即可。

  命令执行之Linux Shell中的通配符注入 - 简书 (jianshu.com)

  利用通配符实现Linux本地提权 - 云+社区 - 腾讯云 (tencent.com)

 

3. 环境变量漏洞

  crontab中,可以指定其要执行的文件的环境变量。如果环境变量中包含类似/tmp这种全用户都有权限的路径并且要自动执行的文件的路径不是绝对路径而是相对路径(/tmp等路径的环境变量在被自动执行的文件的环境变量的前面,即优先级大于其原来本身的路径),此时我们就可以利用该漏洞。

  例如,crontab中有一个命令为shell.sh且环境路径中/tmp路径优先级较高。此时我们就可以在/tmp中创建名为shell.sh的文件并写入攻击代码:

1 #!/bin/bash
2 cp /bin/bash /tmp/rootbash
3 chmod +xs /tmp/rootbash

  然后等文件执行后,输入/tmp/rootbash -p即可变成root权限

 

内容部分翻译和参考于:

Privilege Escalation Via Cron. Exploiting Misconfigured Cron… | by Vickie Li | The Startup | Medium

Linux Privilege Escalation - Cron Jobs (hackstreetboys.ph)

还有以上的两个通配符注入文章。  

posted on 2021-08-10 15:42  EndlessShw  阅读(346)  评论(0)    收藏  举报