Web攻防07_文件上传基础_文件上传靶场upload-labs-docker

文章目录

  • 项目安装
      • 安装docker
      • 进入项目目录:
      • 一键部署运行
  • 靶场关卡
    • 1、前端JS验证
      • 如何判断是否为前端验证
      • 解法1:抓包
      • 解法2:禁用JS
    • 2、.htaccess
      • 解法
    • 3、MIME类型
      • 解法
    • 4、文件头判断
    • 5、黑名单过滤-过滤不严-单次过滤为空格
    • 6、黑名单-过滤不严-系统大小写敏感属性
    • 7、低版本GET-%00截断,GET中插入截断
      • 00截断漏洞:
      • 适用条件:
      • 解法
    • 8、低版本POST-%00截断,POST中插入截断
    • 9、黑名单-过滤不严
    • 10、逻辑不严-条件竞争
      • 原理
      • 漏洞利用:
    • 11、二次渲染
      • 二次渲染
      • 绕过原理:
    • 12、函数缺陷
      • 原理
      • 利用条件
      • 漏洞利用
    • 13、代码审计-数组绕过

请添加图片描述

文件上传靶场upload-labs-docker,共有13关,涵盖不同类型的上传漏洞,适合新手使用,可以使用docker直接部署

项目&参考地址:

https://github.com/sqlsec/upload-labs-docker

https://www.sqlsec.com/2020/10/upload.html

项目安装

安装docker

apt-get install docker # 安装docker
apt-get install docker-compose # 安装docker-compose

手动下载项目压缩包并放入服务器(git clone可能会比较慢)

进入项目目录:

cd upload-labs-docker

一键部署运行

docker-compose up -d

完成即可访问,端口30001~30013分别对应13个关卡(若要修改端口,在docker-compose.yml文件中修改即可)

靶场关卡

1、前端JS验证

在文件上传时,网站程序是通过前端js代码去验证文件类型以控制上传的。

如何判断是否为前端验证

  1. 看源码
  2. 抓包监听,在文件上传时,如果还未抓到包,就已经提示文件类型不正确,则大概率为前端校验了。

请添加图片描述

解法1:抓包

将上传脚本文件改命为png再上传,后抓包修改文件名回脚本后缀(php)即可

请添加图片描述

解法2:禁用JS

因为是使用前端JS进行验证,所以可以禁用JS,直接进行上传。

2、.htaccess

htaccess文件是Apache服务中的一个配置文件,它负责相关目录下的网页配置。

AddType application/x-httpd-php .png

借助配置文件htaccess,让服务器将.png类型的文件当作类型application/x-httpd-php来解析执行(即php类型)

.htaccess是修改解析配置的文件

中间件中,将配置文件重新写入,重新修改了解析规则,实现将图片解析为后门的结果。

请添加图片描述

解法

1、抓包,将文件名改为.htaccess,文件内容改为AddType application/x-httpd-php .png,上传

请添加图片描述

2、将脚本名改为.png格式,上传,即可连接脚本。

3、MIME类型

请添加图片描述

通过MIME类型来校验文件类型。即发送数据包中的Content-Type参数来检验。

所以可以通过抓包修改参数绕过。

解法

1、上传脚本时抓包修改Content-Type为合法类型,如: image/png

2、将脚本名改为合法类型(.png),上传时修改文件名。

请添加图片描述

4、文件头判断

请添加图片描述

文件头开头的几个字节可表示文件类型,文件头校验即校验文件头内容,要绕过只需在文件头添加可通过类型字节并修改UA头中类型即可。

请添加图片描述

5、黑名单过滤-过滤不严-单次过滤为空格

请添加图片描述

如上代码第二行,仅将第一行定义的后缀过滤了一次,且是替换为空格,并没有递归过滤,这种过滤规则是不安全的

所以,只要将文件后缀改为pphphp,即可在第一次过滤掉php,剩下的后缀仍为php

6、黑名单-过滤不严-系统大小写敏感属性

请添加图片描述

有些函数是大小写不敏感的,所以换大小写就可绕过,该种情况CTF题型考的多

该题中,str_replace() 函数替换字符串中的一些字符(区分大小写)。

所以将后缀改大小写即可绕过,若是windows系统,大小写不敏感,即可识别运行。

如果是windows操作系统,大小写不敏感,大写的文件后缀也识别运行。

Linux系统会区分大小写,要么全大写,要么全小写,大小写交替不识别。

请添加图片描述

7、低版本GET-%00截断,GET中插入截断

请添加图片描述

00截断漏洞:

https://blog.csdn.net/weixin_44840696/article/details/90581104

适用条件:

  • magic_quotes_gpc=off
  • PHP版本小于5.3.4

在利用前会发包利用回显的版本判断是否可用。

现在基本都是php7版本以上,所以基本没有该漏洞了。

解法

修改路径为/?road=/var/www/html/upload/1.php%00,名称为1.php%001.png,会将文件保存地址拼接,而%00会被URL编码为空字符,造成截断。

截断后,会生成1.php文件,上传成功。

