BUU29 [网鼎杯 2020 朱雀组]phpweb1

开幕雷击:

听不懂思密达

抓个包看看

发现传入一个函数

func=date&p=Y-m-d+h%3Ai%3As+a

p 通常作为参数的值传递给前面指定的函数,将其url解码后得到 Y-m-d h:i:s a,这是 date() 函数中用于指定日期和时间格式的字符串

  • Y:表示四位数的年份,例如 2025
  • m:表示两位数的月份,范围从 0112
  • d:表示两位数的日期,范围从 0131
  • h:表示 12 小时制的小时数,范围从 0112
  • i:表示分钟数,范围从 0059
  • s:表示秒数,范围从 0059
  • a:表示上午或下午,值为 ampm

尝试着这么构造,发现不行

输入

html 复制代码
func=highlight_file&p=index.php 

这样就能看见源代码了

另一种读取源代码方式:file_get_content()

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>phpweb</title>
    <style type="text/css">
        body {
            background: url("bg.jpg") no-repeat;
            background-size: 100%;
        }
        p {
            color: white;
        }
    </style>
</head>

<body>
<script language=javascript>
    setTimeout("document.form1.submit()",5000)
</script>
<p>
    <?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...");
        }
    }
    ?>
</p>
<form  id=form1 name=form1 action="index.php" method=post>
    <input type=hidden id=func name=func value='date'>
    <input type=hidden id=p name=p value='Y-m-d h:i:s a'>
</body>
</html>

call_user_func() 函数允许你将函数名作为一个字符串传递给该函数,并可以向被调用的函数传递参数。

利用反序列化漏洞,既然可以执行任何函数,那么就可以执行unserialize()

然后就能遍历目录,但是没有flag

查看根目录:

还是没有

用find搜索:

html 复制代码
find / -name flag*

发现有flag

使用cat命令

拿到flag

相关推荐
doubt。15 小时前
1.攻防世界 题目名称-文件包含
网络·安全·web安全·网络安全·php·代码复审
黑客Ela20 小时前
网络安全治理架构图 网络安全管理架构
安全·web安全·架构
Andya_net1 天前
网络安全 | 什么是XSS跨站脚本攻击?
网络·web安全·xss
it技术分享just_free1 天前
软考教材重点内容 信息安全工程师 第15章 网络安全主动防御技术与应用
运维·web安全·网络安全·信息安全·系统安全·软考
网络安全(king)1 天前
什么是网络安全
网络·数据库·web安全
阿里云云原生1 天前
网络安全视角:从地域到账号的阿里云日志审计实践
网络·web安全·阿里云·云原生
doubt。2 天前
6.【BUUCTF】[极客大挑战 2019] Http(HTTP头伪造)
网络·网络协议·web安全·http·网络安全
黑客呀2 天前
Linux下安装SVN服务端小白教程
安全·web安全·svn