攻防世界--高手进阶区(3)ics-06/warmup

攻防世界–高手进阶区(3)ics-06/warmup

ics-06

题目描述:云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。
攻防世界--高手进阶区(3)ics-06/warmup_第1张图片
解题思路:只能进去看一下了,一个系统界面

点了一圈发现index.php界面可以传参
攻防世界--高手进阶区(3)ics-06/warmup_第2张图片
其实这个地方也是直接拿sqlmap跑的,跑不出来最后才发现这是个爆破题…
攻防世界--高手进阶区(3)ics-06/warmup_第3张图片
爆破遍历参数就可以了
攻防世界--高手进阶区(3)ics-06/warmup_第4张图片
2333时就出来flag了,有点拼脑洞了…
攻防世界--高手进阶区(3)ics-06/warmup_第5张图片

warmup

题目描述:暂无
攻防世界--高手进阶区(3)ics-06/warmup_第6张图片
解题思路:直接看题
一个滑稽表情
攻防世界--高手进阶区(3)ics-06/warmup_第7张图片
看源码得到source.php
攻防世界--高手进阶区(3)ics-06/warmup_第8张图片
得到一大串源代码,需要审计

 
    highlight_file(__FILE__);//打印代码
    class emmm//定义emmm类
    {
        public static function checkFile(&$page)//将传入的参数赋值给¥page
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//白名单
            if (! isset($page) || !is_string($page)) {//若$page变量不存在或者非法字符串
                echo "you can't see it";//打印"you can't see it"
                return false;//返回false
            }

            if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist中
                return true;//返回true
            }

            $_page = mb_substr(//截取$_page中'?'前部分
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {//若$page变量存在于$whitelist中
                return true;//返回tru
            }

            $_page = urldecode($page);//url解码$page
            $_page = mb_substr(//截取$_page中'?'前部分
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {//若$page变量存在于$whitelist中
                return true;//返回tru
            }
            echo "you can't see it";//打印"you can't see it"
            return false;返回false
        }
    }

    if (! empty($_REQUEST['file'])//$_REQUEST['file']值不能为空
        && is_string($_REQUEST['file'])//$_REQUEST['file']值是字符串
        && emmm::checkFile($_REQUEST['file'])//能通过checkFile函数校验
    ) {
        include $_REQUEST['file'];//包含$_REQUEST['file']文件
        exit;//退出当前脚本
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";//打印表情
    }  
?> 

首先我们可以得到/hint.php
给了我们一个提示flag在ffffllllaaaagggg里面
攻防世界--高手进阶区(3)ics-06/warmup_第9张图片
checkFile

1.第一个if语句对变量进行检验,要求$page为字符串,否则返回false
2.第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
3.第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page'?'前部分,存在则返回true
4.第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
 
若以上四个if语句均未返回值,则返回false
有三个if语句可以返回true,第二个语句直接判断$page,不可用
第三个语句截取'?'前部分,由于?被后部分被解析为get方式提交的参数,也不可利用
第四个if语句中,先进行url解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可通过第四个if语句校验。('?'两次编码值为'%253f',构造url:

/?file=source.php%253f…/…/…/…/…/ffffllllaaaagggg
…/无返回值,无法判断ffffllllaaaagggg位置,依次增加最后…/…/…/…/…/找到ffffllllaaaagggg
攻防世界--高手进阶区(3)ics-06/warmup_第10张图片
flag{25e7bce6005c4e0c983fb97297ac6e5a}

你可能感兴趣的:(攻防世界-WEB)