文章目录

  • 前言
  • 一、题目
  • 二、解题步骤
    • 1.我的错误思路
    • 2.正确解题姿势
  • 总结

前言

CTF小白,这道题思考了很久,i春秋上现在也没write up,卡了1天了,后面在buuctf找到了题解答。通过这一天让我对文件上传有了更深的理解。

目录

文章目录

一、题目

进入环境。

二、解题步骤

1.我的错误思路

2.​​​​​​正确解题姿势

总结


一道普通的文件上传题,通过一天的思考我得到这类题目的思路总结。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目


二、解题步骤

1.我的一开始错误思路,如果想直接看正确解法请直接跳过

1.因为之前写过类似的题目,刚上手比较兴奋,草草的按个F12发现没看到啥重要的,直接开始做。

话不多说,直接上传一个php文件。

果不其然 寄。

莫慌,我用burp suite改个jpg后缀。

成功。

我立马想到的是用蚁剑去连接。

emm 文件上传到那呢???

查了一下资料,一般在地址后面加个upload。

拿我的蚁剑连接

寄!!!!重新试了几遍,一样。

我一度怀疑是我的蚁剑坏了,所以我在之前的一个题目试了一下,没坏。

好吧,病急乱投医。

啥%00截断,.htaccess,图片木马啥都给我试一遍。。。

结果可想而知。。。。。

。。。。

后面我开始总结,思考(网上暂时没找到write up 只能自己想),并且深入的去想题目下面的代码(没错下面有后端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文件!');}
}

反思:

1.盲目的使用前端绕过,上传图片木马后,图片未解析就用蚁剑连接。

2.没有细心的理解源码

3. 上传的任何脚本,都必须要被服务器解析才能运行。

2.正确解题姿势

阅读源码可得:

1.后端执行的是白名单过滤,仅允许上传zip、jpg、gif、png后缀的文件。

2.上传后的文件放在upload路径下,rand函数加hash随机命名

3.对于zip文件,如果解压后,文件夹中含有php文件,就将其移除。

结合之前进入文件目录后,发现服务器是APACHE,这里可以使用apache天生的解析漏洞。

如果遇到无法解析的后缀名会向前解析.

例: 123.php.abc 先解析abc,无法解析后解析PHP。

这样就成功绕过了zip解压后的文件验证。

步骤如下

1.在文件夹中创立一个php小马 <?php @eval($_POST['hack']);?

2.命名为 111111111111111111   没有错(18个一,后面说原因)

3.压缩为zip文件

4打开010editor(没下的点击看教程下载)在这里打开zip文件。

5.将111111111111111111改为../../hack.php.abc (18个1是我这个文件名要修改的长度,可以根据自己要创立的文件名长度自行修改( 比如../../shell.php.abc  就写19个1))(../../是为了上传到根目录)

6.上传

7.进入上传路径,获得flag

总结

还是要多懂得一些原理,容易解答题目,不然容易盲目寻求方式,这里我一直卡在前端验证的思路上,根本没有仔细看源码。

作者水平有限,有任何不当之处欢迎指正。

本文目的是为了传播web安全原理知识,提高相关人员的安全意识,任何利用本文提到的技术与工具造成的违法行为,后果自负!

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

  1. 中国菜刀使用教程--ctf 文件上传

    首先把包含一句话的文件上传,php内容文件如下: <?php eval($_POST['a']); ?> 如果会过滤 <? 和 php 关键字,可以使用长标签 <script ...

  2. ctf文件上传基本思路+例题

    目录 简介 一句话木马 蚁剑 例题 总结思路 附言 简介 文件上传本质上就是将文件传输到服务器时没有做好检测和过滤,导致可上传恶意程序到服务器,从而获得后台权限来干点坏事.一般这个恶意脚本文件称为we ...

  3. 第一次CTF【后台登录、简单的sql注入之、简单的sql注入之2、猫抓老鼠、i春秋 文件上传】

    后台登录 http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 根据md5($password,true)最后要得到原始二进制字符串,要含有or ,在or ...

  4. CTF学习记录 i春秋 《从0到1:CTFer成长之路》文件上传

    21.10.19 第二次开始学习CTF 感觉很有收获 至少有让自己忙起来了的感觉 感觉有一些学习状态了 打算重新记录一下学习笔记!加油 我会坚持下去的! 题目代码 首先附上题目的代码段(不完整) sh ...

  5. [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.这篇文章主要介绍5月9日参加津门杯CTF题目知识,包括power_cut.hate_ ...

  6. [网络安全自学篇] 三十一.文件上传之Upload-labs靶场及CTF题目01-10(四)

    这是作者的系列网络安全自学教程,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了编辑器漏洞和IIS高版本文件上传漏洞,包括FCKeditor.eWeb ...

  7. CTF中文件上传题目整理总结

    0X00说在前面的话 CTF中或多或少都有点文件上传的题目,而这个又是最好整理的,变化的方式不是很多(至少到目前为止我没有发现太多的姿势....),随意就先整理这个吧. 0x01文件上传绕过的主要姿势 ...

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

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

  9. CTF 总结01:文件上传绕过

    问题描述 (⌐■_■)在做图片马上传的题目,发现自己折腾很久,终于成功达到了抽刀断水.南辕北辙的效果~距离正确的WP仅有一部西游记那么长-- 没关系,菜鸟做题就是这样屡败屡战~失败是成功的山顶洞人,也 ...

最新文章

  1. 复习03统计学习方法(K近邻KNN)---图片版
  2. ASP.NET WebApi技术从入门到实战演练
  3. 计算机老师 学高为师 身正为范,何为老师,学高为师,身正为范
  4. 柱坐标系下的ns方程_麦克斯韦方程组小结
  5. 【面向对象】面向对象程序设计测试题9-对象之间的继承关系测试题
  6. 关于ASPNET_Membership用户被锁的解决
  7. 字符动图_图解redis五种数据结构底层实现(动图哦)
  8. Qt Qt5.15+Xcode12+BigSur macOS及iOS开发环境搭建
  9. C语言视频教程-谭浩强版-小甲鱼主讲—P2
  10. 盘点服装进销存软件和生产进销存软件排行榜
  11. pop3邮箱怎么设置收发服务器端口,常用邮箱的服务器(Smtp/POP3)地址和端口总结
  12. 设计模式-建造者模式(5)
  13. js将网页保存成图片
  14. 少儿编程Scratch学习教程4--基本操作(一)特效例子
  15. 论文《Face Alignment at 3000 FPS via Regressing Local Binary Features》笔记
  16. 对QQ和搜狗拼音的期望 - 2010.6
  17. 用wegame启动lol显示服务器维护,wegame启动不了英雄联盟(wegame点启动又弹回界面)...
  18. 亲,你寄的 U盘不是 4G 的哟~
  19. html文字边框环绕,使用css的文本边框(围绕文本的边框)
  20. 广告、广告联盟、异业联盟及广告接入介绍

热门文章

  1. 谢文的离职代表着雅虎中国的没落?
  2. 谷歌浏览器一打开就是123sogou的界面
  3. bootstrap打开模态滚动条modal窗口引起页面抖动解决办法
  4. 利用Python网络爬虫获取分类图片,简单处理反爬教学
  5. PS学习记录9--PS网页设计教程IX——巧用大括号设计惊艳的咨询页面
  6. C语言--返回指针的函数--指针函数
  7. SpringBoot(一)
  8. python 使用pandas 读写excel文件
  9. 小白学习Hibernate遇到的错误以及解决办法(GenerationTarget encountered exception accepting command : Error executing)
  10. 周末直播活动|Jenkins共享库实践