一.Webshell是什么?
webshell就是asp,php,jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。
二.Webshell可以做什么?
黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。。
三.Webshell主要模式
下面是别人总结的几种方式,我加了描述和自己的一些看法和经历
1. 直接上传获取webshell
通过上传文件功能,比如评论图片等,这类主要是后台需要验证上传文件。比如mimetype后缀名。
我们网站出现过一次情况验证了mimetype,在对上传文件后move文件到上传目录的时候取了file[‘name’]做最后的拼接, 而验证是验证了file['tmp_name']的对应mimetype和后缀。
攻击者通过修改post的数据包里面的name值使得上传后的文件从png转成了php。。。解决办法当然是把name值也进行了验证
2.添加修改上传类型
很多管理后台允许修改前台上传功能的支持的文件类型,而通过攻击这部分将对应的文件类型增加进去,然后通过前台的上传就可以了。
这个主要是功能防范,如果用的是开源的系统,没需求使用该功能可以直接将修改支持文件类型的功能裁剪掉 。。
3.利用后台管理功能上传webshell
这部分其实也是后台的一些功能漏洞,允许修改一些配置文件,直接将配置文件暴露在前端访问。
或者比如增加友情链接功能 直接在友情链接出将代码写入比如http://aa.com</div><?php eval($_GET['aaa']);?> 之类的嵌入到友情链接的页面,这样友情链接的功能直接就成了webshell
4. 利用后台管理向配置文件写webshell
跟3也是类似的,将代码写到一些文件里。对应的文件里就有了可执行的代码。
5. 利用后台数据库备份及恢复获取webshell
主要是利用后台对access数据库的“备份数据库”或“恢复数据库”功能,“备份的数据库路径”等变量没有过滤导致可以把任意文件后缀改 为asp,从而得到webshell
6. 利用数据库压缩功能
7 asp+mssql系统
8. php+mysql系统
SELECT …… INTO OUTFILE
9. phpwind论坛从后台到webshell的三种方式
10 .也可以利用网站访问计数系统记录来获取webshell
后面几个主要结合mysql注入,或者系统功能等,将对应的shell代码写到某个地方,再通过保存或者sql备份导出等功能将对应的sql里面存放的植入代码导入到指定位置的指定后缀文件比如aa.php等
三.Webshell防范
从根本上解决动态网页脚本的安全问题,要做到防注入、防暴库、防COOKIES欺骗、防跨站攻击等等,务必配置好服务器FSO权限。最小的权限=最大的安全。
防范webshell的最有效方法就是:可写目录不给执行权限,有执行权限的目录不给写权限。
我的经验是将上传和运行目录隔离,或者服务器分开。在关键功能上进行严格防范。有点废话。。
定义一个.htaccess文件,只允许访问指定扩展名的文件。
不要把.htaccess文件和上传文件放在同一个目录里,应该放在父目录里。
一个典型的只允许 gif, jpg, jpeg 和 png文件的.htaccess文件应当包含下面的代码(根据你的需求做调整)。这样也能阻止双扩展名攻击.
deny from all order deny,allow allow from all
如果可能,把文件上传到root目录以外的目录里。
禁止覆盖已存在的文件(以阻止.htaccess覆盖攻击)
创建一个mime-type白名单列表。(只允许这个列表里的Mime-type)
生成一个随机的文件名,并且加上此前生成的文件扩展名、
不要只依赖客户端验证,这不够。理想的是既有客户端验证也有服务器端验证。