ctf show web入门37

进入靶场发现跟前几道题目不同,这是一道PHP本地文件包含漏洞(因为这道题与前几道题相比使用了include语句),并且还有正则黑名单绕过

代码非常精简,主要涉及以下几个关键点:

输入点:c = _GET'c'; ------ 程序通过 URL 参数 c 接收用户的输入。

过滤规则:if(!preg_match("/flag/i", c)) ------ 这里使用正则表达式检查 c中是否包含字符串flag(i表示不区分大小写)。如果包含,程序就不执行后续操作。漏洞点:include(c 中是否包含字符串 flag(i 表示不区分大小写)。如果包含,程序就不执行后续操作。 漏洞点:include(c中是否包含字符串flag(i表示不区分大小写)。如果包含,程序就不执行后续操作。漏洞点:include(c); ------ 这是最核心的漏洞。include 函数会将 c 指向的内容当作 PHP 代码执行。

目标提示://flag in flag.php ------ 明确告诉了你 Flag 藏在 flag.php 文件里。

但是由于直接传入?c=flag,php会触发正则拦截我们需要一种方法来既能让include加载到文件但是又要保证url参数中没有flag

我们尝试构造的payload如下:?c=://filter/read=convert.base64-encode/resource=flag.php,代码执行成功但是并没有返回flag是因为

可能flag.php内部定义的变量名不叫flag(可能是flag(可能是flag(可能是f或者其他变量名)

所以我们尝试构造其他payload

比如我们可以尝试使用datd伪协议

data伪协议格式如:data://媒介类型解码方式,数据

最后的payload为?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

data://text/plain:告诉PHP处理器,接下来的数据是纯文本格式

;base64:声明后面的数据是用base64算法编码后的

PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==:这是经过base64编码后的PHP代码

内容为:<?php system('cat flag.php');?>

将system("cat flag.php");这个真正的payload放在<?php ?>标签中告诉服务器将这段内容当成PHP代码来执行

最后得到flag

或者使用?c=data://text/plain,<?php system('tac f*');?>也行

相关推荐
chnyi6_ya1 小时前
论文阅读笔记 | The Script is All You Need: 对话到电影级视频生成的 Agentic 框架
论文阅读·笔记
听雨入夜1 小时前
CMake构建学习笔记-libxml库的构建
笔记·学习
iiiiii111 小时前
【论文阅读笔记】Reparameterization Proximal Policy Optimization (RPO):将PPO的稳定性引入可微分强化学习
论文阅读·人工智能·笔记·深度学习·机器学习·机器人·具身智能
鱼子星_2 小时前
【C++】深入剖析list:list及其双向迭代器实现
开发语言·数据结构·c++·笔记·stl·list
砚凝霜3 小时前
软考网络工程师|第 4 章 WLAN MAC 机制、Ad Hoc、无线安全、WPAN 蓝牙 ZigBee 完整备考笔记
网络·笔记·安全
江屿风3 小时前
【C++笔记】【二叉搜索树】流食般投喂
开发语言·数据结构·c++·笔记
xqqxqxxq5 小时前
AI智能旅游规划系统 - 前端技术笔记
前端·笔记·旅游
摇滚侠12 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 普通消息 延时消息 顺序消息 事务消息
笔记·rocketmq
Privasa-隐私实验室15 小时前
全程无死角安全测评|从开机上锁、硬核加密到彻底销毁,Privasa 全生命周期隐私防护详解
笔记·安全·本地存储·隐私安全·aes-256