IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ZJCTF NiZhuanSiWei(基础复习篇)--php流与LFI -> 正文阅读

[PHP知识库]ZJCTF NiZhuanSiWei(基础复习篇)--php流与LFI

0x00 Review

a.关于php流封装

每个流都有一个协议和一个目标。指定协议和目标的方法是使用流标识符。其格式如下
<scheme>://<target>

<scheme>是流的封装协议,<target>是流的数据源

此处有一个误区
我们使用file_get_contents()、fopen()、fwrite()和fclose()函数读写文件系统。因为PHP默认使用的流封装协议是file://,所以我们很少认为这些函数使用的是PHP流。
但这些其实都算是使用php流了

封装协议 ?

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

引用自:https://shadowdragons.github.io/2019/06/10/php-stream/

Q:file_get_contents()可以读取其他封装协议的数据流吗

(写的有些基础,师傅们可以直接跳过了
实操一下在这里插入图片描述
显然是可行的,需修改配置文件

extension=php_openssl.dll
allow_url_include = On

也就是说此函数可以处理除file之外的封装协议数据流

include

关于include与file_get_contents
include引入的会成为源码的一部分,而file_get_contents单纯返回字符串,不会被解释器解析

php://filter

糊一下手册
在这里插入图片描述
我觉得光看documentation可能会有些抽象

php://filter可以对你使用的数据流做过滤作用
php://filter/xxx(你使用的过滤器)/resource=(后接要过滤的数据流)
这边的过滤器你可以自己设定若干个

https://blog.csdn.net/destiny1507/article/details/82347371
可以再看看这个师傅的blog

实操中file_get_contents与include的区别(顿悟…!为什么还得麻烦的加个base64-encode)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现同样是使用过滤器读链
include可以直接在前端弹出源码,但file_get_contents则需要echo出来

后来问了一下dl,才意识到我是真彩笔哈

先前我们说过file_get_contents只是单纯返回字符串
而include是将其包含至文件源码的一部分

有同学可能疑惑为什么读源码还要麻烦的加个base64-encode??
因为这边不想让服务端把这些源码解释掉,我们在访问不同网站时都不需要配置对应的解释器或运行环境,因为我们的客户端只是能理解html的浏览器罢了。
php是服务器端解释的语言,http提交请求给服务器,由服务器对php文件进行解释,最终生成相应的html,作为响应返回到浏览器,所以你看到的就是html。我们在读链中进行base64编码后,php解释器就认不出源码了,也不会去解析它。
实操一下
在这里插入图片描述
如果include一个纯文本,php解释器没有去解析他,就直接呈现在前端了。
所以这里过滤器的作用就是骗过服务端。

0x01 开冲

<?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

有了上述铺垫这边可以直接秒了哈
file_get_contents直接接data://封装就够
payload:
data://text/plain,welcome to the zjctf

file提示useless.php
用 php://filter/convert.base64-encode/resource=useless.php读一下源码

后面有点ez不说了
在这里插入图片描述

0x02 rethink

LFI和php封装协议这些在我一开始做ctf-web时就已经接触了,但当时做的笔记都是非常的急功近利,完全没有去反思为什么用这个封装协议,为什么能这么用。Anyway,CTF绝不是为了刷题而刷题,每次做完都应该去反思一下,自己真的弄明白没,出题人的思路你是否都能明白地捋顺。
可能很多师傅会觉得我写的很小儿科…(别骂了别骂了
我争取早日上岸成功当上菜鸡⑧!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 11:49:47  更:2021-08-19 11:50:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/14 10:47:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码