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

news2024/9/22 11:24:07

在这里插入图片描述

寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 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.coloradmin.cn/o/1972351.html

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

相关文章

基于C语言从0开始手撸MQTT协议代码连接标准的MQTT服务器,完成数据上传和命令下发响应(华为云IOT服务器)

文章目录 一、前言二、搭建开发环境三、网络编程基础概念科普3.1 什么是网络编程3.2 TCP 和 UDP协议介绍3.3 TCP通信的实现过程 四、Windows下的网络编程相关API介绍4.1 常用的函数介绍4.2 函数参数介绍4.3 编写代码体验网络编程 五、访问华为云IOT服务器创建一个产品和设备5.2…

STM32ADC

ADC简介&#xff1a;有打moba游戏的别搞混了&#xff0c;这不是射手adc。在32中&#xff0c;ADC的全称为&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 也就是模拟-数字电路的转换器。其实通俗的来讲&#xff0c;它就是一个电压表。 目录 一.ADC原理…

六、5 TIM输入捕获介绍

1、基本知识介绍 &#xff08;1&#xff09; 注意&#xff1a; ①4个输入捕获和输出比较通道&#xff0c;共用4个CCR寄存器 ②CH1到CH4&#xff0c;四个通道的引脚也是共用的 ③同一个定时器输入捕获和输出比较&#xff0c;不能同时使用 &#xff08;2&#xff09;输入捕获…

4G/5G无线视频采集设备如何通过国标28181接入到视频监控接入平台(视频统一接入平台)

目录 一、国标GB/T 28181介绍 1、国标GB/T28181 2、内容和特点 二、4G/5G无线视频采集设备 1、定义 2、主要功能&#xff1a; 3、技术特点 4、应用场景 二、接入准备工作 1、确定网络环境 &#xff08;1&#xff09;公网接入 &#xff08;2&#xff09;专网传输 2、…

使用 Rough.js 创建动态水平条形图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 Rough.js 创建动态可视化网络图 应用场景 Rough.js 是一个 JavaScript 库&#xff0c;它允许开发人员使用毛边风格创建可视化效果。该库适用于各种应用程序&#xff0c;例如&#xff1a; 数据可视化地图…

【C++11】解锁C++11新纪元:深入探索Lambda表达式的奥秘

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C11右值引用 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C11 &#x1f4d2;1. 可变参数模板…

.net # 检查 带有pdf xss

1.解决pdf含javasprct脚本动作&#xff0c;这里是验证pdf内部事件。相关pdf文件下载&#xff1a; 测试pdf文件 相关包 iTextSharp 5.5.13.4 iTextSharp using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser;private Boolean IsPdfSafe(Stream stream){// PdfReader…

PyTorch+PyG实现图神经网络经典模型目录

前言 大家好&#xff0c;我是阿光。 本专栏整理了《图神经网络代码实战》&#xff0c;内包含了不同图神经网络的相关代码实现&#xff08;PyG以及自实现&#xff09;&#xff0c;理论与实践相结合&#xff0c;如GCN、GAT、GraphSAGE等经典图网络&#xff0c;每一个代码实例都…

洛谷 P1739 表达式括号匹配 题解

题目描述 假设一个表达式有英文字母&#xff08;小写&#xff09;、运算符&#xff08;、-、*、/&#xff09;和左右小&#xff08;圆&#xff09;括号构成&#xff0c;以 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配&#xff0c;若匹配&#xff0c…

springboot农产品报价系统-计算机毕业设计源码37300

摘 要 本研究基于鸿蒙系统&#xff0c;设计开发了一款农产品报价系统小程序&#xff0c;旨在帮助商家与买家更便捷、高效地进行交易。该系统利用鸿蒙系统的优势&#xff0c;实现了跨平台应用程序的开发&#xff0c;同时利用定位技术和数据采集技术&#xff0c;为用户提供了个性…

RoboCom 2021 编程技能赛决赛 7-4 猛犸不上 Ban

