第六章 Files Inclusion(文件包含漏洞)
1.文件包含原理及本地文件包含漏洞演示
本地:
后台使用包含的方法对目标文件进行包含,同时包含函数包含的文件是可以同时被前端用户所控制。因为可以被前端用户控制,这个时候前端用户传进来一个其他的文件,如果包含函数的入口并没有对前端传进来的文件做任何的控制,这就证明包含函数可以把前端传过来的文件也包含掉,这样就出现了问题。比如说可以把本地的配置文件进行包含,从而就把这些文件暴露给前端。攻击者通过上传后端的固定配置文件让包含函数去执行,从而导致本地的一些配置文件意外地进行执行。
这个包含函数不止可以包含本地的php文件,远端的php文件也可以包含。通过一个指定的url去读取远程的php文件,把它加载到本地去执行。
本地场景演示
我们可以看一下这个请求
这个请求传了一个文件名到后台,这些文件都是后台自己存在的。但是文件名是前端传到后台的,意味着前端的测试人员可以去修改这个文件。
常用测试方法就是我们把这个文件改成后台的配置文件
出现了
先把这个路径下的文件传到后台,被后台的方法处理了,然后就把对应的配置文件暴露出来了。
查看一下后端代码
这可以让用户去选择一个指定的文件,但是没想到用户可以改这个文件。
这里并没有对传进来的变量进行任何操作,我们可以在传入那里设置一些东西,比方说设置只有符合指定好的文件名才可以进行传入,否则不可以。
2.远程文件包含漏洞
允许包含函数读取远程站点的代码文件,意味着攻击者可以自己搭一个站点,在上面放一个代码,这个代码就是攻击者自己控制的。再把对应的路径通过前端传到后台,后台的包含函数就会对远程的这个文件去进行加载。
场景演示
这个提交的是目标文件的路径,我们可以把这里改成一个远端的路径,让它读取远程的文件。
恶意站点
这个会在本地打开一个文件流,新建一个yijuhua.php的文件,把一句话木马写进去。一旦被执行,就会在本地生成一个yijuhua.php文件,里面的内容是system函数,接收远端的get请求传过来的一个参数值。
把远端的路径粘贴过来
远端服务器目前状态
点一下提交
后端服务器上出现了这个文件
写入了
远程调用(注意:我们要知道自己写的php文件在哪个目录下,跟当前的php页面在同一级目录下面)
把后面的删掉,去访问yijuahua.php,传一个参数写一个命令
出现了(通过x接口控制服务器)
查看一下后端的代码
对前端传过来的文件没有做任何的过滤。此时php.ini里面的设置是改过的
3.文件包含漏洞防范措施