点击上方“公众号” 可以订阅哦!

Hello,各位小伙伴晚上好~

这里是依旧勤劳写公众号的小编~

今天本公众号将推出一个新的模块,那就是漏洞知识点总结模块!!!(此处应有掌声~)

该模块的文章会总结各种类型的漏洞的基础理论知识,文章内容也会不断修改,不断完善,因此该模块文章带版本号,如v1.0。

第一期,我们就文件上传漏洞和文件解析漏洞做一次总结。

话不多说,让我们直接开始本期的内容吧~

Part.1

文件上传漏洞

文件上传漏洞

什么是文件上传漏洞呢?

大多数网站都有文件上传的接口,如果没有对上传的文件类型做严格的限制,会导致攻击者可以上传恶意文件。(例如Webshell)

利用这些恶意文件,攻击者可能获取到执行服务器端命令的能力。

漏洞分析

我们从DVWA网站的代码来理解文件上传漏洞。

网站上传界面:

(1)low 等级

前端代码:

前端通过POST方法,将文件传给php处理:

PHP通过$_FILES方法接收文件属性:

  • $_FILES['uploaded']['name'],获取客户端文件的原名称;

  • $_FILES['uploaded']['tmp_name'], 获取文件被上传后在服务端存储的临时文件名。

可以看到,这里并未对上面两个参数做任何处理,就通过move_uploaded_file()函数完成了上传,因此存在文件上传漏洞,因为我们可以在此处上传任意类型的文件。

(2)Medium级别

Medium等级通过$_FILES ['uploaded']['type']获取了文件的MIME类型,通过$_FILES['uploaded']['size']获取了文件的大小。

通过设置白名单的方式,只允许上传jpeg和png类型的文件,并且上传的文件大小需要小于100K。

这种方法也很容易绕过,我们依然可以上传一个任意后缀的文件,使用Burp进行抓包,修改“Content-Type”字段为为“image/jpeg”即可。

//将application/octet-stream修改为image/jpeg

(3)high级别

high级别新增了一段代码用于提取文件的后缀名:

$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);

首先利用strrpos() 函数查找“.”在变量$uploaded_name中出现的位置,然后将得到的数值加1,最后利用substr()函数从变量$uploaded_name的指定位置截取部分字符串。

再通过白名单的方式单独检查文件后缀名是否合规:

if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000))

getimagesize( $uploaded_tmp )会检查文件内容是否是图片格式的。

该级别可以通过%00截断的方式绕过,或者直接上传一个图片马,尝试配合文件包含漏洞来进行绕过了,这两种方法在下面进行讲解。

从上面三个例子我们可以看出,对文件格式做严格的校验可以一定程度上防范文件上传漏洞。

常见的绕过方法

(1)修改文件后缀

如果文件类型检测是在前端代码中,如JS代码:

我们可以将我们构造的恶意脚本后缀修改为图片类型,进行上传:

然后使用burp进行抓包,将后缀名改回来即可:

(2)修改Content-Type类型

如果后端服务器只对$_FILES['uploaded']['type']进行校验的话,那么我们只需要抓包修改报文的Content-Type类型即可,因为$_FILES['uploaded']['type']读取的就是报头的Content-Type字段,修改该字段也并不会对我们上传的文件有任何影响。

(3)%00截断

有时候,我们在文件名后面加一个%00,就可以截断后面的内容,因为%00会被判断为终止符。

如果通过GET的方法传输文件,我们直接抓包添加%00即可:

如果通过POST方法进行传输,与GET方法不同,POST方法不会对%00进行解码,我们需要选中%00,通过ctrl+shift+u快捷键进行转换才行。

但是%00截断仅存在于php < 5.3.4的版本中,且需要关闭magicquotesgpc,因为该开关会对%00等进行转义。而在5.3.4及以上版本中,存在另一个函数addslashes()进行转义。

(4)伪造合法的文件头

从DVWA High级别的文件上传页面可以看出,有时候在后端严格的检测下,我们只能够上传后缀为图片格式的文件。

这种情况下,如果能找到文件包含、文件解析这样的漏洞,我们也可以先将恶意脚本的后缀改成图片格式(如.jpg)上传到服务器中去,再通过其他漏洞来执行。

但是服务器端为了规避这种情况,使用getimagesize()这类函数来检查文件内容是否是图片格式的,这样我们伪造的恶意脚本就无法上传了。

通过伪造合法的文件头可以绕过这种检测。通常检测函数根据文件的前10个字节,就可以判断出文件的类型,而图片的文件头一般都是固定的。

因此,我们可以在我们的恶意脚本前加上一段文件头即可,如GIF89a(gif文件头)。又或者使用010 editor等编辑工具打开一张图片,在图片中加上webshell脚本:

这样我们就可以成功上传图片马了,关于怎么利用文件包含漏洞执行图片马,我将在文件包含知识总结专题中进行讲解。

