文件包含 0 1学习

漏洞原理

成因

文件包含漏洞是一个最常见的依赖与脚本运行而影响Web应用程序的漏洞.当应用程序使用攻击者控制的变量建立一个可执行代码的路径,允许攻击者控制在运行时执行哪个文件时,就会导致文件包含漏洞.程序开发人员通常会把可重复使用的函数写入单文件中,在使用这些函数时,程序开发人员直接调用此文件,而无需再次编写函数,这种调用文件的过程一般被称为文件包含,此外,程序开发人员都希望代码更加灵活,所以通常会被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用恶意文件,导致文件包含漏洞.

危险函数

文件包含漏洞出现的前提是服务器开启allow_url_include选项在此前提下就可以通过php的某些特性函数(include require,include_once,require_once)利用url去动态包含文件,区别在于include(),include_once()遇到错误继续执行,而require(),require_once()遇到错误直接退出程序,如果在PHP配置中开启了allow_url_fopen,那么就可以进行远程文件包含.

|-------------------------------------------|--------------------------------------|
| 函数 | 概况 |
| include(filepath&<url&伪协议>) | 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常执行 |
| include_once(filepath&<url&伪协议>) | 只包含一次,其他同上 |
| require(filepath&<url&伪协议>) | 在包含的过程中如果出现错误,会直接报错并退出程序的执行 |
| require_once(filepath&<url&伪协议>) | 只包含一次,其他同上 |
| file(filepath&<url&伪协议>) | 把整个文件读入一个数组 |
| fopen(filepath&<url&伪协议>,$mode) | 打开文件或者URL(包含伪协议),搭配fread()和fgets()使用 |
| readfile(filepath&<url&伪协议>) | 读取并输出文件(不输出php代码),返回字节数 |
| highlight_file(filepath&<url&伪协议>) | 高亮输出代码 |
| show_source(filepath&<url&伪协议>) | 同上 |
| file_get_contents(filepath&<url&伪协议>) | 把整个文件读入一个字符串 |

最简单的文件包含

<?php

file=_GET'page';

include($file);

?>

代码分析:

file=_GET'page';会将get传参page的值赋值给$file

include(包含$file)任何文件包含后如果携带有php代码会直接解析

这里用户以GET形式的页面传入变量file,随后被include函数包含,中途没有进行任何过滤和规范性检测,黑客往往利用这种漏洞进行任意代码执行或文件读取

实验

include.php

<?php

file=_GET'page';

include($file);

?>

.任意后缀名都可以

phpinfo

<? php phpinfo(); ?>包含phpinfo直接显示

一句话木马

<? php eval($_GET'md'); ?>

注意事项

文件包含只包含xxx文件如果是想给包含的文件传入数据需要用到&然后指定传入什么数据

在使用system的时候需要"system('命令');"记住不要忘记;

&md=system("ls");

相关推荐
小小de风呀2 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程2 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
Song_RsHt2 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
且随疾风前行.3 小时前
Paint Cavans高级绘制:[一]Paint画笔高级应用
android·ui
郑州光合科技余经理5 小时前
同城小程序开发:同一笔单在用户端和商家端各显示到哪
android·java·开发语言·前端·后端·uni-app·php
~kiss~5 小时前
PRO-LONG: Programmatic Memory Enables Long-Horizon Reasoning 程序式记忆赋能长程推理
学习
程序猿编码5 小时前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
ms72wx6 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker
pigdreams6 小时前
Google 官方 Android CLI:让AI直接读布局结构而不是用adb截图验证
android·人工智能·adb
外收内放7 小时前
FastAPI猜字谜实战(4):让AI主持人开口
开发语言·python·学习·fastapi