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.mzph.cn/news/228585.shtml

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

相关文章

Python生成器(Generator)(继续更新...)

学习网页&#xff1a; Welcome to Python.orghttps://www.python.org/https://www.python.org/ Python生成器 生成器&#xff08;Generator&#xff09;是 Python 的一种特殊类型的迭代器。生成器允许你创建自己的数据流&#xff0c;每次从数据流中获取一个元素&#xff0c;…

活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动

MintPass 是由 Mint Blockchain 官方发行的 Mint 网络和社区的 NFT 通行证&#xff0c;将在 2024 年 1 月份启动限时铸造活动。今天这篇文章会着重向大家介绍即将举办的 MintPass 活动的基础信息。 MintPass 有 2 种类型&#xff1a; 类型 1&#xff1a;Mint Genesis NFT Mint…

Unity中Shader URP 简介

文章目录 前言一、URP&#xff08;Universal Render Pipeline&#xff09;由名字可知&#xff0c;这是一个 通用的 渲染管线1、Universal&#xff08;通用性&#xff09;2、URP的由来 二、Build-in Render Pipeline&#xff08;内置渲染管线&#xff09;1、LWRP&#xff08;Lig…

【JavaEE】多线程案例 - 定时器

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

C语言:求和1+1/2-1/3+1/4-1/5+……-1/99+1/100

#include<stdio.h> int main() {int i 0;double sum 0.0;int flag 1;for (i 1;i < 100;i){sum 1.0 / i * flag;flag -flag;}printf("sum%lf\n", sum);return 0; }

设计模式——策略模式

引言 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 问题 一天&#xff0c; 你打算为游客们创建一款导游程序。 该程序的核心功能是提供美观的地图&#xff0c; 以…

【每日一题】使用最小花费爬楼梯

文章目录 Tag题目来源解题思路方法一&#xff1a;动态规划空间优化 写在最后 Tag 【动态规划空间优化】【数组】【2023-12-17】 题目来源 746. 使用最小花费爬楼梯 解题思路 方法一&#xff1a;动态规划 思路 假设数组 cost 的长度为 n&#xff0c;则 n 阶楼梯分别对应下标…

Python往事:ElementTree的单引号之谜

最近在针对某款设备的界面xml进行更新过程中&#xff0c;被告知回稿的字串放在了一个excel文件中&#xff0c;而我要上传到服务器的界面用语是用xml文件封装的。再经过详细求证了翻译组提供excel文件的原因后&#xff0c;我决定用python来完成界面用语xml的更新&#xff0c;但是…

OOD 异常GPT:使用大型视觉语言模型检测工业异常

paper link https://arxiv.org/abs/2308.15366video demo https://youtu.be/lcxBfy0YnNAgithub https://github.com/CASIA-IVA-Lab/AnomalyGPT在线使用 https://huggingface.co/spaces/FantasticGNU/AnomalyGPT 摘要 大型视觉语言模型&#xff08;LVLM&#xff09;如MiniGPT-4…

大数据CloudSim应用实践

CloudSimExampleA.java 1准备 1.1操作系统 本实验在Windows 7 或Windows 10系统运行均可。 1.2软件 cloudsim-3.0.3.zip&#xff1b; commons-math3-3.2-bin.zip&#xff1b; jdk-8u152-windows-x64.exe&#xff1b; eclipse-jee-neon-3-win32-x86_64 所需资料链接&#xff1…

W25Q64(模拟SPI)读写数据的简单应用

文章目录 一、W25Q64是什么&#xff1f;二、使用步骤1.硬件1.引脚说明2.硬件连接3.设备ID4.内部框架5.指令集指令集1指令集2 2.软件1.W25Q64引脚定义代码如下&#xff08;示例&#xff09;&#xff1a;2.W25Q64初始化代码如下&#xff08;示例&#xff09;&#xff1a;3.W25Q64…

【IC前端虚拟项目】MVU模块方案与背景熟悉

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 mvu这个模块是干嘛用的呢&#xff1f;从这个名字就可以看出来move_unit&#xff0c;应该是做数据搬运的。很多指令级中都会有数据搬运的指令&#xff0c;这类指令的作用一般是在片内片外缓存以及通用专用…

Java基础语法之抽象类和接口

抽象类 什么是抽象类 并不是所有的类都是用来描述对象的&#xff0c;这样的类就是抽象类 例如&#xff0c;矩形&#xff0c;三角形都是图形&#xff0c;但图形类无法去描述具体图形&#xff0c;所以它的draw方法无法具体实现&#xff0c;这个方法就可以没设计成抽象方法&…

常用模块之(time/datetime)

【 一 】时间模块&#xff08;time/datetime&#xff09; 【 二 】 表示时间的三种方式 *时间戳&#xff08;Timestamp&#xff09;是指1970年1月1日00:00:00开始计算的偏移量。可以使用time模块中的time()函数获取当前时间的时间戳&#xff0c;也可以使用datetime模块中的tim…

大创项目推荐 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数&#xff1a;2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

ElasticSearch学习篇8_Lucene之数据存储(Stored Field、DocValue、BKD Tree)

前言 Lucene全文检索主要分为索引、搜索两个过程&#xff0c;对于索引过程就是将文档磁盘存储然后按照指定格式构建索引文件&#xff0c;其中涉及数据存储一些压缩、数据结构设计还是很巧妙的&#xff0c;下面主要记录学习过程中的StoredField、DocValue以及磁盘BKD Tree的一些…

PyQt6 QScrollBar滚动条控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计48条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

录制第一个jmeter性能测试脚本2(http协议)_图书管理系统

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录图书管理系统&#xff0c;然后进入 页面进行查看。 目录 欢迎访问我的免费课程 PPT、安装包、视频应有尽有&#xff…

【微服务】Spring Aop原理深入解析

目录 一、前言 二、aop概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk代理示例 3.1.2 jdk动态代理模拟实现…

【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)

OpenCV 源码编译并实现 CUDA 加速 Windows 1. 环境准备1.1 软件环境1. 2 源码下载 2. CMake编译项目2.1 创建cmake项目2.2 设置编译配置2.3 解决异常2.3.1 文件下载异常2.3.2 解决CUDA版本异常 2.4 编译项目 3. Visual Studio 编译项目4. 项目测试5. 总结 OpenCV是一个基于Apac…