upload-labs漏洞靶场~文件上传漏洞

在这里插入图片描述

寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查看上传时的返回信息,判断是否能直接上传,如果不能直接上传,再进行测试上传突破,例如上传文件的时候只允许图片格式的后缀,但是修改文件时,却没有限制后缀名,图片文件可以修改成动态语言格式如php,则可能访问这个文件的 URL 直接 getshell,可以控制网站;

# 首先我们创建一个木马程序,让它作为文件进行上传,达到我们目的

image-20240731110507503

Pass-01(绕过前端js检测)

# 本题先查看网页源码,把检测js的内容删掉,然后直接上传1.php

image-20240731114443470

image-20240731114506287

# 访问图片的页面,通关

image-20240731110456895

Pass-02(绕过contnet-type)

# 有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务端是通过 content-type 判断类型,content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险;
# 所以这道题需要我们抓包,然后查看contnet-type的类型

image-20240731111846806

# 发现后缀名要求是jpeg格式,所以我们插入的格式为1.jpg,然后我们在客户端抓包后再改成1.php

image-20240731111837237

#  修改好后放包,访问文件路径,成功

image-20240731111715771

Pass-03(绕过黑名单上传)

# 上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测, 如果后缀名在黑名单的列表内,文件将禁止文件上传;
# 本题我们发现提示不允许上传asp,aspx.php,jsp后缀名的文件

image-20240731112311749

# 因此我们就需要把它的格式替换成其他格式的后缀,也能在其中执行的php后缀名
上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3、php5;

image-20240731112348168

image-20240731112940348

Pass-04(htaccess 重写解析绕过上传)

# 上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess .htaccess 文件的作用是可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能;在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成 php 文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache 是多数都开启这个模块,所以规则一般都生效;
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>

image-20240731113230027

# 它将所有的.jpg文件解析为.php 然后访问1.jpg即可获取

image-20240731113343601

image-20240731115704688

Pass-05(大小写绕过上传)

# 获取文件后缀名进行判断,如果后缀在这个字典里就禁止上传。
$deny_ext =array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
# 因此我们要用没有被过滤掉的文件名字

image-20240731113512503

# 发现1.php可以,所以给它用大小写来绕过,最后得出结果

image-20240731113536801

image-20240731113615408

Pass-06(利用 windows 系统特征空格绕过上传)

# 由于在windpws系统中可以通过空格和点来表示空白

image-20240731113913864

# 所以我们用空格来做此题,最后发现执行成功

image-20240731114018090

image-20240731114054590

Pass-07(利用 windows 系统特征点绕过上传)

# 同Pass-06题一样,不过这道题是使用点来进行绕过

image-20240731141058352

# 所以我们只需要抓包在输入的地方多加点就可以了

image-20240731141505876

image-20240731141527622

Pass-08(::$DATA绕过上传)

- Windows本地文件系统中的文件流(File Streams):
- 当从 Windows shell 命令行指定创建文件时,流的完整名称为 "filename:stream name:stream type",如示例中所示: "myfile.txt:stream1:$DATA"# 上面都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险;
# 如果后缀名没有对::$DATA 进行判断,利用 windows 系统 NTFS 特征可以绕过上传 ;

image-20240731141641499

# burpsuite 抓包,修改后缀名为 .php::$DATA ;

image-20240731141953721

image-20240731141901613

Pass-09(点空格点绕过上传)

# 本题是需要我们用点空格点来进行绕过

image-20240731142052506

# 直接抓包后在后面输入. . 即可

image-20240731142128519

image-20240731142152228

Pass-10(双写后缀绕过上传)

# 在上传模块,有的代码会把黑名单的后缀名替换成空,例如 a.php 会把 php 替换成空,但是可以使用双写绕过例如 asaspp,pphphp,即可绕过上传;
如下图就可以发现

image-20240731142316696

# 所以我们就可以用双绕过来解答此题
只需要在输入的1.php后来个双绕过,直接拿下

image-20240731142415887

image-20240731142433446

Pass-11(目录可控%00 截断绕过上传(GET))

# 上面都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险;
 - 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断;
- php 版本小于 5.3.4 ;

