前言:
今天兄弟们对“web十大漏洞”可能比较珍视,看官们都想要学习一些“web十大漏洞”的相关资讯。那么小编同时在网络上网罗了一些关于“web十大漏洞””的相关知识,希望大家能喜欢,你们快快来学习一下吧!之前我们讲过文件上传漏洞,当一个网站文件上传限制做的十分到位,攻击者无法轻易上传他们想要上传的文件之后,他们就另辟蹊径,将恶意代码镶嵌在正常文件之中,上传后执行,就可以运行其中的的恶意代码,这就造成了文件包含漏洞。
那么,攻击者是如何将恶意代码藏入文件里的呢?
我们还是以图片文件为例,正常情况下,我们浏览图片会用专门的图片查看器或画图工具,但是当我们用一些程序编辑器或者记事本打开图片时,就会看到一些乱码,如图用记事本打开.jpg型文件:
攻击者可以将恶意代码放入这些乱码之中,通常情况下会在开始或者最后,为了混淆视听,攻击者还会加入其它无关代码,来帮助隐藏这些恶意代码,当我们用图片浏览工具查看这些包含了恶意代码的图片时,肉眼看不出和正常图片的任何差别,当攻击者上传了这些所谓的“图片”文件到站点服务器以后,就会想办法执行其中的恶意代码,从而达到控制站点服务器的目的。
除了以上包含外,还有在请求地址参数中包含指定地址文件的包含,PHP常见的导致文件包含的函数如下:include(),include_once(),require(),require_once(),fopen(),readfile(),例如:,这是我现在在头条编辑文章的地址,其中有个“pgc_id”参数,值为“6826537800523842052”,当我把值换成“”时,而参数传输过程中经过以上几种函数,它就有可能会执行webshell.php文件,可能是在你网站服务器根目录下生成一个一句话木马,从而连接这个木马来控制你站点服务器,如果这个指定地址的文件是在站点服务器本地计算机里,这就叫做“本地文件包含”,如果这个指定地址的文件不在站点服务器本地计算机里,这就叫做“远程文件包含”。
文件包含漏洞防御
1、设置白名单
代码在进行文件包含时,如果文件名可以确定,可以设置白名单对传入的参数进行比较。
2、过滤危险字符
由于Include/Require可以对PHP Wrapper形式的地址进行包含执行(需要配置php.ini),所以需要判断文件名称是否为合法的PHP文件。
3、设置文件目录
PHP配置文件中有open_basedir选项可以设置用户需要执行的文件目录,如果设置目录的话,PHP仅仅在该目录内搜索文件。
4、关闭危险配置
HP配置中的allow_url_include选项如果打开,PHP会通过Include/Require进行远程文件包含,由于远程文件的不可信任性及不确定性,在开发中禁止打开此选项,PHP默认是关闭的。