Part.2

文件解析漏洞

文件解析漏洞

1、什么是文件解析?

当服务器接收到一个HTTP请求的时候,web容器(如IIS、Apache)首先会根据文件的后缀名,来决定如何去处理这个请求。

当服务器获取到所请求的页面的后缀(如.php)后,接下来就会在服务器端寻找可以处理这类后缀名的应用程序,如果找不到则直接把这个文件返还给客户端。

Apache 解析漏洞

该解析漏洞属于用户配置问题,且Apache与php的结合方式需要为Module,如下:

首先要明确一点,Apache对文件的解析顺序是从右往左的,直到遇见一个Apache可以解析的文件后缀为止。

例如访问/test.php.aaa.bbb,由于Apache不认识aaa和bbb,会从右往左一直遍历到后缀.php为止。

文件 /etc/mime.types,记录了大量Apache可以解析的文件类型。

//上图php类型都被注释掉了,不可以解析。

还有另外一个文件/etc/apache2/mods-enabled /php.config

通过正则的方式记录了可以交给php解析的文件类型,上图可以解析.php文件。

提问:访问index.php.aaa是否可以顺利解析?

答案是不可以的,初始情况下Apache是不存在这个漏洞的,从右往左识别到.php后,服务器将index.php.aaa整体交给php来处理,但php并不认识.aaa,所以无法解析。

该漏洞产生的原因是,运维人员在配置服务器时,为了使服务器能够解析.php,自己添加了一个handler,到/etc/apache2/sites-enabled/目录下。

我们在该目录下添加的任意名称的配置文件都会生效,例如创建一个1.conf,内容为:

AddHandler不同于SetHandler,只要文件名中的任何位置有.php,就会被交给php_module解析,而SetHandler只会解析后缀为.php的文件。

IIS 6.0解析漏洞

(1)利用特殊符号“;”

在IIS 6.0版本中,“;”号的功能类似于%00截断,例如我们上传一个恶意脚本“webshell.asp;.jpg”,文件后缀为jpg,可以绕过服务器检测,当我们访问这个文件时,分号后面的内容会被截断,就相当于我们访问的是webshell.asp,测试如下:

(2)文件名为.asp

如果一个目录以“xxx.asp”的格式命名,该目录下的所有类型的文件都会被当作asp文件来解析执行。例如:

IIS 7.5解析漏洞

当IIS 7.5在Fast-CGI运行模式下时,如果服务器开启了“cgi.fix_pathinfo”功能,且去掉了php-cgi.exe程序的“Invoke handler only if request is mapped to”勾选。那么当访问的文件路径不存在时,会对路径进行修剪。

例如webshell.jpg是我们上传的图片马,直接访问/webshell.jpg无法被php解析。

但是利用路径修剪功能,我们可以访问 /webshell.jpg/.php,服务器发现为.php后缀,便交给php解析。php发现无法访问该路径后,便对路径进行修剪,最终解析的是webshell.jpg文件。

Nginx解析漏洞

刚安装好的Nginx是无法解析php文件的。

修改/etc/nginx/sites-available/defaule文件的部分配置如下,以套接字方式启动:

使用php5-fpm start启动web服务后,就可以解析.php文件:

(1)Nginx目录遍历漏洞

Nginx默认不开启目录遍历,需要修改前面的default配置文件:

开启目录遍历漏洞后,可以遍历目录:

(2)Nginx 文件解析漏洞

对于任意文件,访问时在后面添加/任意文件名.php ,便可交给php进行解析。

和Apache一样,Nginx也是通过 /etc/nginx/mine.types识别文件。

该漏洞同样是配置导致的,默认不存在,需要在/etc/php5/fpm/php.ini中开启cgi.fix_pathinfo功能,该功能默认开启。

还需要配置/etc/php5/fpm/pool.d/www.conf文件,修改security.limit_extensions为空,允许解析其他格式文件为PHP,原本的配置为:

//只解析php,php3,php4,php5后缀的文件

修改为空后,会把所有后缀都以php解析。

例如1.jpg是我们上传的图片马,利用该漏洞进行访问:

Nginx发现访问的文件为.php后缀,便交给php处理,php发现/1.jpg/1.php不存在,剪掉/1.php后缀,把1.jpg当成需要执行的文件来处理。

Part.3

文件上传漏洞的防护

漏洞防护

1、前端JS代码过滤

前端通过JS代码做第一次过滤,可以起到一定的防范作用。虽然可以被burp人工绕过,但仍然可以减少一些攻击行为,以及过滤掉正常用户的误上传操作,减轻后台服务器的压力。

2、后端设置黑白名单

通过设置黑名单或者白名单的方式,对上传文件的后缀做严格的检查。但黑名单可能出现遗漏的情况,也可能被大小写等方式绕过,因此白名单一般更安全。

3、限制上传文件大小

