Webug4.0靶场通关笔记15- 第19关文件上传(畸形文件)
目录
第19关 文件上传(畸形文件)
1.打开靶场
2.源码分析
(1)客户端源码
(2)服务器源码
3.渗透实战
(1)构造脚本
(2)双写绕过
(3)访问脚本
本文通过《webug4.0靶场第19文件上传之畸形文件》对客户端前端和服务端的代码进行审计,基于代码审计来分析渗透思路并进行渗透实战。
第19关 文件上传(畸形文件)
1.打开靶场
进入webug4.0靶场的第19关卡文件上传(畸形文件),完整URL地址如下所示。
http://192.168.71.1/webug4/control/upload_file/upload_file_3.php
进入靶场后发现这是一个注册账号的页面,包含文件上传的功能,具体如下图所示。
2.源码分析
(1)客户端源码
如下所示右键发现依旧存在客户端绕过,在前端通过js脚本使用白名单校验文件的后缀,具体如下所示。
(2)服务器源码
如下所示,查看upload_file_3.php代码,分析可知服务器端过滤了php关键字,可以通过双写法绕过。
<?php
// 引入公共配置文件,该文件可能包含了一些全局的常量、函数或配置信息
require_once "../../common/common.php";// 检查会话中是否存在 'user' 变量
// 如果不存在,说明用户未登录,将用户重定向到登录页面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}// 检查上传文件是否出现错误
// 如果存在错误,直接终止脚本执行
if ($_FILES['file']['error']) {die();
}// 检查是否有文件上传
if ($_FILES['file']) {// 将上传文件的相关信息存储在 $arr 数组中$arr = $_FILES['file'];// 获取上传文件的扩展名,并转换为小写// strrchr 函数用于返回文件名中从最后一个点开始的部分// trim 函数用于去除字符串首尾的空白字符$file_ext = trim(strtolower(strrchr($arr['name'], ".")));// 检查扩展名中是否包含 'php'// 如果包含,则将 'php' 从扩展名中移除if (strstr($file_ext, "php")) {$file_ext = str_replace("php", "", $file_ext);}// 检查目标上传目录中是否已经存在同名文件// TPMELATE 可能是一个定义在公共配置文件中的常量,表示模板目录路径if (file_exists(TPMELATE."/upload/".$arr['name'])) {// 如果文件已存在,弹出提示框告知用户echo "<script>alert('该文件已经存在')</script>";} else {// 如果文件不存在,为上传文件生成一个新的文件名// 使用 time() 函数生成一个时间戳,确保文件名的唯一性// iconv 函数用于将文件名从 UTF-8 编码转换为 gb2312 编码$filename = iconv("UTF-8","gb2312",TPMELATE."/upload/".time().$file_ext);// 将上传的临时文件移动到指定的目标路径move_uploaded_file($arr["tmp_name"], $filename);// 输出上传文件的完整路径,并终止脚本执行echo $filename;die();}
}// 引入上传文件的 HTML 页面
require_once TPMELATE."/upload_file_1.html";
这段 PHP 代码的主要功能是处理文件上传操作,整个代码的主要处理逻辑如下所示。
-
登录验证:检查用户是否已登录,如果未登录则重定向到登录页面。
- 错误检查:检查上传文件是否出现错误,如果有错误则终止脚本。
- 文件扩展名处理:获取上传文件的扩展名,并尝试将字符串php替换为空(删掉文件名中的php字符串),以防止上传 PHP 脚本文件。
- 文件存在性检查:检查目标上传目录中是否已经存在同名文件,如果存在则提示用户。
- 文件上传:如果文件不存在,则为上传文件生成一个新的文件名,并将临时文件移动到指定的目标路径。
- 页面引入:最后引入上传文件的 HTML 页面。
不过这段代码存在文件上传绕过的可能性,主要原因如下:
- 扩展名过滤不严格:代码只是简单地将扩展名中的
php
字符串移除,而没有对扩展名进行全面的白名单验证。攻击者可以通过构造特殊的扩展名,如.pphph
,在移除php
后仍然保留.php,从而可能渗透成功
。 - 编码转换问题:使用
iconv
函数将文件名从 UTF-8 编码转换为 gb2312 编码,可能会导致文件名被截断或出现乱码,攻击者可以利用这一点绕过文件类型检查。 - 缺乏文件内容验证:代码只检查了文件的扩展名,没有对文件的实际内容进行验证。攻击者可以将恶意代码嵌入到图片或其他允许的文件类型中,形成图片马,从而绕过扩展名检查。
3.渗透实战
由于对文件的检查是客户端处理,故而可以在客户端上传图片,绕过客户端的前端检查然后在bp中修改报文并将报文后缀改为info.pphphp 发送到服务器。
(1)构造脚本
将info.php修改为info.jpg,这样的话可以绕过前端的检查,如下所示。
bp开启拦截功能,firefox浏览器开启代理。
(2)双写绕过
将info.jpg上传,并使用bp抓包,同时将报文发送给repeater。
接下来将info.jpg改名为info.pphphp并点击发送,如下所示。
根据上图burpsuite工具中的response文件上传路径如下所示。
D:/web/phpstudy_pro/WWW/webug4/template/upload/1669881408.php
(3)访问脚本
访问上传的脚本,URL地址如下所示。
http://192.168.71.1/webug4/template/upload/1669881408.php
如下所示双写绕过成功,获取到了服务器的php版本信息。
相关文章:
Webug4.0靶场通关笔记15- 第19关文件上传(畸形文件)
目录 第19关 文件上传(畸形文件) 1.打开靶场 2.源码分析 (1)客户端源码 (2)服务器源码 3.渗透实战 (1)构造脚本 (2)双写绕过 (3)访问脚本 本文通过《…...
黑马点评大总结
8.2.1 短信登录 首先是用户提交手机号,后端将生成的验证码以及用户信息存入session中,用户登录时进行拦截并从session中拿出来信息校验,并把用户信息存入ThreadLocal中session共享问题:每个tomcat有自己的一份session,…...
LeetCode:返回倒数第k个结点
1、题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k 2 输出: 4 说明: 给定的 k 保证是有效的。 2、…...
zotero pdf中英翻译插件使用
最近发现一个pdf中英翻译的神器zotero-pdf2zh,按照官方安装教程走一遍的时候,发现一些流程不清楚的问题, 此文就是整理一些安装需要的文件以及遇到的问题: 相关文件下载地址 Zotero 是一款免费的、开源的文献管理工具࿰…...
Java后端程序员学习前端之CSS
什么是css Cascading Style Sheet 层叠级联样式表 表现 (美化网页) 字体,颜色,边距,高度,宽度,背景图片,网页定位,网页浮动.. 发展史 CSS1.0 CSS2.0 DIV(块)CSS,HTML与CSS结构分离…...
MySQL——数据库基础操作
学习MySQL之前,要先配置好相关环境与软件下载,怎么就不展开了:找找网上对应环境下的教程即可 目录 数据库与MySQL 案例使用 MySQL架构 SQL指令分类 储存引擎 库操作 创建数据库 编码集与校验规则 校验规则的影响 删除数据库 数…...
[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解
随着低代码平台和大语言模型工具的不断发展,将企业数据与智能交互能力融合,成为提高办公效率与自动化水平的关键一步。明道云作为一款成熟的低代码平台,Dify 则是一个支持自定义工作流的开源 LLM 应用框架。两者结合,可以实现灵活、高效的智能化业务处理。 本文将详解明道…...
湖北理元理律师事务所:规模化债事服务的探索与实践
在个人债务问题日益普遍化的当下,如何通过合法、系统化的服务帮助债务人化解危机,成为法律服务业的重要课题。湖北理元理律师事务所作为经国家司法局批准设立的债事服务机构,其构建的“法律技术金融”服务模式,为债务优化领域提供…...
MySQL JOIN详解:掌握数据关联的核心技能
一、为什么需要JOIN? 在关系型数据库中,数据通常被拆分到不同的表中以提高存储效率。当我们需要从多个表中组合数据时,JOIN操作就成为了最关键的技能。通过本文,您将全面掌握MySQL中7种JOIN操作,并学会如何在实际场景中…...
深入浅出数据库规范化的三大范式
数据库的“成长之路”:从1NF到3NF的规范化进化 在数据库的世界里,关系模式就像一个“孩子”,需要一步步学习“规矩”,才能健康成长。今天,我们就来聊聊数据库的规范化历程——从第一范式(1NF)出…...
精益数据分析(39/126):SaaS与移动应用商业模式的关键要点剖析
精益数据分析(39/126):SaaS与移动应用商业模式的关键要点剖析 在创业和数据分析的探索之旅中,每一次深入研究不同的商业模式都是一次宝贵的学习机会。今天,依旧怀揣着与大家共同进步的期望,深入解读《精益…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.3 数据脱敏与安全(模糊处理/掩码技术)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据脱敏实战:从模糊处理到动态掩码的全流程解析4.3 数据脱敏与安全:模糊处理与掩码技术深度实践4.3.1 数据脱敏的核心技术体系4.3.1.1 技…...
nginx面试题
nginx 返回状态码413 Nginx 状态码 413 表示“请求实体过大”(Request Entity Too Large),意味着客户端发送的请求体大小超过了服务器允许的限制。 解决方法 修改 Nginx 配置文件: 找到 Nginx 配置文件,通常位于 /etc…...
flink rocksdb状态说明
文章目录 1.默认情况2.flink中的状态3.RocksDB4.对比情况5.使用6.RocksDB架构7.参考文章8.总结提示:以下主要考虑flink 状态永久存储 rocksdb情况,做一些简单说明 1.默认情况 当flink使用rocksdb存储状态时。无论是永久存储还是临时存储都可能会落盘写文件(如果没有配置存储…...
Linux | WEB服务器的部署及优化
一. web服务的常用知识 1.1 www www(World Wide Web):即为万维网,常被称为“全球信息广播”。它是一种基于超文本和HTTP协议,能够将文字、图形、影像以及声音等多媒体信息,通过超链接的方式组织在一起&…...
Nginx正反向代理与正则表达式
目录 一:正向代理 1.编译安装nginx 2.配置正向代理 二:反向代理 1.配置nginx七层代理 2.配置nginx四层代理 三:nginx 缓存 1.缓存功能的核心原理和缓存类型 2.代理缓存功能设置 四:nginx rewrite 和正则表达式 1.Nginx…...
字节:LLM自动化证明工程基准
📖标题:APE-Bench I: Towards File-level Automated Proof Engineering of Formal Math Libraries 🌐来源:arXiv, 2504.19110 🌟摘要 🔸大型语言模型(LLM)的最新进展在形式定理证明…...
豆包多轮对话优化策略:上下文理解与记忆,意图识别,对话管理
豆包多轮对话优化策略:上下文理解与记忆,意图识别,对话管理 上下文理解与记忆:我会分析每一轮用户输入的文本内容,理解其中的语义、意图和关键信息,并将这些信息与之前轮次的对话内容相结合,形成对整个对话上下文的理解和记忆。例如,在一个关于旅游规划的对话中,用户先…...
ADK 第四篇 Runner 执行器
智能体执行器 Runner,负责完成一次用户需求的响应,是ADK中真正让Agent运行起来的引擎,其核心功能和Agents SDK中的Runner类似,具体作用如下: 会话管理:自动读取/写入 SessionService,维护历史信…...
yolo 用roboflow标注的数据集本地训练 kaggle训练 comet使用 训练笔记5
本地训练 8gb内存,机械硬盘用了4分钟训练完了 ........... model torch.hub.load(path/to/yolov5, custom, path./runs/train/exp10/weights/best.pt, sourcelocal) 连不上github kaggel训练 传kaggle了 # Train YOLOv5s on COCO128 for 3 epochs !python train…...
chili3d笔记11 连接yolo python http.server 跨域请求 flask
from ultralytics import YOLO from flask import Flask, request, jsonify from flask_cors import CORS import base64 from io import BytesIO from PIL import Image import json# 加载模型 model YOLO(./yolo_detect/best.pt)app Flask(__name__) CORS(app) # 启用跨域…...
安全为上,在系统威胁建模中使用量化分析
*注:Open FAIR™ 知识体系是一种开放和独立的信息风险分析方法。它为理解、分析和度量信息风险提供了分类和方法。Open FAIR作为领先的风险分析方法论,已得到越来越多的大型组织认可。 在数字化风险与日俱增的今天,企业安全决策正面临双重挑战…...
STA中的multi_cycle 和false_path详细讨论
特殊路径:跨时钟域下的exception_path:分为多种情况优先 1、不同clk_domain ,但频率相同 create_clock -name CLKM -period 10 -waveform {0 5} [get_ports CLKM] create_clock -name CLKP -period 10 -waveform {0 5} [get_ports CLKP] set_multicycl…...
Vite 的工作流程
Vite 的工作流程基于其创新的 “预构建 按需加载” 机制,通过利用现代浏览器对原生 ES 模块的支持,显著提升了开发效率和构建速度。以下是其核心工作流程的详细分析: 一、开发环境工作流程 1. 启动开发服务器 冷启动:通过 npm …...
NGINX 的 ngx_http_auth_jwt_module模块
一、模块概述 ngx_http_auth_jwt_module 模块用于通过验证请求中提供的 JWT 来进行客户端授权。此模块支持 JSON Web 签名(JWS)、JSON Web 加密(JWE)以及嵌套 JWT(Nested JWT),使其成为一种灵活…...
【Game】Powerful——Transformation Card(10)
文章目录 1 级卡片2 级卡片3 级卡片4 级卡片5 级卡片6 级卡片7 级卡片8 级卡片8.1、神兽8.2、珍兽 9、其他9.1、5 级变身卡9.2、8 级变身卡 10、PK 汇总物理 11、卡片合成 1 级卡片 千变万化等级要求:1 级 金钱龟,防御30⬆ 大耳兔,速度15⬆…...
【算法学习】递归、搜索与回溯算法(一)
算法学习: https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言: 这个专题与前面的相比是比较有难度的,但是在平时刷题时出现的概率还是非常高的,下面还是按照之前的逻辑来理清一下这几道…...
发行基础:上传版本注意事项
1、steam的规则是上传,提审,随时可更新。 2、基本流程:根据app id以及depot id,上传本地游戏文件到服务器,把分支版本设置为默认,发布。 试玩版与正式版的app id与depot id是相互独立的。 3、理论上开发者…...
智算中心建设方案和前景分析
智算中心建设方案和前景分析 一、智算中心的概念与重要性 1.1 定义与内涵 智算中心,即智能计算中心,是基于最新人工智能理论,采用领先的人工智能计算架构,专门为人工智能应用提供所需的算力服务、数据服务和算法服务的新型基础…...
亚马逊卖家复刻案例:用社群分层策略实现海外用户月均消费3.2次
近年来,随着跨境电商市场的快速发展,全球消费模式经历深刻变革。尤其是在美国、欧洲等成熟市场,中小卖家面对高度市场集中和运营成本上升的双重压力,纷纷寻求以更精细化的用户运营来提高客户复购率,增加单用户价值。20…...
小刚说C语言刷题—1038编程求解数学中的分段函数
1.题目描述 编程求解数学中的分段函数。 …………x1 (当 x>0 )。 yf(x)…0 (当 x0 )。 ………x−1 (当 x<0 )。 上面描述的意思是: 当x>0 时 yx1 ; 当 x0 时 y0 ; 当 x<0 时 yx−1 。 输入 输入一行,只有一个整数x(−30000≤x≤30…...
kotlin 03flow-stateFlow和sharedFlow企业中使用
一 stateFlow和sharedFlow企业中使用 在企业级 Kotlin 项目中,StateFlow 和 SharedFlow 是 状态管理 与 事件分发 的核心工具,尤其在 MVVM 架构中扮演着极为关键的角色。 ✅ 企业中如何使用 StateFlow 和 SharedFlow 场景工具示例UI 状态同步ÿ…...
【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码)
【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码) 【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码) 文…...
Kotlin-空值和空类型
变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象 在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题 Kotlin中所有的类型默认都是…...
Java 企业级开发设计模式全解析
Java 企业级开发设计模式全解析 在 Java 企业级开发的复杂领域中,设计模式如同精湛的工匠工具,能够帮助开发者构建高效、可维护、灵活且健壮的软件系统。它们是无数开发者在长期实践中总结出的解决常见问题的最佳方案,掌握这些模式对于提升开…...
高并发内存池
文章目录 前言一、项目介绍二、内存池介绍1.池化技术2.内存池3.malloc视角下内存的管理 三、定长内存池3.1 设计思路3.2 数据结构 四、高并发内存池整体框架设计4.1 thread cachethreadcache哈希桶映射对齐规则threadcache TLS无锁访问 4.2 central cachecentral cache结构设计…...
常用对称加密算法的Python实现及详解
文章目录 **常用对称加密算法的Python实现及详解****1. 对称加密概述****1.1 对称加密的基本原理****1.2 对称加密的分类****1.3 对称加密的应用** **2. DES(Data Encryption Standard)****2.1 算法原理****2.2 Python实现****2.3 安全性分析** **3. 3DE…...
ByteArrayInputStream 类详解
ByteArrayInputStream 类详解 ByteArrayInputStream 是 Java 中用于从字节数组读取数据的输入流,位于 java.io 包。它允许将内存中的字节数组当作输入流来读取,是处理内存数据的常用工具。 1. 核心特性 内存数据源:从字节数组(b…...
MySQL C API高效编程:C语言实现数据库操作的深入解析
知识点【MySQL C API】 1、头文件及MYSQL * 句柄 //头文件 #include <mysql/mysql.h>1、MYSQL MYSQL是一个结构体,封装了与数据库连接相关的所有状态,配置和数据。 2、MYSQL *的本质 类似于 FILE*,代表一个与数据库连接的通道&…...
字符串,数组,指针之间的关系
在C语言中,字符串、指针和数组之间有着紧密且复杂的关系,它们在内存存储、操作方式等方面相互关联,以下为你详细介绍: 字符串 定义:字符串是由字符组成的序列,以空字符(\0)作为结束…...
2025流感疫苗指南+卫健委诊疗方案|高危人群防护+并发症处理 慢性肾脏病饮食指南2025卫健委版|低盐低磷食谱+中医调理+PDF 网盘下载 pdf下载
2025 年卫健委发布的《成人肥胖食养指南(2024 年版)》为减肥提供了科学的饮食指导。 📢提示:文章排版原因,资源链接地址放在文章结尾👇👇,往下翻就行 📢提示࿱…...
学习路线(机器人软件架构)
机器人软件系统架构从入门到专家学习路线 一、基础阶段(6-12个月)基础知识储备机器人基础概念:编程技能必备语言:工具链: 入门框架推荐资源: 中级阶段(1-2年)系统架构基础ROS进阶架构…...
Stellaris 群星 [DLC 解锁] CT 表 [Steam] [Windows SteamOS macOS]
Stellaris 群星 [DLC 解锁] & CT 表 [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明; DLC 解锁列表(仅供参考) 《群星》 - Symbols of Domina…...
题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置
题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置 时间限制: 2s 内存限制: 192MB 提交: 673 解决: 130 题目描述 画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作,其艺术价 值分别为 A1, A2, . . . , AN。他们需要从这 N 幅画中挑选 M 幅,并…...
Excel 查询之 iNDEX与MATCH组合
在Excel日常工作中,数据查询是最常见的操作之一。虽然VLOOKUP函数广为人知,但它有一个明显的局限性——要求查询值必须位于返回值的左侧。今天我要介绍一个更灵活、更强大的组合:INDEX和MATCH函数。 为什么选择INDEXMATCH? VLOO…...
【Leetcode 每日一题 - 补卡】1128. 等价多米诺骨牌对的数量
问题背景 给你一组多米诺骨牌 d o m i n o e s dominoes dominoes。 形式上, d o m i n o e s [ i ] [ a , b ] dominoes[i] [a, b] dominoes[i][a,b] 与 d o m i n o e s [ j ] [ c , d ] dominoes[j] [c, d] dominoes[j][c,d] 等价 当且仅当 ( a c a c …...
【Elasticsearch入门到落地】12、索引库删除判断以及文档增删改查
接上篇《11、RestClient初始化索引库》 上一篇我们完成了使用RestHighLevelClient创建索引库的代码实现,本篇将讲解如何判断索引库是否存在并删除它,以及如何对索引库中的文档进行增删改查操作。 一、索引库判断与删除 在操作索引库时,有时…...
36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法
在C#中,params、ref 和 out 是方法声明中用于修饰参数的关键字,它们各自有不同的用途和语义。以下是它们的详细说明和用法: 1、 params 关键字 意义 params 允许方法接受可变数量的参数,这些参数会被编译为一个数组。适用于参数…...
DEX平台引领风尚 XBIT让数字资产回归简单与透明
近日,全球加密货币市场持续升温,Dex 交易平台成为众多投资者关注焦点,其中XBIT去中心化交易所平台凭借独特优势脱颖而出。 图片来源:币界网 在当今加密货币领域,交易平台的安全性与便捷性至关重要。XBIT去中心化交易所…...
基于Python+MongoDB猫眼电影 Top100 数据爬取与存储
前言:从猫眼电影排行榜页面(TOP100榜 - 猫眼电影 - 一网打尽好电影 )爬取 Top100 电影的电影名称、图片地址、主演、上映时间和评分等关键信息,并将这些信息存储到本地 MongoDB 数据库中,🔗 相关链接Xpath&…...