zoukankan      html  css  js  c++  java
  • pikachu-Unsafe file downloads/ uploads(不安全文件下载/上传)

    不安全文件下载

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

    打开pikachu平台

     随意点击一个球星

     观察后台代码(路径如下)可以看到没有做安全处理

     所以我们可以构造一个url下载文件,下载下图中的文件

    http://192.168.10.246/pikachu-master/vul/unsafedownload/execdownload.php?filename=../../../test/yijuhua.txt

     下载到桌面上,就可以看了。

    不安全文件上传

    文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
    所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
    --验证文件类型、后缀名、大小;
    --验证文件的上传方式;
    --对文件进行一定复杂的重命名;
    --不要暴露文件上传后的路径。

    文件上传漏洞测试流程

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

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

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

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

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

    客户端check

    我们可以试着上传一个php文件

     查看源码(路径如图)发现使用了一个checkFileExt(),实际上就是判断上传的文件是否是图片的格式,如果不是就会弹出相应的框

     我们可以在控制台(Fn+F12)上直接取消使用这个方法,将onchange里面的内容删掉

     这是我们再选择一个一句话木马文件上传,就不会说文件格式不符合要求了,文件内容如下

     我们可以访问下这个路径

    http://192.168.10.246/pikachu-master/vul/unsafeupload/uploads/4.php/?x=ipconfig

    服务端check(MIME type)

    一、MIME介绍

    二、$_FILES()函数

     三、MIME类型验证

    在pikachu平台MIME type模块进行实验演示操作。
    1.上传符合要求的图片格式文件显示上传成功。
    2.上传php文件显示上传失败只能上传图片格式文件。查看源码分析漏洞。

    查看源码(路径如下)

     上传图片也就是正确格式的数据包

     上传一句话木马的数据包

    发送到Repeater 然后在content type改包成功上传(虽然有乱码,但是可以看到文件上传成功的路径)

    我们可以访问下这个路径

    http://192.168.10.246/pikachu-master/vul/unsafeupload/uploads/4.php/?x=ipconfig

     getimagesize类型

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

     后台会根据上传的图片的16进制格式的前几位进行对比,前几位是固定的 符合才是真的图片,png:8950 4e47 

     我们可以做一个含有一句话木马的图片来进行上传

    我们准备一张正常的图片和一个含有恶意代码的php文件

     在cmd下输入一段命令

    copy /b 1.png+1.php yi.png

     

     制作好之后就可以成功的上传返回路径

     上传之后我们可以看到已经有了,但是直接访问并不会执行,这时就用到之前的本地文件包含漏洞

     http://192.168.10.246/pikachu-master/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/03/31/5349015e830f4b00004846209034.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

     成功拿到信息

    防范措施

  • 相关阅读:
    Spring使用JDBC配置具名参数
    linux中的匿名管道和命名管道
    linux查看CPU信息
    磁盘阵列RAID原理、种类及性能优缺点对比
    SMP和MPP的优缺点
    Hadoop datablock size
    MySQL 高可用架构之MHA
    MySQL 高可用架构之MMM
    五大常见的MySQL高可用方案
    hive加载数据
  • 原文地址:https://www.cnblogs.com/heiwa-0924/p/12606859.html
Copyright © 2011-2022 走看看