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

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

一、分析源代码

代码注释如下:

<?php
// 初始化上传状态和消息变量
$is_upload = false;
$msg = null;// 检查是否通过POST方式提交了表单
if (isset($_POST['submit'])) {// 检查上传目录是否存在if (file_exists(UPLOAD_PATH)) {// 定义禁止上传的文件扩展名列表(包含常见的脚本文件类型)$deny_ext = array('.asp','.aspx','.php','.jsp');// 获取上传文件的原始名称$file_name = trim($_FILES['upload_file']['name']);// 调用自定义函数删除文件名末尾的点(某些系统允许文件名以点结尾,但可能被解析为其他类型)$file_name = deldot($file_name);// 获取文件扩展名(包含点)$file_ext = strrchr($file_name, '.');// 将扩展名转换为小写(确保扩展名检查不区分大小写)$file_ext = strtolower($file_ext);// 去除Windows文件流标记(例如.php::$DATA会被解析为.php文件)$file_ext = str_ireplace('::$DATA', '', $file_ext);// 去除扩展名前后的空白字符$file_ext = trim($file_ext);// 检查文件扩展名是否不在禁止列表中if(!in_array($file_ext, $deny_ext)) {// 获取临时上传文件的路径$temp_file = $_FILES['upload_file']['tmp_name'];// 生成目标文件路径(使用时间戳+随机数确保文件名唯一性)$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;// 将临时文件移动到指定的上传目录if (move_uploaded_file($temp_file, $img_path)) {// 上传成功$is_upload = true;} else {// 上传失败(可能是权限问题或临时目录配置错误)$msg = '上传出错!';}} else {// 上传的文件类型被禁止$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';}} else {// 上传目录不存在$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
?>

通过代码注释可以得出,这关是黑名单验证,不允许上传.asp,.php,.jsp等后缀文件,并且对上传的文件进行了处理,比如删除末尾的点,转换大小写等,并且将上传的文件重命名后再移动到指定的目录。

二、解题思路

我们可以尝试修改后缀名的方式来绕过验证。在php5.2.17版本中,可以通过修改配置文件完成相关操作。

AddType application/x-httpd-php .php .phtml .php3 .php4 .php5是一条 Apache HTTP 服务器配置指令,用于告诉服务器将特定文件扩展名(如 .php、.phtml、.php3、 .php4 、.php5)的文件识别为 PHP 脚本,并使用 PHP 解释器进行处理。

通俗意思就是你上传的xxx.php3文件,服务器会当成xxx.php文件来执行。

三、解题步骤

1.修改配置文件,找到htttpd-conf这个配置文件,在里面添加一条数据,保存并退出。如下:

 AddType application/x-httpd-php .php .phtml .php6

2.将一句话木马的后缀改成php6,然后尝试上传文件,结果显示上传成功。

3.找到上传后的木马文件路径,验证是否可以使用。

检查网页代码,通过html标签找到文件路径,或者直接右击,复制图片地址。

去文件目录下执行,成功。

相关文章:

  • 力扣刷题(第二十一天)
  • 设置GO程序在离线情况下读取本地缓存的模块
  • 红黑树算法笔记(一)
  • 【C/C++】C++中noexcept的妙用与性能提升
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.1)
  • SaaS数据备份器-电商企业数据采集与整合的高效助手
  • Linux——多线程
  • 电厂数据库未来趋势:时序数据库 + AI 驱动的自优化系统
  • 用 Rust 搭建一个优雅的多线程服务器:从零开始的详细指南
  • Linux 一键部署chrony时间服务器
  • Java中的包装类
  • Knife4j文档的会被全局异常处理器拦截的问题解决
  • 三个线程 a、b、c 并发运行,b,c 需要 a 线程的数据如何解决
  • Edu教育邮箱申请成功下号
  • SSTI模版注入
  • 【日撸 Java 三百行】Day 9(While语句)
  • 让模型具备“道生一,一生二,二生三,三生万物”的现实实用主义能力
  • SPL量化---SMA(算术移动平均)
  • LLM 推理加速:深度解析 Prefilling 与 Decoding 阶段的优化秘籍
  • 全球首套100米分辨率城市与农村居住区栅格数据(2000-2020)
  • 西甲上海足球学院揭幕,用“足球方法论”试水中国青训
  • 中非民间对话在赞比亚举行
  • 习近平出席俄罗斯纪念苏联伟大卫国战争胜利80周年庆典
  • 马克思主义理论研究教学名师系列访谈|董雅华:让学生感知马克思主义理论存在于社会生活中
  • 江苏省人社厅党组书记、厅长王斌接受审查调查
  • 国家主席习近平同普京总统共见记者