[0CTF 2016]piapiapia

先收集信息 dirsearch发现源码 开始分析

首先通过cinfig可以发现flag就在这个文件中 直接访问发现无法读取

可以利用register.php 注册得到账号密码 从而登录update.php

我第一反应是文件上传 但是MD5对文件名加密的方法太严格了 我没啥好思路

从新审计(大佬说审计顺序应该是class.php → update.php → profile.php)

通过对class.php文件的审计发现过滤规则

public function filter($string) {

// 第一部分:转义处理

$escape = array('\'', '\\\\'); // 要过滤的字符:单引号和反斜线

escape = '/' . implode('\|', escape) . '/'; // 生成正则:'/\'|\\\\/' 抽象转义 php转义一次 正则再转义一次

string = preg_replace(escape, '_', $string); // 把单引号和反斜线替换成下划线

// 第二部分:SQL关键词过滤

$safe = array('select', 'insert', 'update', 'delete', 'where');

safe = '/' . implode('\|', safe) . '/i'; // 生成正则:'/select|insert|update|delete|where/i'

return preg_replace(safe, 'hacker', string); // 把这些SQL关键词替换成'hacker'

}

看大佬说select|insert|update|delete->hacker字符数量是不变的,但是where->hacker就多了一个字符 有问题

同时发现update.php 中发现serialize() 很容易想到是反序列化的题

同时在profile.php发现有unserialize()

思路就是在update.php里,对用户输入的数据进行化,在profile.php里直接将数据进行反序列化。

所以,我们可以通过这个反序列化执行命令,那么思路就很明确了:让 $profile'photo'的值为"config.php",这这样就可以得到falg了,

读取 config.php 中的 flag(因为`` $flag `变量在里面)

数组绕过正则检测update.php 中 nickname 的正则检查/\^a-zA-Z0-9_/可通过传递数组绕过(如 nickname\[\]=payload),从而绕过字符和长度限制

利用数组可以绕过preg_match

需闭合的字符串为 ";}s:5:"photo";s:10:"config.php";}(

共 34 字符)。每个 where 替换为 hacker 后增加 1 字符,需构造 34 个 where 来填充。当我们构造34个where时

,当where被替换成hacker之后,会多出34个字符,使得``";}s:5:"photo";s:10:"config.php";}

`被向后推,从而替代了photo字段的序列化结果

提交 Payload:通过 update.php 上传修改后的 nickname 和任意合法 phone、email、photo(需满足正则校验)。

读取 Flag:访问 profile.php,页面中的图片 src 属性为 config.php 的 Base64 编码内容,解码即可获取 Flag。

绷不住了 昨天没发布上

下一篇是我对这题的重复学习

相关推荐
小弥儿13 小时前
GitHub今日热榜 | 2026-09-18:腾讯双项目上榜
学习·开源
知识分享小能手15 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
m4Rk_15 小时前
【论文阅读】Agent 记忆机制(74):CompassMem——从相似度检索走向事件图上的记忆导航
论文阅读·人工智能·学习·开源·github
小李不想当小白15 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
2601_9499506317 小时前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
别动我齐刘海17 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
水云桐程序员19 小时前
量子力学概论,量子力学概念总结
笔记·科技·学习·量子计算
三克的油21 小时前
java-学习1
java·开发语言·学习
j7~21 小时前
【C++微服务项目开发脚手架】(接口篇一)gflags + gtest + spdlog 接口学习笔记
c++·学习·gtest·项目开发·spdlog·gflags·c++项目微服务开发脚手架
彧azz21 小时前
图的最短路径:Dijkstra与Floyd算法
数据结构·笔记·学习