当前位置:网站首页>文件上传漏洞原理
文件上传漏洞原理
2022-07-23 05:40:00 【GSflyy】
文件上传漏洞介绍
文件上传是现代互联网常见功能,
允许用户上次上传图片、视频、及其他类型文件,向用户提供的功能越多,Web受攻击风险越大。
上传文件时,如果未对上传文件进行严格验证和过滤,就容易造成文件上传漏洞,上传脚本文件(包括asp,aspx,php,jsp等)
恶意上传行为可能导致网站乃至整个服务器被控制。恶意的脚本文件又被成为WebShell,WebShell具有强大的功能,如查看服务器目录、服务器中文件、执行系统命令等。
JS检测绕过(前端检测)
检测原理
调用Js的selectFile()函数, 检测文件后缀
绕过方法:
1.删除本地浏览器js方法(禁用js)
2.修改文件后缀
文件后缀绕过
检测原理
通过函数pathinfo()获取文件后缀,将后缀转换为小写(strtolower)并判断是否为php
绕过方法
有些中间件 允许解析其他文件后缀的,如在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件。所以上传一个后缀名为php3、phtml的文件即可。

绕过方法2
结合Apache文件解析机制,从后往前解析文件后缀,若后缀不可识别则继续判断直到遇到可解析的后缀为止,例如123.php.360,Apache解析机制会将其解析为php文件并执行

ps:不允许上传php文件,就上传php.360(笑)
文件类型绕过(白名单绕过)
MIME绕过:
检测原理
利用$_FILES['files'] ['type']判断图片格式是否为image/gif,image/jpeg,image/pjpeg,不是则不允许上传
绕过方法
$_FILES['files'] ['type'] 该值从请求数据包中Content-Type中获取,因此burp抓包修改这个标签值即可绕过
上传文件为php时,Content-Type值为application/octer-stream,上传文件为jpg格式的文件时Content-Type值是image/jpeg。
文件幻数检测绕过:
检测原理
利用getimagesize()函数,如果不能获取图片信息(表示该文件并非图片)则不能上传该文件
绕过方法
在脚本文件开头补充图片对应头部值(比如加上GIF89a)
89 50 4E 47 0D 0A 1A 0A (PNG头部),注意要选中十六进制转ascii

文件截断绕过
检测原理:
由于00代表结束符, PHP会把00之后的字符都删除
截断条件:PHP版本小于5.3.4.magic_quotes_gpc(魔术引号)处于off状态
适用情况:
上传的文件被重命名了,无法找到自己上传的文件
绕过方法:
GET方法中加入%00截断
POST方法中传入%00并解码
ps:截断绕过可以控制文件的上传路径
文件内容绕过
检测原理:
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。这里使用sleep()函数来模拟判断是否含有脚本所需要的时间
<?php
fputs(fopen('./shell.php','w'),'<?php phpinfo();?>')
?>
绕过方法:
利用成功上传至删除文件的时间差,上传一个.php文件,在未删除之前访问该php文件使其运行生成一个新的php文件,新文件不会被删除。
边栏推荐
- last-child不生效问题
- The object in $attrs doesn't change, but it triggers watch listening?
- After the formula in word in WPS is copied, there is a picture
- General view, serializer
- [Doris]配置和基本使用contens系统(有时间继续补充内容)
- 使用require.context完成本地图片批量导入
- JS higher order function
- C语言中的分支和循环语句归属
- Application of higher-order functions: handwritten promise source code (II)
- NPM init vite app < project name > error install for[‘ [email protected] ‘] failed with code 1
猜你喜欢

Pytorch white from zero uses North pointing

flex+js实现内部盒子高度跟随其中最大的高度

Pycharm occupies C disk

The attribution of branch and loop statements in C language

Five methods to prevent over fitting of neural network

MySQL之函数&视图&导入导出

牛客刷题记录--Mysql

机器学习零散笔记:一些概念和注意

Install enterprise pycharm and Anaconda

Burpsuite learning notes
随机推荐
The attribution of branch and loop statements in C language
js的继承方式
【Pyautogui学习】屏幕坐标、鼠标滚动
TypeScript 高级类型
Sequencing, current limiting
基于el-table的树形表格及js-xlsx实现下载excel功能(二)
MySQL增删改查&&高级查询语句
Keras saves the best model in the training process
Install pyGame using CMD
Machine learning algorithm for large factory interview (6) time series analysis
D2dengine edible tutorial (2) -- drawing images
D2DEngine食用教程(2)———绘制图像
[监控部署实操]基于granfana展示Prometheus的图表和loki+promtail的图表
第一篇博客
Copy a project /project in idea
PyGame realizes the airplane war game
机器学习零散笔记:一些概念和注意
高阶函数的应用:手写Promise源码(一)
D2dengine edible tutorial (1) -- the simplest program
MySQL之函数&视图&导入导出