一道CTF场景还原&&防御攻破

1.文章难易度:【★★★】
2.文章知识点:php语法;php伪协议;ctf;
3.文 章 作 者:xiaoye
4.本文参与i春秋社区原创文章奖励计划,未经许可禁止转载!

前言
例行打卡,昨晚让一个bug弄得觉也没睡好。。果然我太菜。。本来是打算写XXE的,但是想起来了之前在一个群里讨论的ctf题目,当时那位小伙伴就说了下大概情形和大致思路,心挺痒,,但是那个题目应该是他们学校内网才能访问。没办法,那就根据他说的来自己写一道ctf题目喽。正好好久没写php了,练练手。

一、题目的还原
他大致是这么说的:有上传点,只能上传zip或者jpg/png/jpeg图片格式,上传后可以知道路径;有LFI(本地文件包含漏洞),但是包含的如果不是php文件就在后面再加上一个.php后缀;没有RFI(远程文件包含漏洞);
好吧,听起来不是很难,我们分开写,先写上传点,限制为zip&&图片格式:
indexdemo.html:




 

upload_filedemo.php:



核心代码:

if(($uploaded_ext == 'zip' || $uploaded_ext == 'jpg' || $uploaded_ext == 'png') && ($uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' || $uploaded_type == 'application/zip')){

                move_uploaded_file($uploaded_tmp, $target_path . $target_file);

                echo 'stored in' . $target_path . $target_file;

        }

 

采用了白名单,攻击者想利用的话就基本只有解析漏洞了,但是我这是apache高版本,暂时不用考虑这块;
采用MIME验证,这块只是辅助,毕竟用户burp拦截下就可以改掉了;

$target_file = md5(uniqid().$uploaded_name) . '.' . $uploaded_ext;

 

文件名是md5加密的,00截断截不了,而且我这儿php也是高版本的,不用考虑;
这道题目的上传要求这样就基本满足了,送点福利,自己整理的:
                                                                     一道CTF场景还原&&防御攻破_第1张图片

这里本来想采用php二次渲染防止图片马,但是。。这样肯定不行,这道题目是让拿shell再拿flag的,你不让传咋行。。哈哈,这是后话了。
文件包含代码:
zipphp.php:

en

funct.php:

 

核心代码:

function get_extension($f){                                     //获取文件后缀

        return pathinfo($f, PATHINFO_EXTENSION);

        //print pathinfo($f, PATHINFO_EXTENSION);

}


function check_extension($f){                  //检查文件后缀是否为php,是返回true,不是返回false

        if($f == 'php'){

                return true;

        }else{

                //$f = $f . '.php';

                return false;

        }

}

 

然后再:

if($bz){                  //判断是否加.php后缀

include($file);

}else{

include($file . '.php');

}

 

试验下喽:
                                                                                  一道CTF场景还原&&防御攻破_第2张图片    

                                                                                 一道CTF场景还原&&防御攻破_第3张图片   
不是php 文件自动加上php后缀,平台bwapp里也有这个套路的。                                                     
好了。。累死。。题目还原好了。。开始做题吧

二、突破防御,getshell
只有LFI没有RFL,那我们之前http://bbs.ichunqiu.com/thread-15871-1-1.html?from=oschina的RFI技巧就无效了,并且LFI限制很多,目前我们只能包含已经存在的php文件,不能上传php(废话。。能上传就不用包含了。。),我们能拿到手的都是一些鸡肋。。所以洗洗睡吧。。哈哈,joke啦
php有很多伪协议:zip data php://filter php://......
等等,我们能上传zip啊。。百度之,发现了一个技巧,利用zip伪协议:
zip://目录/xx.zip%23zip里的文件
哎,我们可以把php文件放到xx.zip中,然后利用伪协议读取,然后包含它啊,说的有点乱,看操作:
写一个1.php:

 

打个压缩包1.zip,把1.php放上去,然后上传
                                                               一道CTF场景还原&&防御攻破_第4张图片

然后利用伪协议读取:

 

                                                                一道CTF场景还原&&防御攻破_第5张图片    

我擦勒,这就结束了!做题时间和写题时间不平衡啊。。。。。。就这样吧,你把1.php写入一句话木马就拿到shell了。。总结一下,这一道题:

我们只能上传zip/图片格式------>上传zip,内含.php恶意文件------>文件包含中可用zip协议------>zip:/目录/xxx.zip%231.php可以访问到zip中的.php文件------>getshell

其实这道题还有个技巧,我们把1.zip改成jpg也可以:
                                                                            一道CTF场景还原&&防御攻破_第6张图片

总结
没啥要总结的了吧。。哈哈,欢迎交流  ,写的比较慌,有错误的地方海涵

更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php

转载于:https://my.oschina.net/ichunqiu/blog/811838

你可能感兴趣的