当前位置: 首页 > news >正文

upload-labs靶场通关详解:第11关

一、分析源代码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;        if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

这一关仍然是黑名单过滤,但是它的代码和前几关都不一样, 它这里有一行核心代码,就是

$file_name = str_ireplace($deny_ext,"", $file_name);

str_ireplace是 PHP 内置函数,用于执行不区分大小写的字符串替换。

语法:str_ireplace(要查找的数组, 替换值, 输入字符串)

这行代码的执行逻辑就是:

1.遍历$deny_ext数组中的每个扩展名;

2.在$file_name中查找匹配项(不区分大小写);

3.将所有匹配的扩展名替换为空字符串(即删除)。

典型处理示例

原始文件名处理后文件名说明
shell.phpshell.直接移除.php扩展名
shell.php.jpgshell.jpg仅移除第一个扩展名
shell.php5shell.移除 PHP 旧版本扩展名
SHELL.PHPshell.大小写不敏感替换
.htaccess.移除服务器配置文件
exploit.jsp.asaxexploit.同时移除多个危险扩展名

二、解题思路

现在我们知道它可以删除黑名单中的扩展名,那么这关的代码是否存在逻辑漏洞呢?联想第10关结合绕过的方式,是否可以再尝试多次绕过呢?如果我上传文件的后缀名为pphphp,代码从第一位字母p开始读取,读到2-4位的时候发现这三位字母是php,于是将它替换成空白字符(删除),这看起来没什么问题,代码执行下一步,构建路径上传文件。但是,这里的pphphp在php被删除后,后缀只剩下了php,然后被上传,从而构成了文件绕过,这就是双写绕过。

三、解题步骤

1.上传666.php并抓包,修改后缀为pphphp。

2.放行后显示文件上传成功,被保存为666.php。

3.解析测试。

http://www.dtcms.com/a/200555.html

相关文章:

  • Java后端面试八股文大全(2025最新版)
  • 【八股战神篇】Java多线程高频面试题(JUC)
  • MongoDB及spring集成
  • SGLang和vllm比有什么优势?
  • 本案例介绍ABB电机保护单元如何走profibus总线通讯
  • stm32week16
  • MIME类型详解及应用案例
  • 【QT】一个界面中嵌入其它界面(二)
  • 数据库存储空间告急?磁盘清理与归档策略全解析
  • docker介绍与常用命令汇总
  • 火山 RTC 引擎9 ----集成 appkey
  • BM25(Best Matching 25)介绍与使用
  • 基于Zynq SDK的LWIP UDP组播开发实战指南
  • 对抗性机器学习:AI模型安全防护新挑战
  • 在linux平台下利用mingw64编译windows程序
  • 码蹄集——N是什么、棋盘
  • 冒泡排序详解
  • thinkphp6实现统一监听并记录所有执行的sql语句除查询外
  • Unity使用sherpa-onnx实现说话人识别
  • DS1302实时时钟模块
  • Java-List集合类全面解析
  • CSS- 4.5 css + div 布局 简易网易云音乐 官网布置实例
  • 「NameCraft · 幻想命名器」开发记:我和 CodeBuddy 的一次奇幻共创之旅
  • 易境通散货拼柜系统:提高货代企业货物配载效率
  • CEF源码历史版本编译避坑指南
  • JSON学习笔记
  • 视频监控中的存储方式有哪些?EasyCVR视频监控汇聚平台如何打造高效监控存储
  • 【STM32】ST-Link V2.1制作
  • 【CF】Day62——Codeforces Round 948 (Div. 2) CD (思维 + LCM + 枚举因数 | 思维 + 哈希)
  • Amazon Q 从入门到精通 – 测试与重构