找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 103|回复: 0

☆ BUUCTF靶场2 -- [HCTF 2018]WarmUp

[复制链接]

2万

主题

162

回帖

18万

积分

管理员

积分
184732
发表于 2022-9-1 10:40:42 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[HCTF 2018]WarmUp类型:
[backcolor=rgb(91, 114, 144) !important]PHP
[backcolor=rgb(91, 114, 144) !important]代码审计



第一步:直接访问:
1.png
第二步:查看源码,找到线索source.php

[HTML] 纯文本查看 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!--source.php-->
    
    <br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>


第三步:访问source.php,代码审计
[PHP] 纯文本查看 复制代码
<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')   
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>


访问hint.php获取到flag文件名称

flag not here, and flag in ffffllllaaaagggg

核心绕过逻辑在checkFile(&$page)里面
第一个 if 语句,对变量进行检验,要求$ page为字符串,否则返回 false。
第二个 if 语句,判断$ page是否存在于$ whitelist数组中,存在则返回 true。
第三个 if 语句,截取传进参数中首次出现?之前的部分,判断该部分是否存在于$ whitelist数组中,存在则返回 true。
第四个 if 语句,先对构造的 payload 进行 url 解码,再截取传进参数中首次出现?之前的部分,并判断该部分是否存在于$ whitelist中,存在则返回 true。


若以上四个if语句满足一个即可返回 true,若均未满足,则返回 false。

构造payload:


flag{6dd5ccdc-775f-48eb-b143-1e8f92de1c17}



php函数:
checkFile(&$page) 参数带&符号:两个变量来指向同一个内容
mb_substr()     函数返回字符串的一部分
mb_strpos()     //mb_strpos()函数返回要查找的字符串在别一个字符串中首次出现的位置
本题,所涉及到的php函数

函数                描述
isset                用于检测变量是否已设置并且非 NULL,若是返回false。
is_string        检测变量是否是字符串,若存在返回true。
in_array()        函数搜索数组中是否存在指定的值,若存在返回true
mb_substr()        返回字符串的一部分
mb_strpos()        查找字符串在另一字符串中第一次出现的位置。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-5-5 05:39

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表