image-20240731142659390

# 我们通过抓包来截断后面的内容
效果是1.php%00.1.jpg 变成 1.php

image-20240731142647470

image-20240731143159489

Pass-12(目录可控%00 截断绕过上传(POST))

# 此题和Pass-11是一样的 ,只不过一个是get,一个是post

image-20240731143242753

# 我们抓包后在1.php后面用%00来截断,完成此题

image-20240731143328410

image-20240731143536062

Pass-13(文件头检测绕过)

# 有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测它检测图片是两个字节的长度,如果不是图片的格式,会禁止上传 ;

image-20240731150745387

# 制作图片一句话,使用 copy 1.jpg/b+123.php/a shell.jpg 将 php 文件附加在 jpg 图片上,直接上传即可;/b代表以二进制编码打开文件,/a代表以ASCII码编码打开文件

image-20240731150851073

image-20240731151127395

Pass-14(文件头检测绕过)

# 本题和Pass-15做法一样,按步骤完成即可

image-20240731153330612

image-20240731153349674

image-20240731153357209

Pass-15(文件头检测绕过)

# pass-15和前面两道题也一样,同样的步骤不再重复

image-20240731153517573

image-20240731153549515

image-20240731153508811

Pass-16(图片二次渲染检测绕过)

# 首先判断图片是否允许上传 jpg,jpg 图片在二次渲染后,与原图片差别不会太大。 所以二次渲染攻击最好用 gif 图片图片马;
# 将原图片上传,下载渲染后的图片进行对比,找相同处,覆盖字符串,填写一句话后门,或者恶意指令;

image-20240731161156425

image-20240731161212655

image-20240731161218817

Pass-17(条件竞争漏洞绕过)

# 在文件上传时,如果逻辑不对,会造成很大危害,例如文件上传时,用 move_uploaded_file 把上传的临时文件移动到指定目录,接着再用 rename 文件,设置图片格式,如果在 rename 之前move_uploaded_file 这个步骤 如果这个文件可被客户端访问,这样我们也可以获取一个 webshell;

其实重是重点在于,在多线程情况下,就有可能出现还没处理完,我们就访问了原文件,这样就会导致被绕过防护。

# 首先我们改一个木马,让它的效果明显一点
/cmd.php
<?php @fputs(fopen('123.php',w),'<?php phpinfo();?>');?>

然后和前面的步骤一样,让他生成一个图片马,上传文件,用burp抓包,设置无限发送空的payloads,线程调高一点;

image-20240731191015389

image-20240731191023063

# # python脚本访问我们上传文件
import requests
while True:
html = requests.get('http://192.168.0.216/upload/11.php')
if html.status_code == 200:
print("OK")
break

image-20240731191113882

Pass-18(条件竞争漏洞绕过二)

image-20240731191358838

# 从源码来看的话,对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,因为move在rename之前,move操作进行了一次文件保存,然后rename进行了一次更改文件名,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。

本题和上一个题差不多,不过是增加了Apache的解析识别漏洞 (后缀冗余)

# 我们需要搞一个运行请求的python的脚本
#requests_2.py
import requests
from threading import Thread
url = "http://192.168.0.216/upload/cmd.php.7z"
url_2 = "http://192.168.0.216/upload/123.php"
def request():
global html
global html_2
html = requests.get(url)
print(html.status_code)
html_2 = requests.get(url_2)
while True:
t = Thread(target=request())
t.start()
if html_2.status_code == 200:
print("123.php已生成!")
break

image-20240731191806990

# 因此我们可以利用Apache的漏洞,将webshell改为1.php.7z
//.7z在Apache的白名单中无法识别,所以利用,我们直接和上一题一样快速发包,实现条件竞争

image-20240731192217431

Pass-19(文件名可控绕过上传)

文件上传时,文件名可被客户端修改控制,会导致漏洞产生;本题也需要将php版本小于5.3.4才行

# 上传文件,文件马采用%00 截断,抓包解码,

image-20240731192914773

image-20240731193025803

image-20240731193412090

Pass-20(数组绕过上传)

