1.文件包含
1.1原理:
服务器执行的php文件中可能包含木马文件或者恶意代码
1.2漏洞产生原因
1.web采用include()等文件包含函数通过动态变量的方式引入需要包含的文件
静态包含使用include指令,动态包含使用include动态标签
静态包含(include指令):<%@include file="需要包含的文件地址("%>
动态包含(include动态标签):<jsp:include page="需要包含的文件地址"></jsp:include>
静态文件和动态文件的区别_LifeAnLearn的博客-CSDN博客_静态文件和动态文件的区别
2.客户端可以控制动态变量(即这个变量用前端用户传进的)
1.3可能出现的情况
1.本地文件包含漏洞:被包含文件在服务器本地,在这种情况下,攻击者会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的漏洞。
服务器中的静态资源和动态资源_Pr Young的博客-CSDN博客-------->这个就说明了被包含的文件既可能是动态文件也可能是静态文件。
2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含(这里应该是指执行url地址中所包含的远程文件)
要求:必须要开启allow_url_include和allow_url_fopen,即两者参数均显示为on
在php.ini中,allow_url_fopen一直默认为on,而allow_url_include从php5.2之后一直默认为off
1.4文件包含函数
include(文件地址) //找不到被包含文件时发出警告,但依旧会继续执行程序
include_once() //文件被重复包含时只包含一次
require() //找不到包含文件时补鞥继续执行
require_once()
2.php文件包含
2.1php文件包含的特点
无视文件后缀(类型),即只要满足为PHP语言,则就会执行
2.2文件包含漏洞
攻击者思路:
通过访问并不存在的文件,得到相关的传递路径
读取敏感文件
包含的文件为系统配置文件,从而得到相关的敏感信息
本地包含配合文件上传(这里的部分知识在文件上传里面)
即包含的文件
远程包含shell
allow_url_include开启
包含Apache日志文件
找到Apache路径,利用包含漏洞包含日志文件获取Webshell。(很多时候,web服务器会将请求写到日志文件中,可获得客户端地址,访问者标识,访问者的验证名字,请求时间,请求类型,状态码以及发送给客户端的字节数)
包含SSH日志文件
把用户名写成"phpinfo",ssh的登录日志就会把此次的登录行为记录到日志中
包含session文件
session:存在服务端,一般用于跟踪会话
PHP封装伪协议
PHP伪协议(封装协议/内置协议)_吃_早餐的博客-CSDN博客_php封装协议
实战练习题
第一题
打开题目得到:
<?php
highlight_file(__FILE__);
include("./check.php");
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename);
}
?>