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

相关推荐
刚刚入门的菜鸟10 小时前
php-curl
运维·web安全·php
Teame_12 小时前
渗透课程学习总结
网络·安全·web安全
千寻技术帮12 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
浩浩测试一下15 小时前
WAF绕过之编码绕过特性篇
计算机网络·web安全·网络安全·网络攻击模型·安全威胁分析·安全架构
EverydayJoy^v^21 小时前
RH134学习进程——十一.管理网络安全
学习·安全·web安全
运筹vivo@2 天前
BUUCTF: [BSidesCF 2020]Had a bad day
web安全·ctf
浩浩测试一下2 天前
DDOS 应急响应Linux防火墙 Iptable 使用方式方法
linux·网络·安全·web安全·网络安全·系统安全·ddos
浩浩测试一下2 天前
洪水猛兽攻击 Ddos Dos cc Drdos floods区别
安全·web安全·网络安全·系统安全·wpf·可信计算技术·安全架构
运维行者_2 天前
OpManager 自定义集成支持:革新您的 IT 工作流
运维·网络·人工智能·安全·web安全·自动化·自动化工作流
ByNotD0g2 天前
CVE-2025-61882 漏洞复现(失败版)
java·web安全