Pikachu靶场——文件上传漏洞

阅读: 评论:0

Pikachu靶场——文件上传漏洞

Pikachu靶场——文件上传漏洞

一、文件上传漏洞简述

什么是文件上传漏洞?

 ​ 凡是存在文件上传的地方均有可能存在文件上传漏洞,关于上传文件操作的时候对方代码写的是否完整、是否安全,一旦疏忽了某个地方可能会造成文件上传漏洞。

文件上传的原理

  网站Web应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,此时攻击者就可以上传一个webshell到一个Web可访问的目录上,并将恶意文件传递给如PHP解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。还有一部分是攻击者通过Web服务器的解析漏洞来突破Web应用程序的防护。

文件上传漏洞有哪些危害

 文件可以自定义,可以成为Webshell,通过文件上传来上传后门,直接获取网站权限,属于高危漏洞。上传漏洞与SQL注入或者XSS相比,其风险更大。可以获取数据库信息,可以对服务器提权,获取内网权限。

文件上传漏洞如何查找及判断

 查找文件上传功能、 通过图片上传、​ 通过代码分析到上传漏洞等。

文件上传漏洞绕过的方式有哪些

  • 前端限制绕过
  • 文件扩展名绕过
  • ashx上传绕过
  • 特殊文件名绕过
  • 00截断绕过上传
  • htaccess解析漏洞
  • 突破MIME限制上传
  • 解析漏洞绕过

文件上传如何防御

  • 将上传文件与web服务隔离
  • 使用白名单过滤、限制上传文件类型
  • 文件上传路径设置为不可执行权限
  • 检查文件上传路径
  • 自带函数检测,自定义函数检测
  • 图片渲染 对上传文件重命名
  • 对文件内容压缩,重新生成文件内容 检查文件内容

二、皮卡丘靶场文件上传漏洞测试

 第一关 client check

进入第一关有一个文件上传的按钮,先看一下直接上传php文件是个什么效果

如下图所示,刚选好文件,还没有点 “开始上传” 的时候,就弹出了提示 上传的文件不符合要求

绕过方法客户端验证一般两种绕过方法:(1)浏览器禁用javascript(2)burpsuite抓包改后缀

我们打开开发者选项,查看器查看源码:

我们在这里查看浏览按钮,可以看出这里有一个对应的判断,当input标签去onchange,发生改变的时候,他就回去调用checkFileExt,我们可以把checkFileExt函数删掉,这和我们之前XSS漏洞的时候修改限制字数一样。删掉以后我们再上传,就不会有那样的限制了。

 

方法二、burpsuite抓包改后缀

把a1.php文件名改a1.png,上传过程中burpsuite抓包

 

抓到上图所示的报文,右键 send to repeater

把文件名改成a1.php,点send,上传成功

第二关 MIME type

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

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

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

进入第二关,发现和上一关一样,也是一个上传界面

 点击上传a.php查看一下现象,发现没有弹窗,点“开始上传”之后会提示“上传的图片只能是jpg,jpeg,png格式的!”

上传一个正常的图片,去抓一下它的content-type,然后我们再去上传一下我们的一句话木马

我们先看我们上传成功的图片,他这里的Content-Type是image/png

 我们再来看一下我们上传失败的php文件,他这里的Content-Type是被认为了application/octet-stream

我们可以把这个数据包发送到Repeter里面去,然后我们复制一下上面上传成功的Content-Type,我们可以在Repeter里面把这个Content-Type替换掉

 我们点击发送,查看返回结果

 我们可以看到文件上传成功,那这样就说明我们通过对HTTP头的修改,绕过了后端的MIME的限制。这个PHP文件上传成功后,就和前面的一样,我们可以通过访问这个PHP文件,传参,通过一句话木马来控制服务器。

 第三关 getimagesize

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

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

利用步骤

在图片木马的文件内容头部添加GIF89a, 保存为shell.jpg文件, 随后将此文件上传后会返回文件的相对地址uploads/2022/11/29/5326166385b74ff01e3044955456.jpg

由此可知木马图片的url地址为127.0.0.1/pikachu/vul/unsafeupload/uploads/2022/11/29/5326166385b74ff01e3044955456.jpg

利用文件包含漏洞解析此图片木马: 127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/11/29/5326166385b74ff01e3044955456.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2, 后续可用蚁剑进行连接


 

本文发布于:2024-02-05 06:03:19,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170725811663669.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:靶场   漏洞   文件上传   Pikachu
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23