1:文件包含漏洞概念相关:
在web后台开发中,程序员往往为了提高效率以及让代码看起来更加简洁,会使用“包含”函数功能。
例如:把一系列功能函数都写进function.php中,之后当某个文件需要调用的时候,就直接在文件头中写上一句<?php include function.php?>就可以调用函数代码。
然而,因为网站功能需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于开发人员没有对要包含的这个文件进行安全考虑,就导致攻击者
可以通过修改包含文件的位置来让后台执行任意(代码)。
文件包含漏洞分为:“本地包含漏洞”和远程文件包含漏洞“两种情况。
后台使用包含的方法对目标文件进行包含,同时,包含函数包含的目标文件可以被前端用户所控制。本来按照后台的设置,应该包含function1.php和function2.php这两个PHP文件,但是
由于这个文件是可以被前端用户所控制的,如果前端用户传进来一个其他的文件,如果在这个入口,并没有对前端传进来的文件做任何控制的话,那就意味着,这个包含函数可以将用户前端传来的其他文件也给包含掉。
例如:包含远程PHP文件
文件包含漏洞:包含函数
2:本地文件包含漏洞演示
********本地文件包含漏洞演示
提交之后,发现前端指定了一个文件(当然这个文件是后台自己的文件)
利用本地文件包含漏洞,把对应的本地的配置文件给暴露出来了(猜测使用的是LInux操作系统,Linux常见的配置文件etc/passwd)
源码分析:
3:远程文件包含漏洞演示
概念:
远程文件包含漏洞形式跟本地文件包含漏洞类似,在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码。
远程包含漏洞前提:若使用的include和require,则需要php.ini配置如下(php5.4.34):
allow_url_fopen = on //默认打开
Allow_url include = on //默认关闭
无论是本地包含漏洞还是远程包含漏洞,都是包含函数对前端传进来对应的目标文件进行包含的时候没有进行相关的处理,本地文件包含利用的是有限的,本地文件包含只能读取本地文件,而且还得猜到文件所在的路径。相对于远程文件包含的话,危害较低。
远程文件包含,可以允许包含函数去读取远程站点上的代码文件,意味着攻击者可以自己搭一个站点,且在上面放置代码文件(代码文件是攻击者自己控制的),
攻击者将这个代码文件的路径通过前端传到后台,后台的包含函数就会被这个远程的路径下文件进行加载,这个危害很大。
例如:我们可以在远端写一个一句话木马,让本地去执行,这就意味着我们直接将一个一句话木马放到了目标站点上,从而实现对目标站点的一个远程控制。
远程文件包含漏洞---写入一句话木马
分析URL可知:实际上提交的是一个目标文件路径,我们可以把他改成远程文件的一个路径,让他读取远程文件:
注:192.168.1.4是攻击者自己搭建的站点
在修改提交前,我们先看一下远程服务器上的文件:
提交之后服务器上的文件:多出了一句话木马文件
传上一句话木马之后,利用一句话木马来控制服务器,
当然我们必须的知道一句话木马这个PHP文件最后上传到那个目录?
因为你要访问并且利用这个一句话木马文件一般是和这个页面同级的目录。
通过控制X这个参数来控制服务器。