zoukankan      html  css  js  c++  java
  • Pikachu-Unsafe Filedownload和Flieupload(不安全文件下载和上传)

    不安全的文件下载漏洞概述:          

    很多网站都会提供下载功能,即用可以通过点击下载链接,下载到链接对应的文件。

    但是,如果文件下载功能设计不当,则可能导致攻击者可以构造文件路径,从而获取到后台服务器上的其他敏感文件。(又称:任意文件下载)

    开始我们的  Unsafe Filedownload(不安全的文件下载)漏洞实验    

    随便点击个名字下载,

    我们发现其实就是相当于把一个文件名传到后端,后台去找这个文件,然后响应输出到前端。

    是否可以更改filename的值来获取到后台其他的文件,我们可以试一下。我们发现可以

    测试文件下载漏洞时,我们可以修改参数用目录遍历的方式,下载其他文件

    192.168.43.116/pikachu/vul/unsafedownload/execdownload.php?filename=../down_nba.php

    防范措施:                  

    1、对传入的文件名进行严格的过滤和限定;

    2、对文件下载的目录进行严格的限定。

    不安全的文件上传漏洞概述:          

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

    1、注册时上传头像图片(比如jpg,png,gif等。)

    2、上传文件附件(doc,xls等)

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

    所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
    --验证文件类型、后缀名、大小;
    --验证文件的上传方式;
    --对文件进行一定复杂的重命名;
    --不要暴露文件上传后的路径;
    --等等...

    ●测试流程:

    1. 对文件上传的地方按照要求上传文件,查看返回结果(路径,提示等)

    2 尝试上传不同类型的 “ 恶意 ” 文件,比如 xx.php 文件,分析结果

    3. 查看 html 源码,看是否通过 js 在前端做了限制,可以绕过

    4. 尝试使用不同方式进行绕过:黑白名单绕过 / MIME类型绕过 / 目录0x00截断绕过等

    5. 猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试

    开始我们的  Unsafe Fileupload-client check 不安全的文件上传-客户端验证 

    我们发现这里只允许我们上传图片。

    打开浏览器的开发者模式,查看(当onchange一改变的时候就会去调用红框中的函数)

    再来看看网页的源码,ctrl+f去搜索看看有没有  checkFileExt

    那网页上面那个checkFileExt不是和我们之前的xss限制20个字符一样么!

    我们直接浏览器的用开发组工具把checkFileExt删掉,再去上传一句话木马的.php文件

    我这里的用的一句话木马:<?php system($_GET[hy]);?>

    上传成功(它把上传的路径也返回出来啦,在实际测试中,如果要没给就需要自己的方式去判断出这个文件的位置,因为我们最终要去访问它

     

    构造url,访问我们的一句话木马文件,获取主机IP地址。也可以使用中国菜刀进行连接访问

    http://192.168.43.116/pikachu/vul/unsafeupload/uploads/1.php/?hy=ipconfig

     

    MIME type  服务端验证          

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

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

    1. 超文本标记语言:.html,.html   text.html

    2. 普通文件:.txt   text/plain

    3. RTF文件:.rtf   application/rtf

    4. GIF图形:.gif   image/gif

    5. JPEG图形:.jpeg,.jpg   image/jpeg

    $_FILES()函数

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

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

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

    1. $_FILES['file']['name']:被上传文件的名称

    2. $_FILES['file']['type']:被上传文件的类型

    3. $_FILES['file']['size']:被上传文件的大小

    4. $_FILES['file']['tmp_name']:存储在服务器的文件的临时副本的名称

    5. $_FILES['file']['error']:由文件上传导致的错误代码

    开始我们的实验

    这里我们上传一个我们的一句话木马.php文件时候,会报错。(我们改下名字)

    再次上传下,抓包,修改头文件,改成image/png,Forward

    成功

     

    getimagesize               

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

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

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

    我们可以制作一张木马图片,首先我们准备一张图片和一个php文件,在文件里写入:<?php phpinfo();?>

    在命令窗口执行:copy /b 1.png+1.php hy.png

    注:::!!!要记得在Pikachu靶机getimagesize.php文件中插入时区函数date_default_timezone_set("PRC");  否则上传不会返回路径

    上传hy.png   成功上传  我们获取到一个路径

    uploads/2020/04/04/4619515e885db738eb5669308306.png

    但是我们访问这个图片,恶意代码是不会被执行的。我们可以结合本地文件包含漏洞进一步利用,来一手文件包含和文件上传组合拳,猜测上传图片所在的位置:

    http://192.168.43.116/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/04/04/4619515e885db738eb5669308306.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

    这样就可以拿到敏感信息。(看不懂的部分为  图片在前端以十六进制的显示,,下面为敏感信息)

    文件上传漏洞的防范措施              

    1. 不要在前端使用js实施上传策略。

    2. 通过服务端对上传文件进行限制:

      A)进行多条件组合检查:比如文件的大小,路径,扩展名,文件类型,文件完整性。

      B)对上传的文件在服务器上存储时进行重命名(制定合理的命令规则)。

      C)对服务器端上传文件的目录进行权限控制(比如只读),限制执行权限带来的危害。

  • 相关阅读:
    【随手记】常用16进制代表的容量或位置
    精通css——position属性
    Ubuntu安装GitLab
    Linux内核
    分布式(一)——分布式系统的特性
    【树莓派】入门
    Intel CPU发展历史
    C++读mnist数据
    实验代码一:用来链表实现单向图
    Hadoop配置+centos6.5
  • 原文地址:https://www.cnblogs.com/escwq/p/12633121.html
Copyright © 2011-2022 走看看