【信安学习笔记三】文件上传
个人学习参考用笔记
目录
- 前言
- 一、文件上传
- **定义**
- **危害**
- **查找及判断**
- **分类**
- 二、验证与绕过
- 前端防护
- 后端防护
- (一)黑名单
- (二)白名单
- (三)内容及其他
- 三、漏洞
- (一)中间件解析漏洞
- (二)编辑器漏洞
- (三)CMS文件上传
- 四、WAF绕过
前言
文件上传需要配合文件包含漏洞
一、文件上传
定义
指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等。
危害
可以通过文件上传漏洞上传webshell后门
查找及判断
- 黑盒:使用扫描工具扫描打开网站。
- 黑盒:测试会员中心(登录后作为用户上传资源),测试后台。
- 白盒:直接撸源代码。
分类
- 常规类:扫描获取、会员中心、后台系统、各种途径
- CMS类:CMS源码
- 编辑器类:ckeditor、fckeditor、xxxxeditor
- 其他CVE:代码审计、第三方应用
案例:
- 解析漏洞+图片中加入源码
- 上传脚本尝试绕过检测
- 文件上传靶场https://github.com/c0ny1/upload-labs
二、验证与绕过
文件上传验证方式:
后缀名(直接):黑名单、白名单
文件类型(间接):MIME信息
文件头(间接):内容头信息
前端防护
JS防护
通过前端js代码过滤文件后缀
后端防护
黑名单:
明确不让上传的格式后缀,如asp、php、jsp等不让上传
【尝试用php5 Phtml】
白名单:
明确可以上传的格式后缀,如只允许上传jpg、png、zip等
【相比黑名单更安全一些】
(一)黑名单
1.特殊解析后缀
对应lesson2
采用phtml,php3,php4, php5, pht的这种格式绕过通关大小写的方式绕过,但是前提是要在配置文件里面有这样的一句话:
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
2…htaccess解析
对应lesson3 只适用于apache
先上传一个.htaccess文件:
<FilesMatch "gg.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
意思是讲gg.jpg以php格式执行,之后再上传一个含有代码的jpg文件即可
3.大小写绕过
对应lesson5 只适用于windows
过滤代码中没有转换为小写的代码
上传“.Php”文件即可绕过
4.空格绕过
对应lesson6
过滤代码中没有去空格的代码
上传“.php ”文件即可绕过(在windows中文件后缀会自动去空格 但数据包中不会 上传到服务器后服务器会自动去除空格)
5.点绕过
对应lesson7
同理空格绕过,即上传“.php.” 服务器也会自动删除.
6.::$$DATA绕过
对应lesson8 只能应用于windows
同理5、6,上传“.::$$php” 这些方法都是基于windows命名规则
7.一次过滤
对应lesson9、10
如果过滤方法是一次过滤,而非循环过滤或递归过滤
.php会被过滤
.pphphp被过滤后变成.php
(二)白名单
1.MIME绕过
对应lesson2
发送符合要求的.jpg文件,在抓包软件中将后缀改为.php
或
直接发送.php文件,然后在浏览器中修改MIME类型(Contene-Type)为jpg
2.%00截断
对应lesson11、12 针对地址
【应用条件:
php版本小于5.3.4
php的magic_quotes_gpc为OFF状态】
关键代码:
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
%00作用:截断,后面数据都被注释掉
在抓包软件中,正常数据为
POST /uploadlabs/Pass-11/injdex.php?save_path=../upload
服务器都到的savepath为…/upload/2342432.jpg,即正常上传的图片文件
如果改为
POST /uploadlabs/Pass-11/injdex.php?save_path=../upload/1.php%00
则服务器的savepath为…/upload/1.php%004324232.jpg,图片名被截断,成功上传php文件
注:POST不会自动解码有时候需要把它进行url编码变成%25%30%30
3.0x00截断
针对文件名
(三)内容及其他
1.文件头检测
对于lesson13、14、15
gif文件头一般‘GIF89a’,png的文件头为塒‘NG’。
getimagesize,exif_imagetype等函数只能对图片起作用
【用文件包含漏洞执行上传的图片马】
2.二次渲染:
对于lesson16
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸,保存,删除 要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片(标准化)并放到网站对应的标签进行显示。
先上传一张图片马然后下载,将下载的图片马和原先的图片进行对比,发现没有被渲染的位置插入PHP代码最后在上传,再下载观察PHP代码是否被渲染。(针对jpg,png,gif的修改方式均不同
3.条件竞争:
对于lesson17
成功上传了php文件但后端在短时间内将其删除了,所以我们要抢到在它删除之前访问文件,(就如我们打开文件的时候去尝试删除它,会提示文件文件已打开无法删除)这样从而防止文件被删除。
我们可以上传一个有.php文件,后端会先将其放置在临时存放路径,然后才检验上传文件是否和要求的文件一致,如果不符合就会删除文件。那如果我们在从文件上传成功到开始检验文件后缀的这一段时间,我们进行访问该文件,那么就会导致防护被绕过,那就是相当于重命名这一过程就会被绕过。
网站开发者开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
三、漏洞
(一)中间件解析漏洞
tomcat文件解析漏洞
例:CVE-2017-12615
https://vulhub.org/#/environments/tomcat/CVE-2017-12615/
nginx解析漏洞
例:https://vulhub.org/#/environments/nginx/nginx_parsing_vulnerability/
IIS6/7.X
apache解析漏洞
例:https://vulhub.org/#/environments/httpd/apache_parsing_vulnerability/
(二)编辑器漏洞
网站有些会有编辑器界面 如遇到可考虑编辑器漏洞
较老 碰到可去 https://navisec.it/编辑器漏洞手册/ 查询
通过目录扫描来寻找
例:
Fckeditor exp利用
ueditor 漏洞利用
(三)CMS文件上传
案例:通达OA https://www.cnblogs.com/twlr/p/12989951.html
四、WAF绕过
WAF检测机制:
- 检查文件内容 如检查图片中有没有php代码 应对后面WAF专题讲
- 检查文件名 filename
WAF绕过思路:
- 让WAF检测不出filename中的文件后缀,即防匹配
- 绕过的同时,还要保证上传的文件可以被执行(如上传‘.ph p’,能绕过但是无法执行’)
正常上传数据包中参数:
- Content-Disposition #一般可更改
- name #表单参数值,不能更改
- filename #文件名,可以更改
- Content-Type #文件MIME,视情况更改
正常数据包如下
Content-Disposition: from-data;name: "uploadfile";filename : "x.jpg"
Content-Type: image/jpeg;
常见绕过方法:
下面方法仅提供思路,防护方法也在进步
1数据溢出
在Content-Disposition和 name中间写入大量垃圾数据从而绕过
Content-Disposition: from-data;dgauysgdkauysgduaywdgayuwd此处为大量垃圾数据 结尾要有分号uaywdawgdiuyagwdukyGuayagwdiuyfytiftyf;name: "uploadfile";filename : "x.php"
Content-Type: image/jpeg;
2改变符号
filename只保留第一个双引号,WAF找不到后面的双引号,无法识别,但php能上传(猜测安全狗是寻找”前面的内容识别,因此保留后面的双引号不行)
Content-Disposition: from-data;name: "uploadfile";filename : "x.php
Content-Type: image/jpeg;
或
Content-Disposition: from-data;name: "uploadfile";filename : "x"x.php
Content-Type: image/jpeg;
3截断
1.%00截断
filename改为:“x.php%00x.jpg”
安全狗认为是jpg文件,但服务器%00后面的内容被截断,执行的是php文件(现在好像不行了,上传之后还是jpg文件
2.分号截断
filename改为:“x.jpg;.php”
安全狗识别到第一个分号就识别结束了
3.换行
文件后缀换行输入,安全狗识别到“x.p/nh/np”但服务器正常执行php
Content-Disposition: from-data;name: "uploadfile";filename : "x.p
h
p"
Content-Type: image/jpeg;
4重复参数
写很多个filename,看WAF识别的是哪个(看WAF代码是不是单次验证)
Content-Disposition: from-data;name: "uploadfile";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php";filename : "x.php"
Content-Type: image/jpeg;
或把原有数据包的数据放进filename,将原有正常数据作为干扰项,类似白名单
Content-Disposition: from-data;name: "uploadfile";filename : "Content-Disposition: from-data;name: "uploadfile"x.php"
Content-Type: image/jpeg;
fuzzy字典
burp工具,先本机测试,直接fuzz目标会被封ip
https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/TuuuNya/fuzz_dict
https://github.com/jas502n/fuzz-wooyun-org
【信安学习笔记三】文件上传相关推荐
- 网安学习笔记-1 文件上传
文件上传漏洞初步认识 什么是文件上传漏洞 指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等 文件上传漏洞的危害 可以通过文件上传漏洞上传 ...
- java web 文件上传_Javaweb学习笔记10—文件上传与下载
今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思 ...
- antd vue表单上传文件_AntDesign vue学习笔记-自定义文件上传
上传文件时实际可能需要传输一个token. 方法一: 1.查看vue antdesign文档 https://vue.ant.design/components/upload-cn/ 2.使用cust ...
- 菜鸟教程php 文件上传,php入门学习知识点三 PHP上传
if(is_uploaded_file($_FILES["Imgs"]["tmp_name"])){ $phpupfile=$_FILES["Imgs ...
- MUI学习笔记之图片上传和预览
MUI学习笔记之图片上传和预览 源代码是从博客园下载 我一边学习,一边注释,力求理解 <head> <meta charset="UTF-8"> <m ...
- wmm的学习日记(文件上传漏洞)
这个星期正式学习了一下文件上传漏洞,虽然之前也有接触过这样的题目,但还是云里雾里的感觉.现在应该可以不靠题解完完全全靠自己的脑子做一些简单的题目啦.接下来就让我浅浅总结一下吧. 目录 文件上传漏洞简介 ...
- java上传视频到七牛云_Java进阶学习:将文件上传到七牛云中
Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...
- java ee 上传文件_17.《JavaEE 学习笔记》Servlet 上传文件
功能介绍: 利用 Servlet 和表单提交,选择本地文件上传到服务器.上传的文件可以是文本文件或图像文件或任何文档,不能是文件夹. 需要引入的 jar 文件:commons-fileupload-1 ...
- Python+Selenium学习笔记10 - send_keys上传文件
在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...
最新文章
- SQLI DUMB SERIES-5
- 周刊#003提要:吴恩达团队盘点2019 AI 大事件圣诞 AI 论战
- 2016年华为校招上机考试试题答案
- php数据库操作命令精华大全
- image copy oracle,RMAN删除image copy时遇到的问题
- 对于有志于成为架构师的开发者,支付宝架构团队有何建议?
- 为什么没有看到webcontent_环卫工人工资低工作辛苦,为什么还有那么多人愿意做呢?...
- 小米集团架构调整:王川出任CSO 李肖爽兼任大家电部总经理
- 华为机试HJ60:查找组成一个偶数最接近的两个素数
- GBDT、随机森林、xgboost算法原理解析视频公开
- Tricks Device 最短路+最大流
- win10无线投屏_Win10电脑屏幕分割成四分屏投屏测试
- 每日一题题目26:选择排序(冒泡排序改进版)
- 360无线网卡驱动服务器,360无线网卡驱动
- win10系统怎么找服务器地址,win10系统下如何快速查找本地ip地址
- 除了用jenkins,还有什么方法可实现持续集成?
- 计算机专业自主招生有哪些学校,2019自主招生学校有哪些 自主招生考试院校名单...
- c# 游戏设计:人物走动动画
- Android 2020年经典面试题
- Adobe Spark试用手记
热门文章
- 孩子数学成绩不好怎么办_孩子数学成绩不好,家长想很多办法却没有效果,怎么办?...
- IDEA中导入之前的web项目.完整篇.并解决了导入后项目的类全是橙色的J的角标的问题
- python中txt文件读取错误原因以及解决办法‘gbk‘ codec can‘t decode byte 0x80 in position 2: illegal multibyte sequence
- php产品,php开源产品
- 从一个自己到下一个自己(郭嘉逸)
- java内存溢出原因及解决_java内存溢出的原因和解决方法
- 决战平安京服务器维护,决战平安京3月5日维护更新公告
- 腾讯QQ2009顶级技巧18条
- 常见数据库可视化方式各类比较
- git 查看远程分支提交信息,不合并