环境是windows+apache+php+tomcat+jk
近日发现我的WEB服务器遭到攻击,篡改了我的首页信息,杯具的是不是我先发现的,是我的同事发现了这一信息。我打开首页后发现,篡改的首页信息是隐藏的。右击查看源码在最下面找到了一些莫名奇妙的友情连接,就去WEB服务器上查找可疑的文件,并查看WEB的access.log 没有发现问题(马虎)。 查看网站的主目录发现有可疑文件,分别在网站的主目录下和FCK下有一下0.jsp 1.jsp 00.php文件,并在FCK文件夹里发现有可以的exe文件,分别有三个文件cmd.exe和FindPass.exe 看到这里心想完了,系统不保了,看了一下文件的上传日期就再次查看了一下access.log文件,发现有可疑的地方并执行了一个jsp的文件,马上复制这个地址在浏览器上打开发现 是一个“小马” 能执行成功。小马上传上去以后他们就可以接着上次大马和其他的他们用到的程序了,看来是我们WEB部署的程序上有上传的漏洞。被人家拿到了webshell。
分析:
由于环境是支持jsp和php的所以在jsp的环境运行php是可以的,在php的环境下运行jsp也是可以运行的。上传目录的权限也有执行的权限。程序上也没有做真实的文件类型验证。
做修复工作:
服务上优化:
把运行jsp的目录禁止php的运行,把上传目录的脚本解析权限去掉。
apache的配置文件设置的太糙。
以前设置apache的配置文件是,除了.jpg .js .png .html等一些静态的文件又apache来处理,以外的所有有tomcat来处理。
现在要修改tomcat来处理的一些用到的扩展名,其它都由apache来处理。
这样才能拒绝扩展名的执行,因为apache和tomcat一起工作时 apache会将tomcat处理的文件名先给tomcat然后在看禁止权限规则。由于我们的网站都是动态的地址所以用不到jsp后缀名,所以.jsp的后缀名可以交给apache来处理,可以拒绝这个扩展名也可以不拒绝,就是不拒绝这个jsp扩展名的文件打开以后他也不会执行,他会显示这个jsp文件的内容。即使他改成jsp1 也是不能执行的。
然后再限制一下php
php就好限制了,网上有很多。把php_flag engine off 加到不想让php执行的目录权限里就可以了
最终的配置文件:
#vi uriworkermap.properties
###这里是交给我们的tomcat来处理的后缀名
JkMount /*.key tomcat
JkMount /*.aaa tomcat
……
httpd.conf 配置文件修改
#vi httpd.conf
###这个目录不允许运行php脚本,和禁止运行.jsp*、.php*的后缀名
<Directory "D:\opt\www\webroot">
php_flag engine off
<Files ~ "\.(php|jsp)">
Order allow,deny
Deny from all
</Files>
</Directory>
重启apache服务,测试吧!!!
以上配置都亲自测试过。哪里写的不好的、看不明白的请多多指点。
程序上优化:
程序上的优化就是来做真实的文件类型来判断是否能够上传。