# 有的文件上传,如果支持数组上传或者数组命名。如果逻辑写的有问题会造成安全隐患,导致不可预期的上传。这种上传攻击,它是属于攻击者白盒审计后发现的漏洞居多 ;

image-20240731193612865

# 我们通过抓包然后操作以下步骤
修改content-type
2.修改POST参数为数组类型,索引[0]为`upload-20.php`,索引[2]为`jpg|png|gif`。
3.只要第二个索引`不为1`,$file[count($file) - 1]就等价于$file[2-1],值为空。

image-20240731194109683

# 我们需要为upload-20.php复制一个数组,然后完成文件上传,发现图片马也成功了

image-20240731194328941

image-20240731194317619

好小子,离成功又近一步!!!

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

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

相关文章

电脑新加的硬盘如何分区?新加硬盘分区选MBR还是GPT

最近有网友问我,电脑新加的硬盘如何分区?电脑新加的硬盘分区选MBR还是GPT要看引导模式采用uefi还是传统的legacy模式&#xff0c;如果采用的是uefi引导模式&#xff0c;分区类型对应的就是gpt分区(guid)&#xff0c;如果引导模式采用的是legacy&#xff0c;对应的分区类型为mb…

Spring Boot集成sse实现chatgpt流式交互

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 什么是sse&#xff1f; SSE可以指代两种不同的概念&#xff1a;一是指“服务器发送事件”(Server-Sent Events)&#xff0c;另一种是指英特尔的“因特网数据流单指令序列扩展”(Streaming SIMD Extensions)。…

循环结构(三)——do-while语句

目录 &#x1f341;引言 &#x1f341;一、语句格式 &#x1f680;格式1 &#x1f680;格式2 &#x1f341;二、语句执行过程 &#x1f341;三、实例 &#x1f680;【例1】 &#x1f680;【例2】 &#x1f680;【例3】 &#x1f341;总结 &#x1f341;备注 &am…

Unity获取Animator动画播放完成事件

整理了一些在日常经验中处理动画播放完成事件的方法 方法: 1.Dotween配合异步实现 2.状态机计时方法实现 3.原生动画行为方法实现 方法一&#xff1a;Dotween异步方法 using UnityEngine; using System.Threading.Tasks; using DG.Tweening;public class PlayerAnimAsync : M…

Java——多线程(6/9):线程池、处理Runnable、Callable任务(认识线程池-线程池的工作原理,ThreadPoolExecutor构造器)

目录 认识线程池 介绍 线程池的工作原理 如何创建线程池 介绍 ThreadPoolExecutor构造器 代码实例 线程池的注意事项 线程池处理Runnable任务 ExecutorService的常用方法 代码实例 新任务拒绝策略 线程池处理Callable任务 ExecutorService的常用方法 代码实例…

如何从智联招聘网站快速抓取职位详情?两大技巧揭秘

摘要&#xff1a; 本文将揭秘如何利用Python爬虫技术&#xff0c;高效且合法地从智联招聘网站抓取职位详情信息。通过实战示例&#xff0c;展现两大核心技巧&#xff0c;助你在大数据时代抢占先机&#xff0c;为你的市场分析、人才研究提供强大支持。 一、引言&#xff1a;数据…

排序算法:冒泡排序,golang实现

目录 前言 冒泡排序 代码示例 1. 算法包 2. 冒泡排序代码 3. 模拟排序 4. 运行程序 5. 从大到小排序 循环细节 外层循环 内层循环 总结 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 假设 5000 条数据&#xff0c;对比…

荒原之梦考研:专科考研成功的可能性大吗?

专科还是本科不是决定考研能否成功的关键因素&#xff0c;决定考研能否成功的关键因素是自己是否有清晰的规划、是否有足够的专注能力&#xff0c;以及是否能够吃得了考研的“苦”。 首先要有清晰的规划&#xff0c;比如说&#xff0c;不是我们每个人足够努力就都能考上 TOP1 …

很简单的Win10+Win7双系统教程|UEFI篇

