CTF中文件包含漏洞

发布时间 2023-11-30 17:03:29作者: small黄

0x01 什么是文件包含漏洞

通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入。


0x02 文件包含漏洞的环境要求
allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据
allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件

0x03 常见文件包含函数
php中常见的文件包含函数有以下四种:

include()
require()
include_once()
require_once()
include与require基本是相同的,除了错误处理方面:

include(),只生成警告(E_WARNING),并且脚本会继续
require(),会生成致命错误(E_COMPILE_ERROR)并停止脚本
include_once()与require_once(),如果文件已包含,则不会包含,其他特性如上

0x04 PHP伪协议
PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

一、php://input
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。


例子

 

 

注:利用php://input还可以写入php木马,即在post中传入如下代码:

<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>

二、