请添加图片描述

8、低版本POST-%00截断,POST中插入截断

POST中内容不会自动解码,所以需要手工解码一次,即需要将%00手动解码为空字符,或在HEX中修改字符为00

如下,修改POST参数中上传路径,并手工解码即可上传成功。

请添加图片描述

9、黑名单-过滤不严

请添加图片描述

过滤不严,有的可执行后缀未过滤。

fuzz字典:fuzzdb-master\attack\file-upload

brpsuite抓包,使用intruder模块,将后缀设为变量,引入字典进行批量测试。

对比返回结果的长度可得结果。

请添加图片描述

由以上结果可知如php3等后缀并未进行黑名单过滤,可绕过进行文件上传。

10、逻辑不严-条件竞争

请添加图片描述

该漏洞少

原理

先上传,接收文件,再进行判断处理,若不通过则删除文件。即文件在服务器存储过,逻辑不严谨。

条件竞争:在文件上传到服务器,还没有进行判断的时候访问到后门。

该漏洞是逻辑上的问题。

漏洞利用:

不断的发包上传访问,请求连接,

上传不断发包,请求不断发包

访问即创建代码文件出来。即访问了就自动触发将后门写入新文件的代码。

<?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>

上传前设置好一直访问对应上传路径。(在burpsuite的intruder模块中设置为no payload,然后让他一直发,就会一直循环发包访问,将文件上传的包也批量发送。)

在黑盒测试中,需要先上传正常文件查看保存路径以及命名,如果命名为随机命名则不能使用该思路了

漏洞判断:黑盒中没办法判断,白盒中可以审计判断,黑盒中即使用该测试方法,测不出来就是没有该漏洞

11、二次渲染

二次渲染

有些网站会对上传的文件进行二次渲染,改变文件内容,上传的带有后门代码的图片/文件会被更改而无法使用

绕过原理:

先搞个正常图片,上传导出渲染后的图片

使用二进制软件对比保留部分,在保留部分添加后门代码

最后利用提示的文件包含执行图片后门代码

很多网站存在的,和文件包含结合。

意义:有时候上传了带有后门的文件(如图片),但是经过网站的二次渲染后,后门代码没了,没有保留,需要了解二次渲染才能让上传的文件中保留代码段。

12、函数缺陷

原理

文件上传使用的函数有缺陷。

move_uploaded_file($temp_file, $img_path)

$img_path 可控的时候,还会忽略掉 $img_path 后面的 /.

所以将文件名改为:shell.php/. 后加上/. ,即可绕过黑名单。

利用条件

  1. 用到move_uploaded_file 函数
  2. 保存的文件名可控,可由自己指定文件名

漏洞利用

将文件名改为:shell.php/. 后加上/.

CTF常考。

13、代码审计-数组绕过

主要考察php代码审计,代码中的逻辑缺陷

现在的文件上传漏洞都不明显,一般比较容易发现的上传位置都没有上传漏洞,在一些难发现的上传点产生文件上传漏洞的概率较大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/218828.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云cdn设置相同的域名路径访问不同的oss目录

1.设置回源配置&#xff0c;添加回源URL改写 2.设置跨域&#xff0c;cdn的跨域优先oss 3.回源设置

SpringData自定义操作

一、JPQL和SQL 查询 package com.kuang.repositories;import com.kuang.pojo.Customer; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingR…

深度学习——第6章 浅层神经网络(NN)

第6章 浅层神经网络&#xff08;NN&#xff09; 目录 6.1 神经网络模型概述 6.2 神经网络正向传播 6.3 神经网络反向传播 6.4 W和b的初始化 6.5 总结 上一课主要介绍了一些神经网络必备的基础知识&#xff0c;包括Sigmoid激活函数、损失函数、梯度下降和计算图。这些知识对…

MX6ULL学习笔记(十二)Linux 自带的 LED 灯

前言 前面我们都是自己编写 LED 灯驱动&#xff0c;其实像 LED 灯这样非常基础的设备驱动&#xff0c;Linux 内 核已经集成了。Linux 内核的 LED 灯驱动采用 platform 框架&#xff0c;因此我们只需要按照要求在设备 树文件中添加相应的 LED 节点即可&#xff0c;本章我们就来学…

windows10 php8连接sql server

一、环境安装 文章目录 一、环境安装1.安装php拓展2.在 Windows 上安装PHP驱动程序3.在 Windows 上安装ODBC驱动 二、php连接sqlserver三、注意事项数据库相关设置相关语法sqlsrv_fetch_array 的示例&#xff1a;sqlsrv_fetch 的示例&#xff1a;echo 和 print_r 的不同 所用资…

【卡塔尔世界杯数据可视化与新闻展示】

卡塔尔世界杯数据可视化与新闻展示 前言数据获取与处理可视化页面搭建功能实现新闻信息显示详情查看登录注册评论信息管理 创新点结语 前言 随着卡塔尔世界杯的临近&#xff0c;对于足球爱好者来说&#xff0c;对比赛的数据分析和新闻报道将成为关注的焦点。本文将介绍如何使用…