前言 前段时间有写过一篇关于Windows10Windows7双系统安装教程&#xff0c;但这个教程为了比较保险&#xff0c;就进入了WinPE维护系统进行操作。 但有很多小伙伴就有点搞不懂了&#xff0c;都不知道WinPE是什么系统&#xff0c;也不知道怎么去解决这个问题。 今天咱们就来讲…

centos7部署智能dns实战应用

主DNS&#xff1a;192.168.101.129 备DNS&#xff1a;192.168.101.128 原理&#xff1a; 一、下载软件 bind-9.17.9.tar.xz的下载地址&#xff1a;https://ftp.isc.org/isc/bind9/9.17.9/bind-9.17.9.tar.xz。更多的bind版本可以从https://ftp.isc.org/isc/bind9/下载。 二&a…

【深入探秘Hadoop生态系统】全面解析各组件及其实际应用

深入探秘Hadoop生态系统&#xff1a;全面解析各组件及其实际应用 引言 在大数据时代&#xff0c;如何高效处理和存储海量数据成为企业面临的重大挑战。根据Gartner的统计&#xff0c;到2025年&#xff0c;全球数据量将达到175泽字节&#xff08;ZB&#xff09;&#xff0c;传…

学习安卓开发遇到的问题

问题1&#xff1a;学习禁用与恢复按钮中&#xff1a; java代码报错&#xff1a;报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下&#xff1a;&#xff08;实现功能在代码后面&#xff09; package com.example.apptest;import static java.…

【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)

1&#xff0c;关于 unity test 测试框架的介绍 unity test 是 ThrowTheSwitch.org 的一个主要工程。它是专注于为嵌入式工具链而生的C语言单元测试框架。它可以适用于大工程或者小工程都可以。它的核心文件是一个.c文件和两个头文件。 备注&#xff1a; 下载源码地址&#xff…

应急响应-Web3

打开虚拟机之后&#xff0c;运行解题系统&#xff1a; 共有三个问题&#xff01; 攻击者的两个IP地址 首先我们看到机器的桌面上还是存在phpstudy&#xff0c;那就还是先去看看是不是从web层面进行的攻击&#xff0c;上传webshell从而getshell。 利用D盾尝试对phpstudy目录进…

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想&#xff01;我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等&#xff0c;Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载&#xff1a;ceomax-pro7.6.zip…

【系统架构设计师】二十四、安全架构设计理论与实践②

目录 三、系统安全体系架构规划框架 3.1 信息系统安全体系规划 3.2 信息系统安全规划框架 3.2.1 信息系统安全规划依托企业信息化战略规划 3.2.2 信息系统安全规划需要围绕技术安全、管理安全、组织安全考虑 3.2.3 信息系统安全规划以信息系统与信息资源的安全保护为核心…

[环境配置]Pycharm:Failed to start [PowerShell.exe]

解决方法&#xff0c;点Local旁边的 号&#xff0c;点击Command Prompt&#xff0c;即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径&#xff0c;可以去Settings→Tools→Terminal中&#xff0c;修改Shell Path实现&#xff0c;改为cmd.exe…

AWS开发人工智能:如何基于云进行开发人工智能AI

随着人工智能技术的飞速发展&#xff0c;企业对高效、易用的AI服务需求日益增长。Amazon Bedrock是AWS推出的一项创新服务&#xff0c;旨在为企业提供一个简单、安全的平台&#xff0c;以访问和集成先进的基础模型。本文中九河云将详细介绍Amazon Bedrock的功能特点以及其收费方…

117页PPT埃森哲-物流行业信息化整体规划方案

一、埃森哲-物流行业信息化整体规划方案 资料下载方式&#xff0c;请看每张图片右下角信息 埃森哲在物流行业信息化整体规划项目中的核心内容&#xff0c;旨在帮助物流企业通过信息技术的应用实现业务流程的优化、运营效率的提升以及市场竞争力的增强。以下是埃森哲在此类项目…

C语言指针(1)

目录 一、内存和地址 1、生活中的例子 2、内存的关系 二、指针变量和地址 1、&符号&#xff0c;%p占位符 2、一个简单的指针代码。 3、理解指针 4、解引用操作符 5、指针变量的大小。 三、指针变量类型的意义 1、指针解引用的作用 2、指针指针 3、指针-指针 4…