我是靠谱客的博主 标致纸鹤,最近开发中收集的这篇文章主要介绍buuctfweb刷题wp详解及知识整理----warm up(文件包含加php代码审计)buuweb—warm up的wp,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

buuweb—warm up的wp

wp!

上来一个超级滑稽脸(冥冥中仿佛滑稽看透了险恶的ctf世界的真相)。。
F12或者开发者工具看源码
在这里插入图片描述
注释中有提示那就访问一下
源码得到

<?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" />";
    }  
?>

发现include()应该是文件包含
同时还发现白名单
在这里插入图片描述
不妨访问一下hint.php
在这里插入图片描述
很明显我们需要包含文件ffffllllaaaagggg这一文件

审计php源代码可知只要file这个文件在它的?号前面的符合白名单即可
从而
在这里插入图片描述
构造出payload

?file=source.php?/../../../../ffffllllaaaagggg

即可得到flag
这里用到了../../../..这种目录穿越从而利用目录遍历的手法

学到的东西

php的函数

参考菜鸟教程
mb_substr() 函数返回字符串的一部分
四个参数
str 必需。从该 string 中提取子字符串。
start 必需。规定在字符串的何处开始。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾的指定位置开始
0 - 在字符串中的第一个字符处开始
length 可选。规定要返回的字符串长度。默认是直到字符串的结尾。
正数 - 从 start 参数所在的位置返回
负数 - 从字符串末端返回
encoding 可选。字符编码。如果省略,则使用内部字符编码。

mb_strpos()反回字符或字符串在另一字符串的所在位置
int mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] )
四个参数
haystack
The string being checked.
要被检查的 string。
needle
The string to find in haystack. In contrast with strpos(), numeric values are not applied as the ordinal value of a character.
在 haystack 中查找这个字符串。 和 strpos() 不同的是,数字的值不会被当做字符的顺序值。
offset(可选)
The search offset. If it is not specified, 0 is used. A negative offset counts from the end of the string.
搜索位置的偏移。如果没有提供该参数,将会使用 0。负数的 offset 会从字符串尾部开始统计。
encoding(可选)
The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.
encoding 参数为字符编码。如果省略,则使用内部字符编码。
Return Values
Returns the numeric position of the first occurrence of needle in the haystack string. If needle is not found, it returns FALSE.
返回 string 的 haystack 中 needle 首次出现位置的数值。 如果没有找到 needle,它将返回 FALSE。

最后

以上就是标致纸鹤为你收集整理的buuctfweb刷题wp详解及知识整理----warm up(文件包含加php代码审计)buuweb—warm up的wp的全部内容,希望文章能够帮你解决buuctfweb刷题wp详解及知识整理----warm up(文件包含加php代码审计)buuweb—warm up的wp所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部