背景:
歷史原因伺服器上有10幾T的圖片,可能有圖片木馬需要清理
需求:查詢並清理圖片木馬
解決方法:編寫shell指令碼執行
提醒:如果需要定期檢測,可以把這個檢測指令碼加入定時進行定時檢測;
當然最好的方法是圖片和原始碼分開,圖片伺服器不執行執行動態檔案,
另外在圖片上傳的時候也可以檢測是否含有木馬。
工具/原料
shell
find命令
方法/步驟
把圖片轉為.xdd檔案
/usr/bin/xxd $x >$OMulu/${x/\./_}.xdd
用find命令 依據是否包含木馬特徵碼判斷原圖片是否含有木馬
find $Mulu -name "$EXT" xargs grep "request" >> $logFile
可以上面的程式碼自行運用 來實現更高階的功能:如自動,定時,報警等。
findpic.sh執行和原始碼
執行例項如圖
原始碼如下
```shell
#!/bin/bash
#需要傳遞檢測檔案型別,檢測目錄,輸出目錄。
# shell命令通過find 檢視圖片中是否包含木馬
# 木馬特徵需要根據實際情況進行更新
#支援型別:jpg gif png jpeg
#使用格式說明:./findpic.sh 型別 圖片目錄 xdd儲存目錄
#輸出的日誌檔案被儲存在 xdd目錄下的 findpiclog.log檔案中
#使用方法 ./findpic.sh gif /data0/test /data0/test/xdd
#使用方法 ./findpic.sh jpg /data0/test /data0/test/xdd
#使用方法 ./findpic.sh jpge /data0/test /data0/test/xdd
#使用方法 ./findpic.sh png /data0/test /data0/test/xdd
# shel字串替換
#echo ${test/\//\\}
EXT="*.jpg"
iMulu=./
OMulu=./xdd
if [ -n "$1" ] #如果$1即引數1不為空,又即存在引數1
then
EXT="*.$1" # 使用引號來使#被轉義
fi
if [ -n "$2" ] #如果$2即引數1不為空,又即存在引數1
then
iMulu="$2" # 使用引號來使#被轉義
fi
if [ -n "$3" ] #如果$3即引數1不為空,又即存在引數1
then
OMulu="$3" # 使用引號來使#被轉義
fi
mkdir -p $iMulu
mkdir -p $OMulu
myfunc()
{
for x in $(find $iMulu -name "$EXT")
do
if test -f $x
then
#echo "$x" >> mm.log
mkdir -p $(dirname $OMulu/${x})
/usr/bin/xxd $x >$OMulu/${x/\./_}.xdd
fi
if test -d $x
then
cd "$x";
myfunc;
cd ..
fi
done
}
myfunc
#查詢webshell
Mulu=$OMulu
logFile=$OMulu/findpiclog.log
EXT="*.xdd"
echo -ne '\n\n\n\n\n' >> $logFile
echo "---eval----$Mulu " >> $logFile
find $Mulu -name "$EXT" xargs grep "eval" >> $logFile
#增加一句話木馬的變形查詢
echo "---eval 一句話木馬 變形查詢----" >> $logFile
find $Mulu -name "$EXT" xargs grep "$\w*();" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---shell_exec----" >> $logFile
find $Mulu -name "$EXT" xargs grep "shell_exec" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---execute----" >> $logFile
find $Mulu -name "$EXT" xargs grep "execute" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---request----" >> $logFile
find $Mulu -name "$EXT" xargs grep "request" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---%----" >> $logFile
find $Mulu -name "$EXT" xargs grep "%>" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---base64_decode----" >> $logFile
find $Mulu -name "$EXT" xargs grep "base64_decode" >> $logFile
echo -ne '\n#=end\n\n\n\n' >> $logFile
```
注意事項
1)使用前請多次測試