首页 > 其他分享 >不安全的文件上传(Pikachu)

不安全的文件上传(Pikachu)

时间:2024-05-12 14:22:18浏览次数:20  
标签:文件 Pikachu jpg 后缀名 木马 php 上传

概述

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

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

Pikachu

client check(前端绕过)

查看此关卡的html源码可知, 这是在前端通过js脚本对上传文件的后缀名进行验证,通过设置黑、白名单限制用户上传的文件类型。

可以通过拦截修改数据包轻松绕过,也可以在浏览器禁用js绕过

改一句话php文件后缀名为jpg

image-20240507104650243

将后缀改为php,放包 上传成功

image-20240507104741012

image-20240507115933479

也可上传一句话木马用蚁剑连接

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

MIME type(服务端绕过)

简单来讲,它的作用就是服务器告诉浏览器你这个内容到底是个什么东东,是一张网页?还是一张图片?还是一个视频?浏览器只有知道了你这是个什么东西,才能正确处理它,mime就是这个东西,服务器通过Content-Type这个header来指定mime。

我们上传的文件被判定为content-type字段时,可以通过抓包,将content-type字段改为常见的图片类型,例如image/gif,从而绕过。也就是我们上传php文件时,可以改为jpg、png之类的,然后实现绕过。

MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。

  

常见的MME类型,例如:

  超文本标记语言文本 .html,html text/htm

  普通文本  .txt text/plain

  RTF文本. rtf application/rtf

  GIF图形 .gif image/gif

  JPEG图形 . jpg image/jpeg

我们创建一个php文件1.php,可以直接上传,抓包把content-type字段改为image/jpeg

或者直接把文件后缀名改为1.jpg,抓包修改文件名后缀为1.php(和第一题一样)

image-20240507105948519

image-20240507110013639

可上传一句话木马用蚁剑连接

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

getimagesize

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

语法格式:

array getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

getimagesize()函数会通过读取文件头部的几个字符串(即文件头), 来判断是否为正常图片的头部

可通过制作图片木马或在木马文件内容头部添加GIF89a(Gif图片文件头), 然后利用文件包含漏洞来解析图片木马

我们上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当做php文件解析,所以这就是文件包含漏洞通常配合文件上传使用。

现在我们将phpinfo.jpg的内容改成一段文字:hello world!

前两关的套路行不通了

image-20240507115514673

在图片木马的文件内容头部添加GIF89a

image-20240507225245500

上传———访问

image-20240507225320775

image-20240507225228943

利用文件包含漏洞解析该php代码

http://127.0.0.1/pikachu/vul/unsafeupload/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2024/05/07/542758663a3ffac631e682002913.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

image-20240507225635706

标签:文件,Pikachu,jpg,后缀名,木马,php,上传
From: https://www.cnblogs.com/Mchacha/p/18187777

相关文章

  • 目录遍历(Pikachu)
    原理Web安全-目录遍历漏洞_百度搜索文件遍历漏洞-CSDN博客防御1.对用户的输入进行验证,特别是路径替代字符如“../”和“~/”。2.尽可能采用白名单的形式,验证所有的输入。3.合理配置Web服务器的目录权限。4.当程序出错时,不要显示内部相关配置细节。5.对用户传过来的文件名......
  • 敏感信息泄露(Pikachu)
    原理由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。比如:通过访问url下的目录,可以直接列出目录下的文件列表;输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;前端的源码(html,css,js)里面包含了敏感信息,比......
  • 文件包含(Pikachu)
    原理文件包含漏洞是一种常见的web类型漏洞,因为很多脚本语言支持使用文件包含,也就是我们所说的文件包含函数,网站开发者经常会把一些代码插入到指定的地方,从而节省之间避免再次编写,这就是包含函数的基础解释,但是我们不光可以包含我们预先指定的文件,也可以包含我们服务器内部......
  • 越权漏洞(Pikachu)
    原理该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致......
  • PHP反序列化(Pikachu)
    原理php程序为了保存和转储对象,提供了序列化的方法。php序列化是为了在程序运行的过程中对对象进行转储而产生的。序列化可以将对象转换成字符串,但仅保留对象里的成员变量,不保留函数方法。php序列化的函数为serialize,可以将对象中的成员变量转换成字符串。反序列化的函数为unse......
  • XXE漏洞(Pikachu)
    原理要补好多知识~XXE漏洞全称XMLExternalEntityInjection即XML外部实体注入。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。XXE漏洞触发的点往......
  • 使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数
    使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数,用于获取指定文件夹中所有文件的总大小,并根据配置决定是否返回已转换单位的大小值或直接通过回调函数返回字节大小。下面是一个基于Node.js环境的实现示例,因为直接在浏览器环境中操作文件系统......
  • RCE(Pikachu)
    作用可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。原理远程系统命令执行一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个......
  • R使用矢量文件裁剪栅格数据
    #########################################################使用矢量文件裁剪栅格数据raster_data#待裁剪的栅格数据shapefile_data#读入的shapefile文件#检查栅格数据和shapefile数据的投影是否一致projection(raster_data)projection(shapefile_data)#如果投影不一致,则......
  • 文件pro
    importrequestsimportjsonimportrefrombs4importBeautifulSoupfromqiniuimportAuth,put_dataclassBilibiliVideoAudio:def__init__(self,bid):self.bid=bidself.headers={"referer":"https://www.bilibili.......