前期
phpstudy(php + mysql + apache)
目的
程序员在编写程序时,常常把需要重复使用的一些代码,写在一个单独的文件中,当需要调用这些代码时,再其他文件中包含调用代码文件,这样可以提高编程的效率.
包含函数
在php中包含调用函数:
include()、require()、include_once、require_once()
函数作用
include函数:如果文件不存在、报错、继续执行
1.php
<?php
echo '开始';
include '2.php';
echo '结束';
?>
2.php
<?php
echo '文件包含';
?>
1.php
<?php
echo '开始';
include '3.php';
echo '结束';
?>
3.php不存在
require函数:如果文件不存在、报错、不执行
1.php
<?php
echo '开始';
require '2.php';
echo '结束';
?>
2.php
<?php
echo '文件包含';
?>
1.php
<?php
echo '开始';
require '3.php';
echo '结束';
?>
3.php不存在
其他两个和上面一样,不过只能包含一次
类型
在使用文件包含函数时,指定的文件可以是本地的文件,也可以时远程指定URL连接文件,前者本地文件包含,后者为远程文件包含。
本地(LFI)
远程(RFI)
本地文件包含
index.php
<?php
echo "Hello World";
?>
1.php
<?php
if(@$_GET['page']){
include $_GET['page'];
}else{
include 'index.php';
}
?>
2.php
<?php
echo '文件包含';
?>
判断GET传参中的page有没有值,如果有就包含该值,没有就包含index.php
http://127.0.0.1/1.php
http://127.0.0.1/1.php?page=2.php
远程文件包含
在默认的php配置文件中allow_url_fopen功能是被激活的,程序员可以用URL链接的形式来指定要被包含的文件,进行远程文件包含调用。
需要说明的是,进行RFI攻击需要同时具备三个条件:
1.allow_url_fopen = On (默认开启)
2.allow_url_include = On (默认关闭)
3.被包含的变量前没有目录的限制
一般在php.ini中设置1、2就可以了
http://127.0.0.1/1.php?page=http://127.0.0.1/2.php
利用
读取文件
http://127.0.0.1/1.php?page=E:\1\1.txt
图片马
http://127.0.0.1/1.php?page=1.png
后文
代码审计文件包含可以搜索这四个函数。
关注小白学习安全和各种pdf类书籍的公众号。