freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Pikachu靶场通关之Unsafe Fileupload
2021-01-22 18:42:26

1611311933_600aab3d624ac3ec10919.gif!small

一、本文介绍

今天,我们来学习一项web安全里最常见的漏洞,Unsafe Fileupload。本篇文章将会带领大家进入到Unsafe Fileupload这项漏洞的世界里,让大家领略到Unsafe Fileupload这项漏洞的魅力,从而对Unsafe Fileupload漏洞有更深刻的认识。

学习一项新的漏洞,简单来说,我们要从四个方面来入手,第一个方面是产生这项漏洞的原因,不管是从代码层面,还是从逻辑层面等方面,来对这项漏洞有一个清楚的认识,有位大佬说得好,只有对漏洞原理了如指掌,才会有更多的突破点来挖掘漏洞;第二个方面是这项漏洞应该如何利用,是直接使用漏洞利用的各种工具,还是自己的写或者是借鉴其他大佬的漏洞利用的脚本等,漏洞利用的方式不一而同,具体问题具体分析;第三个方面是这项漏洞对网站等能够造成什么样危害,能够达到什么样的效果,是获取网站的权限,还是获取管理员或者用户的账号密码或者是敏感信息等;第四个方面当然是,我们应该如何去防范这项漏洞,以及这项漏洞的修复方式,分别从代码层面、逻辑层面等方面如何去修复。

本篇文章将分别从Unsafe Fileupload漏洞的原理、Unsafe Fileupload漏洞如何利用、Unsafe Fileupload漏洞的危害以及Unsafe Fileupload漏洞如何防范与修复这四个方面,来和大家一起学习Unsafe Fileupload这项漏洞,下面我们进入正题。

二、Unsafe Fileupload的原理

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

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

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:

--验证文件类型、后缀名、大小;

--验证文件的上传方式;

--对文件进行一定复杂的重命名;

--不要暴露文件上传后的路径;

--等等...

三、Unsafe Fileupload的利用

1.client check

查看源码

function checkFileExt(filename)

{

var flag = false; //状态

var arr = ["jpg","png","gif"];

//取出上传文件的扩展名

var index = filename.lastIndexOf(".");

var ext = filename.substr(index+1);

//比较

for(var i=0;i<arr.length;i++)

{

if(ext == arr[i])

{

flag = true; //一旦找到合适的,立即退出循环

break;

}

}

//条件判断

if(!flag)

{

alert("上传的文件不符合要求,请重新选择!");

location.reload(true);

}

}

分析,前端限制,可以通过禁用javascript绕过

上传php文件,显示不允许

1611311703_600aaa5769538723c7a29.png!small?1611311703440

使用火狐浏览器,直接禁用javascript,到这个界面,点击取消

1611311709_600aaa5de28184abc8173.png!small?1611311710200

使用谷歌浏览器,同样禁用javascript,

1611311715_600aaa638bd2379bfd15a.png!small?1611311715635

点击上传,找到路径并访问

1611311722_600aaa6a2da5c41488827.png!small?1611311722190

http://x.x.x.x/vul/unsafeupload/uploads/phpinfo.php

1611311727_600aaa6fbaab67623ca5b.png!small?1611311727975

2.MIME type

选择非图片的文件时,  不会拦截;  点击上传时,  服务器端检测到非图片格式, 就被拦截

1611311735_600aaa7716d9f5a25d8a5.png!small?1611311735086

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

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

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

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

普通文件:.txt text/plain

RTF文件:.rtf application/rtf

GIF图形:.gif image/gif

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

查看源码, 定义了一个数组并且调用了uploadfile函数

1611311745_600aaa811c4314a2e1b67.png!small?1611311745082

上传1.jpg ,抓包查看type类型

1611311750_600aaa869b77a071149a2.png!small?1611311750586

上传1.php ,抓包查看type类型

1611311757_600aaa8d516cd8f432fe8.png!small?1611311757281

修改phpinfo.php的type类型为image/jpeg

1611311765_600aaa95792e0878f2583.png!small?1611311765582

上传成功

1611311771_600aaa9b9187b5ea4e6fc.png!small?1611311771626

成功访问phpinfo文件

1611311777_600aaaa1720619907e735.png!small?1611311777532

3.getimagesize

getimagesize函数更是限制了上传文件的文件头必须为图像类型

修改文件的type类型不可用

第一种方法,可以通过添加jpg图片的格式头到脚本文件里进行绕过

首先在文本文档里写入<?php phpinfo();?>文件后缀修改为.jpg

1611311804_600aaabcbd2c2573c2c31.png!small?1611311804821

上传文件,抓包,在脚本文件前加上GIF89,放包

1611311811_600aaac314db14effb19f.png!small?1611311811083

成功上传

1611311816_600aaac861330dfc90b8f.png!small?1611311816403

第二种方法,在图片文件内容后添加<?php phpinfo();?>

命令行输入copy 1.png/b + phpinfo.php/a 2.png

1611311822_600aaace4d54bfd89b8fd.png!small?1611311822294

点击上传

1611311829_600aaad50c55b4049e7c6.png!small?1611311829087

文件上传成功

1611311835_600aaadb83d54142be851.png!small?1611311835516

服务器会将木马文件解析成图片文件,因此向其发送执行该文件的请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。

可以利用之前的文件包含漏洞,将图片格式的文件当做php文件来解析执行:

http://x.x.x.x/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/10/20/5936185f8e5245666f2586884965.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

1611311843_600aaae3da1a2ab4cf5a4.png!small?1611311844943

http://x.x.x.x/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/10/20/6950415f8e7cda64b46247514668.jpg&submit=æäº¤æ¥è¯¢

1611311851_600aaaeb4400576bb8816.png!small?1611311851298

四、Unsafe Fileupload的危害

上传漏洞与SQL注入或 XSS相比,其风险更大,如果 Web应用程序存在上传漏洞,攻击者上传的文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。如果上传的文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为。

如果上传的文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。如果上传的文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。甚至攻击者可以直接上传一个webshell到服务器上 完全控制系统或致使系统瘫痪。

五、Unsafe Fileupload的修复

  1. 检查文件上传路径 ( 避免0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )
  2. 文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 )
  3. 文件MIME验证 ( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 )  文件内容检测 ( 避免图片中插入 webshell)
  4. 图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )
  5. 文件重命名( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )

六、本文总结

到此为止,通过本篇文章,我们大家分别从Unsafe Fileupload漏洞的原理、Unsafe Fileupload漏洞如何利用、Unsafe Fileupload漏洞的危害以及Unsafe Fileupload漏洞如何防范与修复这四个方面,一起学习了Unsafe Fileupload这项漏洞,相信大家已经对Unsafe Fileupload这项漏洞有了明确而深刻的认识。

本人之后还会陆续分享我在网络安全与渗透测试学习之路上的各种笔记,包括且不限于各种漏洞原理、漏洞挖掘、漏洞复现以及靶场CTF通关教程等等,希望大家多多点赞关注支持。

免责声明:本站提供的安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

转载声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

欢迎关注公众号:国服最强渗透掌控者

1611311864_600aaaf8de5fd7c181491.png!small?1611311864942

一名普通的白帽子,努力追求着成为国服最强渗透掌控者的梦想,希望我的分享能够给大家带来帮助,并且能够为网络安全事业做出自己的贡献。此生无悔入网安,争做渗透第一人。

1611311900_600aab1c3001d5b4746fc.jpg!small?1611311900235

# 渗透测试 # web安全 # 网络安全技术 # 靶场
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录