前言:
最近跟着大师傅的课程学习着ctf中web,随想记录下知识点,便于日后的复习,难免会有错误,望师傅们能多加指点,今天进入文件包含的学习。
1.文件包含的本质
1>代码复用
2>并行开发
3>模块化
4>增加移植性
2.include和eval的异同
同:都不是函数,都是语言结构,无法通过配置文件函数禁用来禁用。
异:
include:后面接一个路径表示执行php文件的路径,读取路径中文件中内容后,然后执行里面的php代码
eval:后面接php代码,表示要执行的php代码
3.php常见文件包含函数、语言结构
include():仅仅是包含这个文件,若文件不存在,没啥关系,继续执行后面的代码
require():必须包含好文件,若没包含好文件,就不在执行,报错
include_once():包含一次,遇错误继续执行
require_once():成功包含一次,遇到错误停止
4.常见的php伪协议
file协议 http协议 ftp协议 php协议 data协议 phar协议
1.file协议
1>file://..... file协议用于访问本地计算机的文件,只能在本地访问,无法实现跨域。不写协议名称,就默认是file协议
2>相对路径和绝对路径
相对路径转绝对路径
flag.php index.php 目录:/var/www/html include"flag.php" include"file:///var/www/html/flag.php";
include"flag.php";
include"../html/flag.php"; "/var/www/html/../html/flag.php";
上层目录特性:
>每个目录都有上层目录 /var/www/html/../../../ => /目录 >根目录的上层目录是根目录本身 /var/www/html/../../../../../../ => /目录 上溯
php整理特性:
/var/www/html/hyf666/../flag.php => /var/www/html/flag.php
2.http协议
读取远程协议,获取到本地
<?php
echo file_get_contents("https://baidu.com/robots.txt");
?>
还可以配合文件包含,读取远程的php代码并在本地执行,实现最终rce的效果(注意php中allow_url_include=on)
<?php
include "https://baidu.com/robots.txt";
?>
3.ftp协议
默认21端口,进行文件传输的协议
4.php协议
1.php://input
1>首先看php中文手册的解释
<?php
include "php://input";
?>
2> ctfshow中的一道题
2.php://filter
1>首先看php中文手册的解释
2>两种姿势
>base64
来看ctfshow里面题目
>rot13
ctfshow的题目
5.data协议
结语:
php是ctf学习中关键一环,很枯燥,万事开头难,坚持住,慢慢的一步一个脚印地走下去,一定会有所收获。
"Where you are right now doesn't have to determine where you'll end up."