避免攻击者上传过大的恶意脚本,防止由于内存、磁盘耗尽而造成的拒绝服务攻击。

4、将文件上传的目录设置为不可执行

只要Web容器无法解析该目录下的文件,即使攻击者上传了恶意脚本文件,服务器本身也不会受到影响。当前一些网站,在文件上传之后,会将文件放到独立的存储上,做静态文件处理,一方面方便使用缓存加速,降低性能损耗,另一方面也杜绝了脚本被执行的可能性。

5、采用随机数改写文件名

只要攻击者无法获取他们上传的脚本的文件名,他们也就无法访问到上传的恶意脚本了。

Part.4

结语

这就是今天的全部内容了,小伙伴们都学会了吗?

如有问题,欢迎到我的微信公众号留言哦~

Peace!

00截断上传绕过_【文件上传与解析】文件上传与解析漏洞总结v1.0相关推荐

  1. 00截断上传绕过_关于上传中的00截断分析

    关于上传中00截断的细节,很多朋友在渗透中都会发现一些这样的有趣现象,这个站点使用00截断上传的方法上传成功了,而换一个站点又失败了,这是什么原因呢?你看了这篇文章就会明白. 00截断原理 0x00是 ...

  2. 00截断上传绕过_小谈截断上传漏洞

    0x00 前言 小菜今天在测试网站的时候,发现存在上传点,于是尝试各种姿势,环境为iis7.5,于是乎来一个解析漏洞,发现并不可以,最终百度乎,发现上传有很多种利用方法,所以小菜就去学习了一下截断上传 ...

  3. 00截断上传绕过_上传绕过总结

    欢迎各位关注我的专栏,在以后的时间里,我将分享更多技术,在这里你能学到很多知识和姿势.自我介绍:高级安全研究员|擅长Python\PHP\JAVA审计;SONRT规则;etc.|陈小兵著<SQL ...

  4. 使用elementui实现表单上传功能_使用ElementUI中的upload组件上传Excel文件

    最初使用该组件实现图片上传是没有问题的,前后端配合,最终实现想要的效果,组件使用过代码如下: 将文件拖到此处,或点击上传 现在改为使用该组件实现Excel文件上传,组件的使用几乎是不变的,代码如下: ...

  5. 如何在label上显示字_如何地图上标注店面_新开的店铺要怎样上地图显示_怎么将公司标记在地图...

    新开的店铺商铺商家商户企业工厂怎么标注地图位置?如何地图上标注店面_怎么将店铺标记在地图_新开的店铺要怎样上地图显示?还没有办好营业执照可以做?您可能会有很多地图疑问?请直接联系腾图通地图服务公司为您 ...

  6. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解

    在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...

  7. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解_PHP教程

    在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...

  8. 树莓派数据上传数据库_树莓派内部数据向domoticz的上传

    树莓派的数据上传->Domoticz 树莓派的温度检测到的数据可以通过API发送到domoticz 示例代码:#!/usr/bin/env python # -*- coding:utf-8 - ...

  9. mysql 上亿记录_一入职!就遇到上亿(MySQL)大表的优化....

    XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要长时间才可以完成切换要追延迟来保证主从数据的一致性) XX实例的慢查询数量最多(执行 ...

最新文章

  1. August 14, 2009 - Choice
  2. nagios报警不发邮件
  3. python从入门到精通怎么样-Python 从入门到精通:一个月就够了
  4. android 中ImageView的scaletype属性
  5. 查找指定日期数据所在分区数据
  6. pure-ftpd搭建教程
  7. makefile中的wildcard
  8. SpringBoot整合MyBatis后台分页前端BootstrapTable添加删除查看编辑搜索数据(二)
  9. 6、ES6的let和const
  10. npm:no such file /usr/local/lib/node_modules/vue-cli/node_modules/get-stream
  11. c语言学生成绩管理系统的设计,C语言学生成绩管理系统设计
  12. 基于linux服务器的hashcat握手包破解
  13. Python软件编程等级考试三级——20220618
  14. Minecraft Server 搭建手账
  15. 【滴水逆向笔记】C语言指针
  16. tools:ignore=“MissingConstraints“属性
  17. 开发者讨厌图形界面吗_为什么这么多开发人员讨厌招聘人员
  18. Mac OS X 系统更新升级包下载后的存储位置
  19. 基于用户协同过滤算法的电影打分与推荐
  20. GD32F303CCT6与GD32F407VKTC spi 主从通信

热门文章

  1. 未来,所有的企业级SaaS应用都将依托于容器
  2. 使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移
  3. Eclipse 设置
  4. C语言之结构体以及结构体对齐访问
  5. 使用XML模板在excel进行配置
  6. 【转】Apache配置中ProxyPassReverse指令的含义
  7. To handle Unhandled Exception
  8. matplotlib画图绘制辅助线
  9. word2vec 中的数学
  10. 盘点Windows10系统的使用小技巧三 —— 虚拟桌面