文件包含漏洞---php协议

  1、概念:在php代码中,总会有一些代码我们会经常用到,这时引入了文件包含函数,可以通过文件包含函数把这些代码文件包含进来,直接使用文件中的代码,这样提高了我们的工作效率。

  2、文件包含函数:

    include():如果发生错误,会产生一个警告然后继续执行脚本

    include_once():与include()相同,如果文件之前被包含过则不再包含

    require():会停止执行代码

    require_once():如果文件之前被包含过则不再包含

  3、类型:本地文件包含、远程文件包含(url的形式进行)

        配置文件参数:allow_url_fopen:为ON时,能读取远程文件,

          Allow_url_include:为ON时,就可以使用include和require等方式包含远程文件

  4、利用方式——伪协议

    # file://  协议用户访问本地文件系统,使用方法:?file:// [文件的绝对路径和文件名]

    # php://input  可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行

    # php://filter  元封装器,读取源代码并以base64编码方式输出

    # zip://, bzip2://, zlib://   属于压缩流,可以访问压缩文件中的子文件,使用方法:zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

    # data://  类似于php://input,可以让用户来控制输入流

    其他利用方法:(绕过方式)

    #00截断:windows在读文件名的时候遇到00就会停止

    #长度截断(win:256,linux:4096)

    #包含日志文件:传入的参数值如果会保存到日志文件中,我们可以把木马传入到日志文件中,知道日志的路径就可以进行下一步操作

    #包含session

  5、防御

    #php中使用open_basedir配置限制访问在指定的区域

    #过滤 . (点) / (反斜杠) \(反斜杠)

    #禁止服务器远程文件包含

    #尽量不要使用动态包含,可以在需要包含的页面固定写上

二、利用LFI环境复现文件包含漏洞

  这是我在github上边下载的,有很多题目要做一些改动才可以实现,所以懂了原理就可以了,用PHP study本地搭建起来就可以复现,

因为我的路径和原本代码的路径不同,所以每复现一个之前都要把文件包含函数里面的路径修改一下,例如:

文件包含漏洞---php协议

  # LFI-1 简单的文件包含

  观察源代码,这是一个简单的文件包含

  我现在网站根目录下传入一个phpinfo的文件,

  

文件包含漏洞---php协议

  根据源码,框中传入的参数是page,我们可以构造payload,得到根目录下的文件内容

  

文件包含漏洞---php协议

  根据实验,不管文件的后缀名是jpg、txt,都会以php代码执行,所以可知文件包含时与传入文件的类型无关

  

文件包含漏洞---php协议

   # LFI-2 00截断绕过

  观察源码,

文件包含漏洞---php协议

  这个参数传入之后构成的路径是:includes/文件.php,我们可以用%00把.php截断,然后利用相对路径进行绕过

  这个题可能是有很多限制,我把includes删除然后把php版本调到5.2.17然后把gpc设置为off才能实现。

  如果我们传入一个一句话,这时就可以用菜刀连接

  # LFI-3 点、斜杠绕过

  观察源码,源码当中取后四位即后缀名与.php比较,如果相同则输出不被允许查看源码的警告,若不同则读取文件内容。

  

文件包含漏洞---php协议

  我们可以在url的末尾加.(点),因为,在文件命名时,后缀后面加点是会自动去掉的

  我们也可以加/.    因为在命名时,/(斜杠)是不允许出现的

  # 4 去后缀名绕过

  观察源码,

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwjgs.html