一道CTF场景还原&&防御攻破
2016-12-26 00:00
211 查看
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:
核心代码:
采用了白名单,攻击者想利用的话就基本只有解析漏洞了,但是我这是apache高版本,暂时不用考虑这块;
采用MIME验证,这块只是辅助,毕竟用户burp拦截下就可以改掉了;
文件名是md5加密的,00截断截不了,而且我这儿php也是高版本的,不用考虑;
这道题目的上传要求这样就基本满足了,送点福利,自己整理的:
这里本来想采用php二次渲染防止图片马,但是。。这样肯定不行,这道题目是让拿shell再拿flag的,你不让传咋行。。哈哈,这是后话了。
文件包含代码:
zipphp.php:
en
funct.php:
核心代码:
然后再:
试验下喽:
不是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放上去,然后上传
然后利用伪协议读取:
我擦勒,这就结束了!做题时间和写题时间不平衡啊。。。。。。就这样吧,你把1.php写入一句话木马就拿到shell了。。总结一下,这一道题:
我们只能上传zip/图片格式------>上传zip,内含.php恶意文件------>文件包含中可用zip协议------>zip:/目录/xxx.zip%231.php可以访问到zip中的.php文件------>getshell
其实这道题还有个技巧,我们把1.zip改成jpg也可以:
总结
没啥要总结的了吧。。哈哈,欢迎交流 ,写的比较慌,有错误的地方海涵
更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php
2.文章知识点:php语法;php伪协议;ctf;
3.文 章 作 者:xiaoye
4.本文参与i春秋社区原创文章奖励计划,未经许可禁止转载!
前言
例行打卡,昨晚让一个bug弄得觉也没睡好。。果然我太菜。。本来是打算写XXE的,但是想起来了之前在一个群里讨论的ctf题目,当时那位小伙伴就说了下大概情形和大致思路,心挺痒,,但是那个题目应该是他们学校内网才能访问。没办法,那就根据他说的来自己写一道ctf题目喽。正好好久没写php了,练练手。
一、题目的还原
他大致是这么说的:有上传点,只能上传zip或者jpg/png/jpeg图片格式,上传后可以知道路径;有LFI(本地文件包含漏洞),但是包含的如果不是php文件就在后面再加上一个.php后缀;没有RFI(远程文件包含漏洞);
好吧,听起来不是很难,我们分开写,先写上传点,限制为zip&&图片格式:
indexdemo.html:
<html> <form method='POST' action='upload_filedemo.php' enctype='multipart/form-data'> <label for='file'>filename:</label> <input id='file' name='file' type='file' /><br> <input type='submit' name='submit' value='submit'/> </form> </html>
upload_filedemo.php:
<?php if(isset($_POST['submit'])){ //file information $uploaded_name = $_FILES['file']['name']; $uploaded_type = $_FILES['file']['type']; $uploaded_size = $_FILES['file']['size']; $uploaded_tmp = $_FILES['file']['tmp_name']; $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); //where will we put file // //$now_path = dirname(_FILE_) . '/upload/'; define('FILE_PATH', dirname(__FILE__)); $target_path = FILE_PATH . '/upload/'; $target_file = md5(uniqid().$uploaded_name) . '.' . $uploaded_ext; 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; } } ?>
核心代码:
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也是高版本的,不用考虑;
这道题目的上传要求这样就基本满足了,送点福利,自己整理的:
这里本来想采用php二次渲染防止图片马,但是。。这样肯定不行,这道题目是让拿shell再拿flag的,你不让传咋行。。哈哈,这是后话了。
文件包含代码:
zipphp.php:
<?php include('funct.php'); $file = $_GET['file']; $ext = get_extension($file); $bz = check_extension($ext); if($bz){ include($file); }else{ include($file . '.php'); } ?>
en
funct.php:
<?php function get_extension($f){ return pathinfo($f, PATHINFO_EXTENSION); //print pathinfo($f, PATHINFO_EXTENSION); } function check_extension($f){ if($f == 'php'){ return true; }else{ //$f = $f . '.php'; return false; } } ?>
核心代码:
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'); }
试验下喽:
不是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:
<?php phpinfo(); ?>
打个压缩包1.zip,把1.php放上去,然后上传
然后利用伪协议读取:
我擦勒,这就结束了!做题时间和写题时间不平衡啊。。。。。。就这样吧,你把1.php写入一句话木马就拿到shell了。。总结一下,这一道题:
我们只能上传zip/图片格式------>上传zip,内含.php恶意文件------>文件包含中可用zip协议------>zip:/目录/xxx.zip%231.php可以访问到zip中的.php文件------>getshell
其实这道题还有个技巧,我们把1.zip改成jpg也可以:
总结
没啥要总结的了吧。。哈哈,欢迎交流 ,写的比较慌,有错误的地方海涵
更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php
相关文章推荐
- 《网络黑白》一书所抄袭的文章列表
- 《网络黑白》一书所抄袭的文章列表
- 漫画告诉你什么是DDoS攻击
- 所谓的IT精英、某宝支付架构师的招行账户一把损失20万,招行表示摊手!
- 新御剑1.5注入版(11.29)
- 80sec被黑原因分析
- 网络安全助手 - 御剑
- 突破”子网隔离”***C段
- 网上说是"最标准的SQL注入语句"
- 转自CISPS《十年安全售前的经验与大家分享》
- 2007年世界顶级杀毒软件排名
- 应用软件漏洞成“互联网+”主要安全威胁
- 玩转几大***测试系统
- 如何借助Sniffer来诊断Linux网络故障?
- 常用Linux网络安全工具
- CIO的网络安全“三大纪律”
- 国际网络信息安全认证中心
- ***常用***手段揭秘及其预防措施介绍
- netfilter/iptables全攻略