热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

不安全的文件下载概述文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行

不安全的文件下载

概述

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。

切记:所有与前端交互的数据都是不安全的,不能掉以轻心!

实验

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)相当于把一个文件名传到后端,后台去找这个文件,然后响应输出到前端

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

测试文件下载漏洞时,我们可以用目录遍历的方式

http://192.168.171.133/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../../../../../../1.txt

这时候就能下载到我们想要的文件,尤其是 Linux 上很多配置文件都有固定的目录

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

防范措施

  • 对传入的文件名进行严格的过滤和限定
  • 对文件下载的目录进行严格的过滤

 

不安全的文件上传

概述

因为业务功能需要,很多 Web 站点都有文件上传的接口,比如:

  • 注册时上传头像图片(比如jpg,png,gif等)
  • 上传文件附件(doc,xls等)

而在后台开发时,并没有对上传的文件进行安全考虑,或者采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件(如:一句话木马)

从而通过对该恶意文件的访问来控制整个 Web 后台

测试流程

  • 对文件上传的地方按照要求上传文件,查看返回结果(路径,提示等)
  • 尝试上传不同类型的 “ 恶意 ” 文件,比如 xx.php 文件,分析结果
  • 查看 html 源码,看是否通过 js 在前端做了限制,可以绕过
  • 尝试使用不同方式进行绕过:黑白名单绕过 / MIME类型绕过 / 目录0x00截断绕过等
  • 猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试

客户端 check

我们先进行 客户端check 这个实验,这里只允许我们上传图片

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)我们选择一个 php 文件时,会直接提示文件不符合要求,内容如下

echo shell_exec($_GET['cmd']);?>

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

下面看一下这个限制是不是通过前端完成的

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

可以看到,当 input 标签的状态发生改变时,就会调用 checkFileExt(),下面是这个函数的源码

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

这个函数会判断文件的后缀是否在 jpg、png 和 gif 中,是这些后缀才运行上传。

但是前端做的限制只是辅助作用,是可以绕过的,比如直接删掉 onchange 中的内容

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

这时候就能上传了

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)然后利用上传的文件进行操作

http://192.168.171.133/pikachu/vul/unsafeupload/uploads/hack.php?cmd=ipconfig

 

服务端check

MIME

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。常见的 MIME 类型,比如:

  • 超文本标记语言:.html,.html text.html
  • 普通文件:.txt text/plain
  • RTF文件:.rtf application/rtf
  • GIF图形:.gif image/gif
  • JPEG图形:.jpeg,.jpg image/jpeg

$_FILES()函数

它从浏览器的HTTP头里获取 Content-Type ,这个 Content-Type 前端用户是可以控制的

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件

第一个参数是表单的 input name,第二个下标可以是 “name”,“type”,“size”,“tmp_name” 或 “error”,就像这样:

  • $_FILES['file']['name']:被上传文件的名称
  • $_FILES['file']['type']:被上传文件的类型
  • $_FILES['file']['size']:被上传文件的大小
  • $_FILES['file']['tmp_name']:存储在服务器的文件的临时副本的名称
  • $_FILES['file']['error']:由文件上传导致的错误代码

实验

当我们上传一个 php 文件时,会报错,下面通过 BurpSuite 修改请求头

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

修改成 image/png,或者别的图片类型都行

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

这时候文件就上传成功了 

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

 

getimagesize() 类型验证

getimagesize() 返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

它读取目标文件的 16 进制的头几个字符串,看符不符合图片要求,固定的图片文件前面几个字符串是一样的

但是图片头可以被伪造,因此还是可以被绕过

我们可以用 xxd 这个命令查看图片的第一行

xxd image.png | head -n 1

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)我们可以尝试上传一个包含恶意代码的图片,制作方法如下

  • 方法1:CMD命令直接伪造头部GIF89A:copy /b test.png + muma.php cccc.png
  • 方法2:使用GIMP(开源的图片修改软件),通过增加备注,写入执行命令
phpinfo(); ?>

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

然后上传这个 ccc.png 文件

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)但是我们访问这个图片,恶意代码是不会被执行的。我们可以结合本地文件包含漏洞进一步利用,猜测上传图片所在的位置

http://192.168.171.133/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2019/10/09/6470185d9d609075689635710502.png&submit=Submit+Query

Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

防范措施

  • 不要在前端使用 JS 实施上传限制策略
  • 通过服务端对上传文件进行限制:
    • 进行多条件组合检查:比如文件的大小,路径,扩展名,文件类型,文件完整性
    • 对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)
    • 对服务器端上传的目录进行权限控制(比如只读),限制执行权限带来的危害

 


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了优化算法改进的侏儒猫鼬优化算法(IDMO)及其Matlab源码分享。文章首先介绍了获取代码的两种方式,包括付费下载和付费订阅付费专栏。然后详细解释了侏儒猫鼬优化算法的原理和特点,以及其在集体觅食、侦察和保姆交换等方面的应用。最后提供了CSDN资源下载链接,供读者下载相关代码。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
author-avatar
mobiledu2502930381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有