7-4 猛犸不上 Ban 赛题 分数 30 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 在一个名叫刀塔的国家里&#xff0c;有一只猛犸正在到处跑着&#xff0c;希望能够用它的长角抛物技能来撞飞别人。已知刀塔国有 N 座城市&#xff0c;城市之间由 M 条道路互相连接&#xff…

【C语言】【数据结构】冒泡排序及优化

一、算法思想 冒泡排序是一种简单的排序算法。一次从前往后地走访待排序的元素序列被称为一趟&#xff0c;每一趟都会把相邻的两个元素的错误顺序交换&#xff0c;将当前趟次中最大或者最小的元素像“冒泡泡”一样冒到最后面&#xff0c;反复地走访元素序列&#xff0c;直到所有…

Maven 安装-从下载、安装、配置以及检查是否安装成功,最详细安装教程

以下内容参考&#xff1a;https://juejin.cn/post/6844903543711907848 原文标题&#xff1a;Maven入门&#xff0c;读完这篇就够了 作者&#xff1a;嘟嘟MD 链接&#xff1a;https://juejin.cn/post/6844903543711907848 来源&#xff1a;稀土掘金 ----- 注&#xff1a;所有流…

计算机组成原理——运算器ALU,移位操作

一、组合逻辑电路和时序逻辑电路 组合逻辑电路&#xff1a;其输出仅取决于当前输入组合&#xff0c;不依赖先前输出&#xff0c;不具备存储状态的能力 时序逻辑电路&#xff1a;其输出不仅取决于当前输入&#xff0c;还取决于先前的输出&#xff0c;具备存储状态的能力。 AL…

多 NodeJS 环境管理

前言 对于某个项目依赖特定版本的 NodeJS&#xff0c;或几个项目的 NodeJS 版本冲突时&#xff0c;需要在系统中安装多个版本的 NodeJS&#xff0c;这时可以使用一些工具来进行多个 NodeJS 的管理。 有很多类似的 NodeJS 管理工具&#xff0c;如 nvm, nvs, n 等&#xff0c;接…

【Unity】 HTFramework框架(五十四)【进阶篇】Deployment 轻量级资源部署管线

更新日期&#xff1a;2024年7月31日。 Github源码&#xff1a;[点我获取源码] 索引 Deployment 轻量级资源部署管线使用 Deployment一、创建部署配置二、编辑部署配置三、正式开始资源部署步骤一&#xff1a;资源打包步骤二&#xff1a;资源版本构建步骤三&#xff1a;资源版本…

学习C语言第19天(练习题)

编程题 第一题 改数字 //改数字 int gaishuzi(int * input) {int sum 0;int i 0;while (*input){int bit* input% 10;if (bit % 2 1){sum 1 * pow(10, i);i;}else{sum 0* pow(10, i);i;}*input / 10;}return sum; } int main() {int input 0;scanf("%d&quo…

域气象-大气化学在线耦合模式(WRF/Chem)在大气环境中的应用

随着我国经济快速发展&#xff0c;我国面临着日益严重的大气污染问题。近年来&#xff0c;严重的大气污染问题已经明显影响国计民生&#xff0c;引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果&#xff0c;同时气象因…

嵌入式day17

尾插&#xff1a; 头删&#xff1a; 尾删&#xff1a; 双向链表&#xff1a; 循环链表&#xff1a; 内存泄漏&#xff08;malloc 调用的节点需要手动清除&#xff09; 清除&#xff1a; 头删效率更高&#xff0c;算法复杂度更低 共用体 共用体的成员&#xff0c;会共同占用相…

CX32L003F8P6T芯片解密程序破解

CX32L003F8P6T可替代N76E003 CX32L003是一款内嵌32位ARM Cortex-M0内核的超低功耗、Low Pin Count和宽电压工作范围(2.5V~5.5V)的微控制器&#xff0c;最高可运行在24MHz&#xff0c;内置32K/64K字节的嵌入式Flash&#xff0c;4K字节的SRAM&#xff0c;集成了12位1Msps高精度SA…