巧合的是,我注意到,我托pipe的网站上的一些PHP文件已经注入了恶意软件:它们都在原始/正确的代码之前有以下行:
<?php eval(gzinflate(base64_decode('[malware code]')));?>
什么是通过我的所有网站进行recursion扫描的最佳方式,并从包含它的任何文件中删除此行(始终是第一行)?
我有完整的根访问权限。 我不确定这是否是通过现在封闭的洞进入的,还是这个盒子仍然是脆弱的,所以我想做一个干净的扫描,密切监视文件的变化。
问候,Evert
您可以使用类似下面的命令行来recursion删除所有*.php文件中包含malware code行:
find . -name "*.php" -exec sed -i '/malware code/d' {} \;
不知道“恶意代码”是否是您用来匿名的替代品,因此您可以使用:
find . -name "*.php" -exec sed -i '/eval(gzinflate(base64_decode/d' {} \;
不过,我build议你在运行这个之前运行备份。
那么,你最好的select就是修复你的安全漏洞。
这个解决scheme可以在UNIX系统上工作。 如果您安装Cygwin或类似的东西,它也可以在Windows系统上运行。
如果违规行总是第一行,那么“尾+2”是摆脱它的最好方法。
我build议你将“tail”的输出redirect到一个新的文件,这样你可以做一些validation。 使用仅包含恶意软件行的第三个文件(例如malware_line.txt)将使您能够validation您没有以某种意外的方式更改您的文件。
如果脚本输出以下消息,则需要手动检查文件:
Files FILENAME.orig and FILENAME.check differ
这是一个脚本,将只剥离名为* .php或* .PHP的第一行表单文件(如果恶意软件行存在于文件中的其他位置,则会提供备用解决scheme,但validation将无法执行)。
find . -name "*.php" -o -name "*.PHP" 2>/dev/null | while read FILENAME do BADFILE=0 # If the file contians the malware line, we want to remove it grep -q 'eval(gzinflate(base64_decode' $FILENAME && BADFILE=1 if [[ $BADFILE != 0 ]] then echo "Processing: $FILENAME" cp $FILENAME ${FILENAME}.orig # Save a backup copy of file # Remove the offending "first" line. tail +2 ${FILENAME}.orig > ${FILENAME}.fixed ## ## Alternatively, you could use "grep -v" here instead of the above "tail +2" ## to stip the malware line form anywhere in the file. ##grep -v 'eval(gzinflate(base64_decode' $FILENAME > ${FILENAME}.fixed # Validate that we did not munge up our file cat malware_line.txt ${FILENAME}.fixed > ${FILENAME}.check # Recreate the bad file # Compare the original with the recreated file to prove that you only removed # the malware line diff -q ${FILENAME}.orig ${FILENAME}.check && cp ${FILENAME}.fixed $FILENAME # Cleanup after ourselves rm -f ${FILENAME}.check fi done