网络安全之文件上传弊端

宁睿  论坛元老 | 2025-3-15 13:08:27 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1056|帖子 1056|积分 3178

一,文件上传弊端的原因:

文件上传弊端的存在主要是因为开发者未对用户上传的文件举行充实的安全验证,导致攻击者可以上传恶意文件(如 WebShell、恶意脚本等)到服务器,进而控制服务器或实施进一步攻击。
常见的成因有: 未验证文件范例和扩展名,未检测文件内容,未限制文件路径和权限,依靠黑名单而非白名单,服务器解析弊端
常见的场景有:用户头像上传答应用户上传头像,但未校验文件范例。),文档或图片分享平台答应上传 PDF、图片等文件,但未检测文件内容。),CMS 或插件弊端内容管理系统(如 WordPress、Joomla)的插件存在上传逻辑缺陷。),API 文件上传接口后端 API 接收文件时,未对来源和内容举行校验。),压缩包解压弊端答应上传 ZIP 压缩包并自动解压,未检查压缩包内文件。
---------------------------------------------------------------------------------------------------------------------------------
二,案例分析

第一篇:upload-labs靶场(1-21关)

pass01(只使用javascrip过滤)

分析:只使用了JavaScript过滤,直接关掉欣赏器的Javascrip功能,或者burp抓包修改文件后缀即可

操作如下:
第一种:禁用JavaScript

可以看到直接上传乐成

第二种方法,使用工具(如burp),修改文件后缀,Javascrip只检测了前端的后缀,可以修改发送到服务器的包


pass02(服务端对content-type的限制)

分析:只对content-type举行白名单的限制,险些没有用,照样发送php文件,用burp抓包,修改content-type举行send即可

方法:上传php文件,并用burp修改content-type内容

pass03(黑名单过滤不全)

某些特定的后缀仍会被php解析:如php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml。

用phtml后缀名试一下
   

pass04(apache早期版本,.htaccess服务设置文件未过滤)


上传.htaccess文件,内容如下,可以将demo.png解析成php,将demo.phg改后缀上传即可
  1. <FilesMatch "demo.png">
  2. SetHandler application/x-httpd-php
  3. </FilesMatch>
复制代码
pass05(黑名单过滤少了ini)


user.ini和.htaccess一样是目次的设置文件,.user.ini就是用户自定义的php.ini(全局设置文件)
  1. .user.ini 配置项中有两个配置可以起到一些作用
  2. 方法一:
  3. auto_prepend_file = <filename>         //包含在文件头
  4. 方法二:
  5. auto_append_file = <filename>          //包含在文件尾
复制代码

pass06(无巨细写过滤)


windows中对巨细写不敏感

pass07(Windows文件后缀未去空)

可以看到和上之前的代码相比,过滤函数少了一个trim()函数去空操作

做法:只需要用burp抓包,改文件后缀添加一个空格即可

pass08(windows文件后缀未去点)

如果上传的是tp.php.     strrchr($file_name,".")的返回结果并不是 . 而是.php.
跟之前的代码相比,少了去除文件后缀末尾的.操作,在windows中仍然会辨认

做法,使用burp抓包,改掉文件后缀添加.

pass09(windows中文件后缀未去::data)

跟之前的代码相比,少了去:DATA操作

做法,正常上传文件,用burp抓包,改掉文件后缀添加:DATA

pass10(后缀过滤思量不周,仍可以通过一些方式绕过过滤)

看似都过滤了很安全,实则不然,

抓包上传后缀名为.php. .的文件

pass11(双写绕过,或巨细写绕过)


直接burp抓包改后缀

pass12(使用$GET("save_path")来自定义生存路径,可以使用%00截断)

在c语言中%00代表阶段,如果我们正常上传正确的文件范例,然后修改save_path的路径如:目次/web.php%00, 在文件上传路径拼接的时候,后面的路径就被截断了,而他在前面已经举行了白名单过滤
%00截断常在url中get哀求使用,在url中%00表现ascll码中的0 ,而ascii中0作为特殊字符保留,表现字符串结束,以是当url中出现%00时就会以为读取已结束。以是一样平常文件上传绕过%00会在路径上使用
使用条件:
php版本<5.3.29
php.ini设置文件中magic_quotes_gpc = Off

直接上burp抓包,修改save_path路径

pass13($POST(生存路径),使用16进制00截断)

转16进制,将路径后面修改成00截断

这里可以看到生存路径后的php后缀多了一个\0截断

pass14(文件包罗,检测图片前面的内容)

这关是文件包罗弊端的关卡,文件包罗弊端是指未正确使用include()函数,在举行文件包罗的同时,仍然会用php解释器实行图片的二进制内容,这时候可以将php恶意代码嵌入到图片中

这里可以看到,本关卡对上传的图片举行了前面的内容检测,可以将php代码嵌入到图片尾部

存在文件包罗弊端,直接打开这个网址,给除上传的图片码的file地址变量。
第一步,制作图片码:

第二步,上传文件,并复制文件地址

第三步,点击文件包罗弊端,给出参数?file="复制的文件地址路径",结果如下,在include()时实行了图片码中的php代码

pass15(由于 getimagesize() 只读取文件头信息,恶意代码可能被忽略)

getimagesize()仍然只检测文件头信息,上传pass14的图片码仍然可以乐成

做法与pass14同等,结果如下

pass16(exif_imagetype()仍然是通过文件头来检测文件范例)

检察源代码需要php开启exif扩展才见效

开启扩展事后步骤与前面两关同等,制作图片码,上传,用文件包罗弊端举行上传的文件包罗,实行图片码中的php代码。

pass17(举行了图片的二次渲染)

这里可以看到,使用了imagecreatefromjpeg()函数,对上传的图片举行打乱,生成新的图片,可以正常上传图片,用010editor工具检察上传前后不变的区域,在那边插入php代码

先正常上传一个文件,然后将上传后二次渲染的文件下载下来,用010editor软件打开,在工具选项---比较文件功能,比较两个文件的16进制,找出前后不变的片段,插入php代码


生存图片,将新构成的图片码上传,后续步骤与上面的关卡同等,举行文件包罗,给file参数值

pass18(先上传了文件,再判断是否在白名单内里,存在竞争)
从代码来看,这个页面是先将文件上传了事后,再判断文件的后缀是否在白名单内里,我可以不停的发包上传php(该php代码可以是在上级创建一个的恶意文件代码的php文件)文件,再不停访问文件包罗弊端的界面举行该图片的文件包罗,总有一刻是我上传了文件,举行了文件包罗,才判断我的文件是否在白名单中,这样已经为时已晚了

修改php代码,这个代码是在上级目次创建一个名未shell.php文件,内容是<?php phpinfo(); ?>

直接上传,用burp抓包,再用intruder模块自动化攻击,持续发上传文件的包


在访问文件包罗弊端的界面,持续革新


---------------------------------------------------------------------------------------------------------------------------------



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表