0
点赞
收藏
分享

微信扫一扫

文件上传漏洞利用与防御

小美人鱼失去的腿 2022-03-17 阅读 93

文件上传漏洞

1 漏洞原理

1.1 MIME

1.1.1 MIME介绍

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

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

MIME描述
text/htmlHTML格式
application/jsonJSON数据格式
multipart/form-data文件上传(二进制数据)
image/jpegjpg图片格式

1.1.2 MIME用法

  • 客户端使用:

    1.GET请求不需要这个字段。

    2.POST请求头,放在Content Type字段用来指定上传的文件类型,方便服务器解析。放在Accept,告诉服务端允许接收的响应类型。比如只能接收json。

  • 服务端使用:

    放在响应头,Content Type告诉客户端响应的数据类型,方便客户端解析。

1.2 等价扩展名

语言等价扩展名
aspasa,cer,cdx
aspxashx,asmx,ascx
phpphp2,php3,php4,php5,phps,phtml
jspjspx,jspf

1.3 .htaccess

Hypertext Access(超文本入口)

<!-- 将"a.jpg"解析成php -->
<FileMatch "a.jpg">
    SetHandler application/x-httpd-php
</FilesMatch>

2 靶场搭建

2.1 webshell

Github项目

Gitee项目

2.2 upload-labs

2.2.1 下载

Github项目

Gitee项目

2.2.2 部署

  1. 安装apache

    下载→此时最新版本为Apache 2.4.53→解压至自定义路径→修改/conf目录下的httpd.conf,将Define SRVRoot修改为Apache24的路径

  2. 安装PHP

    下载选则线程安全的→此时最新版本为PHP8.1.4,推荐PHP7.4→解压至指定路径→配置PHP,将根目录中php.ini-development复制并改名为php.ini→修改php.iniextension_dir="exit"改为ext的实际路径

  3. Apache中添加PHP扩展

    #php support
    LoadModule php7_module php-7.4.22路径\php7apache2_4.dll
    PHPiniDir php-7.4.22路径
    

    模块中需要的功能,取消前面的分号注释。

  4. Apache中添加PHP类型支持

    在#AppType后面添加一行:

    AddType application/x-httpd-php .php .html .htm
    
  5. 修改apache端口

    修改Listen后面的端口号,避免冲突

3 漏洞发现与利用

3.1 找到上传位置

Redis KV 持久化+未授权访问

MySQL读写

开源添加小马

3.2 尝试绕过校验

删除或禁用javascript 修改MIME

等价扩展名 大小写转换

.htaccess 双写、空格、点

::$DATA %00截断,0x00阶段

图片马 条件竞争

3.3 php程序执行函数

  • eval() 函数把字符串按照 PHP 代码来运行。<?php @eval($_POST['xxx']);?>

  • system — 执行外部程序,并且显示输出

  • escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数

  • escapeshellcmd — shell 元字符转义

  • exec — 执行一个外部程序

  • passthru — 执行外部程序并且显示原始输出

  • proc_close — 关闭由 proc_open 打开的进程并且返回进程退出码

  • proc_get_status — 获取由 proc_open 函数打开的进程的信息

  • proc_nice — 修改当前进程的优先级

  • proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。

  • proc_terminate — 杀除由 proc_open 打开的进程

  • shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

3.4 获得文件位置fuxploider

GitHub

Gitee

3.4 连接

  • AntSword-Loader 蚁剑加载器

  • antSword 蚁剑主程序

  • Behinder 冰蝎

  • godzilla 哥斯拉

  • weevely

    #Kali中的weevely是一个命令行形式的文件上传漏洞利用工具
    #1.生成🐎
    weevely generate xxx xxx.php
    #2.上传
    #3.连接
    weevely IPAddress xxx
    

4 防御

  • 扩展名(后缀)黑白名单
  • MIME类型校验(image/gif)
  • 文件内容头校验
  • 对文件内容进行二次渲染
  • 对上传的文件重命名,不易被猜测
  • 不要暴露上传文件的位置
  • 禁用上传文件的执行权限
举报

相关推荐

0 条评论