网站被注入,由于每个web前端上包含的项目太多,一个htdocs目录下就20几个,查起来也比较头疼。之前也遇到过,但是那次是被上传到图片服务器,那个服务器根本就没有PHP环境,没有造成什么影响。而这次不同,有几个项目不是自己开发的,采用开源的UC-home。

摘自:http://blackbap.org/bbs/viewthread.php?tid=1058

   影响版本:Ucenter Home 2.0(官方最新) + Ucenter 1.5(官方最新)

漏洞描述:
uchome<=2.0的程序中js.php文件存在代码执行漏洞,原因是正则匹配时引号使用不当,导致可以任意提交并执行PHP代码。
Php中单引号与双引号是有区别的:
" "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
' '单引号里面的不进行解释,直接输出。
这里正则匹配后的2在双引号里,导致了代码可以执行。

 1. 查找webshell

    找这玩意儿,很恶心个事。

    推荐几个命令

     find /data0/htdocs -name "*.php" |xargs grep "eval" |more

  find /data0/htdocs -name "*.php" |xargs grep "shell_exec" |more

  find /data0/htdocs -name "*.php" |xargs grep "passthru" |more

  find /data0/htdocs -name "*.php" |xargs grep "base64_decode" |more

      最后一条适用于webshell被转化成base64编码了,但是脚本里还是有base64_decode解码的函数滴,当发现某个文件有base64_decode函数并且紧跟其后一大堆英文数组组合的东西,我们就需要注意了,找到这个文件,把它解码看看内容。

       2.清除干净这些害人的webshell

       3.做好防护

          这里只说一个新方法(LAMP环境):

                        所有项目都是走的svn通道,每个php都会在.svn/text-base/有对应的记录。我们可以写一个脚本,在每个php程序执行之前先去执行这个脚本,这个脚本的功能就是检查待执行的php文件是否存在于svn版本控制库中,如果不存在直接exit;并报警。

                    在php.ini中设置执行每个php文件之前先执行某个脚本

             auto_prepend_file = /usr/local/webserver/php/auto_prepend.php