任意文件上传漏洞syr
任意文件上传漏洞
先来几个一句话木马看看
<%execute(request("value"))%> #asp木马
<?php eval($_POST["value"]);?> #php木马
<%@ Page Language="Jscript"%> <%eval(Request.Item["value"])%> #aspx木马
<?php echo file_get_contents('/path/to/target/file'); ?> #读取服务器中的敏感文件
<?php echo system($_GET['command']); ?> #利用command参数执行系统命令
漏洞原理
web应用程序没有对可上传的文件类型,文件内容等作严格过滤,或者web服务器的解析漏洞没有及时修复,导致攻击者可上传恶意的脚本文件,获得执行服务端命令的能力。
漏洞利用
1.如果没有对上传的文件名进行严格验证,或者对上传的文件进行重命名,攻击者就可以上传同名文件,对原有文件进行覆盖。
2.未验证上传文件的大小,攻击者可以上传巨大的文件,占用可利用磁盘空间。
3.上传一句话木马,利用蚁箭等工具进行远程连接,从而控制服务器。
检测机制
客户端js验证:这种不可靠,可以用来提示用户可上传的文件类型,攻击者可以直接通过抓包工具进行绕过。
MIME类型检测:通过检测MIME类型,判断用户上传的文件是否合法,但是攻击者可以抓包修改Content-Type:字段来绕过。
文件后缀检测:检测文件的后缀名,如果不是合法的后缀,禁止上传,最好用白名单进行过滤可上传的文件后缀。如果是黑名单检测,就有很多绕过方式:00截断;大小写绕过 ;双写绕过,如果后端验证时,直接将检测到的不合法后缀去掉,我们就可以双写来绕过;.htaccess文件上传,首先上传一个.htaccess文件,让服务器可以解析我们上传的指定文件名,之后将我们的木马文件名设置为.htaccess中指定的文件名,上传以后,就可以在服务端执行。
文件内容检测:服务端检测文件的内容,通常会检查文件头,可以构造图片码绕过。
绕过方式
黑名单绕过
1. 00截断:
抓包我们上传的文件,将请求包中的文件名修改为test.php%00.jpg,在许多语言的函数中,字符串处理函数中会将0x00识别为终止符,会将00后的.jpg去掉,导致攻击者上传成功木马文件。
如果文件名是get方式传输的,直接在文件名中加%00,如果是post方式提交数据的,需要在16进制中加00 ,因为post中直接加%00不会被自动url解码。
2. 黑名单过滤不全:
上传.php3、.php5、index.html、等文件,这种情况发生在,如果黑名单对可执行的文件过滤不全的情况下,可以上传。
3. 特殊文件名绕过:
在文件的后缀名后加点或者空格,Windows系统会自动将最后面的点或者空格去掉,导致上传成功,但是Linux系统这种方法不行。
4. 大小写、双写绕过、url编码绕过:
将文件名中的点、斜杠、反斜杠url编码或者二次url编码,如果验证文件扩展名时没有进行url解码,但是在服务器端进行url解码了,我们就可以绕过限制。例如上传 test%2Ephp
5. .htaccess文件攻击:
只在apache服务中,存在该文件。这种方法可以绕过白名单检测。
<FilesMatch "aa">
SetHandler application/x-httpd-php
</FilesMatch>
我们首先上传一个.htaccess文件,文件中指定任意的文件名当做代码文件来解析,之后上传指定文件名的文件,就可以执行文件中的代码。
白名单绕过
1.htaccess文件攻击
2. 00截断
3. 寻找其他测试的上传文件接口:
如果可上传的文件是白名单验证的,我们就可以找一些其他的上传接口,通常一些测试接口是没有做限制的,可上传任意文件。
MIME类型检测绕过
通过指定MIME类型,让浏览器遇到该扩展名的文件时,知道使用指定的应用程序来打开该文件。
如果上传时提示文件类型不正确,我们可以抓包修改Content-Type字段值,修改为对应的值,就可以上传木马文件。
服务器解析漏洞
1. Apache解析漏洞:apache 2.0-2.2版本可能存在该漏洞。
Apache解析文件的顺序是从右往左进行的,如果后面不存在能够解析的后缀,默认会向前解析,直至遇到能够解析的后缀。
文件名设置为 test.php.abo.ddd.eee,当我们成功上传这个文件后,访问它,服务器就会把它当做php文件来执行。
2.IIS 6.0解析漏洞
(1). 目录解析:
3. nginx解析漏洞
当url中有不存在的文件时,php默认向前解析,并且是以不存在的文件后缀去解析前一个文件的。
我们访问www.213.com/test.jpg/1.php ,当不存在1.php时,会向前解析,解析test.php。
文件内容检测绕过
把代码文件和图片合成二进制文件,保存为新的图片,但是上传时,还要上传为.php的后缀,才能够被解析。
Windows系统中,打开cmd命令框,输入:
copy /b 1.png+test.php = 2.png
或者利用ExifTool工具来制做图片码
exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" <YOUR-INPUT-IMAGE>.jpg -o polyglot.php
PUT方法写入文件
某些web服务器配置支持PUT方法来提交数据。如果没有防御措施,那么攻击者就可以利用PUT方法来向服务器写入恶意文件。
PUT /images/exploit.php HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-httpd-php
Content-Length: 49 <?php echo file_get_contents('/path/to/file'); ?>
防御方法
1.上传文件的存储目录,不给执行权限。(但是也要防止将源代码回显到前端页面,这样会造成信息泄露)也要防止攻击者通过目录遍历../ 将恶意文件上传到上一级目录,有可能上一级目录有执行权限。
2. 上传的文件进行重命名。
3. 对可上传的文件类型进行白名单校验,只允许上传可靠的文件类型。
4.及时更新web应用软件,防止解析漏洞的发生。
5.不能存在本地文件包含漏洞:如果存在本地文件包含漏洞,攻击者就可以上传任意的文件,再结合本地文件包含漏洞,去执行上传的文件。
任意文件上传漏洞syr的更多相关文章
- 【原创】JEECMS v6~v7任意文件上传漏洞(1)
文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...
- 中国电信某站点JBOSS任意文件上传漏洞
1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...
- CKFinder 1.4.3 任意文件上传漏洞
CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...
- WordPress Contact Form 7插件任意文件上传漏洞
漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...
- WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞
漏洞名称: WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-403 发布时间: 2013-11-28 更新 ...
- WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞
漏洞名称: WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-127 发布时间: 2013-11-12 ...
- WordPress Think Responsive Themes ‘upload_settings_image.php’任意文件上传漏洞
漏洞名称: WordPress Think Responsive Themes ‘upload_settings_image.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-06 ...
- WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞
漏洞名称: WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞 CNNVD编号: CNNVD-201311-015 发布时间: 2013-11-04 更新时间: 2013-11-0 ...
- WordPress Lazy SEO插件lazyseo.php脚本任意文件上传漏洞
漏洞名称: WordPress Lazy SEO插件lazyseo.php脚本任意文件上传漏洞 CNNVD编号: CNNVD-201309-446 发布时间: 2013-09-26 更新时间: 201 ...
随机推荐
- [学习笔记] RabbitMQ的安装使用
安装 使用命令行安装,会自动管理依赖(推荐): choco install rabbitmq 安装包安装: 以管理员身份安装64位的 Erlang. 下载并安装 RabbitMQ 服务.下载地址. R ...
- Go语言系列之标准库path/filepath
一.Path包 import "path" path实现了对斜杠分隔的路径进行操作的函数. func IsAbs(path string) bool // 判断是否是一个绝对路径 ...
- Servlet简单实现开发部署过程
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512008683445027331/ 主要是从下面三个步骤实现我们的预期: (1)构建开发环境: (2)开发Ser ...
- Centos安装与配置
一.安装 默认安装 二.配置 配置网卡 BOOTPROTO=none ONBOOT=yes IPADDR=xxx.xxx.x.xx PREFIX=24 GATEWAY=xxx.xxx.x.x DNS1 ...
- What's The Next|Kube-OVN 社区线上 Meetup 预告!
Kube-OVN 社区线上Meetup 直播预约通道已开启! 活动时间 2021年8月26日(周四)19:00-20:30 活动介绍 8月26日,Kube-OVN 社区 Meetup 将通过线 ...
- 蓝桥杯ALGO-1003
问题描述 JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友. 在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子. 这些石子很漂亮,JiaoSh ...
- php反序列化之pop链构造
本题是某信有一次内部比赛的题目,涉及到pop链的构造问题,所以在这里与大家分享一下 题目 查看源码 逻辑是当参数fn存在且不包含string.zlib.flag这三个字符串时,进行文件包含这里的过滤是 ...
- 【Java】重载与重写
重载与重写 一.重载 定义 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可.同一个类.相同方法名,参数列表不同:参数个数不同,参数类型不同. Java的重载是可以包括 ...
- Flowable实战(七)用户和组
在流程中,最重要的参与者是用户.流程定义了任务何时需要用户参与,什么用户可以参与. 组可以理解为我们常说的角色. Flowable中内置了一套简单的对用户和组的支持,身份管理(IDM ID ...
- Java对象内存模型
2 Java对象内存模型 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 在 JVM ...