论文阅读:PointCLIP V2: Prompting CLIP and GPT for Powerful3D Open-world Learning

https://arxiv.org/abs/2211.11682 0 Abstract 大规模的预训练模型在视觉和语言任务的开放世界中都表现出了良好的表现。然而&#xff0c;它们在三维点云上的传输能力仍然有限&#xff0c;仅局限于分类任务。在本文中&#xff0c;我们首先协作CLIP和GPT成为一个统一的3D开放世…

C++ 运算符重载

目录 前言 算术运算符重载 加号运算符 位运算符重载 左移运算符 自增自减运算符重载 前置自增运算符 后置自增运算符 赋值运算符重载 等号赋值运算符重 关系运算符重载 相等 不等 函数调用运算符重载 总结 前言 在C中&#xff0c;运算符重载是一种强大的特性…

jmeter,csv文件参数化+断言 实现一个接口的case

1、case 及其 测试数据 注意保存文件的编码格式 id,name,limit,status,address,start_time,assert_status,assert_message 100,小米100,1000,1,某某会展中心101,2023-8-20 14:20,200,add event success ,,,,,,10021,parameter error 100,小米102,1002,1,某某会展中心103,2023-…

Centos7部署SVN

文章目录 &#xff08;1&#xff09;SVN概述&#xff08;2&#xff09;SVN与Samba共享&#xff08;3&#xff09;安装SVN&#xff08;4&#xff09;SVN搭建实例&#xff08;5&#xff09;pc连接svn服务器&#xff08;6&#xff09;svn图标所代表含义 &#xff08;1&#xff09;…

ArrayList与LinkLIst

ArrayList 在Java中&#xff0c;ArrayList是java.util包中的一个类&#xff0c;它实现了List接口&#xff0c;是一个动态数组&#xff0c;可以根据需要自动增长或缩小。下面是ArrayList的一些基本特性以及其底层原理的简要讲解&#xff1a; ArrayList基本特性&#xff1a; 动…

听GPT 讲Rust源代码--src/tools(13)

File: rust/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incoherent_impl.rs 在Rust源代码中&#xff0c;路径为rust/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incoherent_impl.rs的文件是为了处理Rust代码中的不一致实现问题而存在的。…

生成小程序URLlink链接遇到的坑

这里写自定义目录标题 前端生成小程序URL link背景用户打开小程序的常用方法短链接短链接优缺点优点缺点 生成短链接步骤 可能会遇到的问题&#xff1a;其他 注意&#x1f4e2; 前端生成小程序URL link ![h5打开小程序](https://img-blog.csdnimg.cn/direct/a4cfe3ef6d184c6d9…

MQTT的奇妙之旅:探索RabbitMQ Web MQTT插件的威力【RabbitMQ 十一】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 MQTT的奇妙之旅&#xff1a;探索RabbitMQ Web MQTT插件的威力 前言第一&#xff1a;揭秘RabbitMQ Web MQTT插件背景和目的&#xff1a;MQTT 协议简介&#xff1a;WebSockets 和 MQTT 的融合&#xff1…

让高清媒体无限畅享——Movist Pro for Mac推广文章

随着科技的迅猛发展&#xff0c;高清媒体已经成为我们日常生活中不可或缺的一部分。无论是观看电影、追剧、还是欣赏高清音乐视频&#xff0c;我们都希望能够获得最佳的视听体验。为了满足这一需求&#xff0c;我们向大家推荐一款强大的高清媒体播放器——Movist Pro for Mac。…

Selenium安装WebDriver:ChromeDriver与谷歌浏览器版本快速匹配_最新版120

最近在使用通过selenium操作Chrome浏览器时&#xff0c;安装中遇到了Chrome版本与浏览器驱动不匹配的的问题&#xff0c;在此记录安装下过程&#xff0c;如何快速找到与谷歌浏览器相匹配的ChromeDriver驱动版本。 1. 确定Chrome版本 我们首先确定自己的Chrome版本 Chrome设置…

【后端卷前端3】

侦听器 监听的数据是 data()中的动态数据~响应式数据 <template><div><p>{{showHello}}</p><button click"updateHello">修改数据</button></div> </template><script>export default {name: "goodsTe…

关于枚举的简单理解

1. 枚举的简单认识 1.1 枚举的引入 枚举是在JDK1.5以后引入的。主要用途是&#xff1a;将一组常量组织起来&#xff0c;在这之前表示一组常量通常使用定义常量的方式如下面的代码所示&#xff1a; public static final int RED 1; public static final int GREEN 2; public…

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装&#xff0c;主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

HNU-计算机网络-实验4-网络层与链路层协议分析(PacketTracer)

计算机网络 课程基础实验四网络层与链路层协议分析&#xff08;PacketTracer&#xff09; 计科210X 甘晴void 202108010XXX 文章目录 计算机网络 课程基础实验四<br>网络层与链路层协议分析&#xff08;PacketTracer&#xff09;一、实验目的二、实验内容4.1 路由器交换…