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

文件上传全详解

前言

我们下面进行下一个漏洞——文件上传的学习。文件上传是常见漏洞之一,是Web安全必学漏洞。为探讨清楚文件上传漏洞的诸多细节,我们特以经典的upload-labs进行从入门到进阶的专项训练

作者进行upload-labs靶场练习时,在环境配置上出了很多问题,吃了很多苦头。为了防止大家踩坑,也为了节省大家的时间,在这里直接给出最简单最有效的配置方法,请见下文。

upload-labs安装与配置:upload-labs安装与配置-CSDN博客

本文是经由upload-labs训练总结而来,所以配合作者的upload-labs通关全详解食用更佳(怎么可以光学习不训练呢)

 upload-labs通关:upload-labs通关-CSDN博客

前置知识

这里大家最好还要有一些php基础,能大概读懂代码就可以;至于html之类的,大家经过之前的学习已经满足要求了。

文件上传基础

定义

文件上传是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件。

文件上传漏洞是指用户利用文件上传功能上传了一个可以执行的脚本文件,并且可以通过该文件获得服务器的权限的一种漏洞。

说白了,文件上传漏洞就是用户通过上传恶意文件去入侵服务器的一种漏洞。这个恶意文件被称为webshell,也可以称为一种网页后门。

关于webshell

  • 拥有较完整功能的webshell,我们一般称为大马。
  • 功能简易的webshell称为小马。
  • 除此之外还存在一句话木马、菜刀马、脱库马等等的名词,是对于webShell功能或者特性的简称。

一句话木马

在upload-labs中我们主要用了一句话木马,故这里对一句话木马进行简单解析。

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

<?php ……?>是PHP标记,代表着这是一句PHP代码

eval()在PHP手册里的解释:

$_POST[]其实是一种全局变量

这样我们就可以综合起来看这一句话木马的含义,其实就是一句PHP代码,收集所有用POST方法传递的key的值(这个‘key’是我们任意起的名字),并将其执行

比如我们用POST方法传递一个key=phpinfo();

此时一句话木马就是<?php @eval(phopinfo(););?>

那么就会执行phpinfo()函数

然后我们还可以去进一步利用,比如通过system()函数,key=system(ipconfig);去查一下ip等等

不过最便捷的方法还是直接连接中国蚁剑,蚁剑必须要用$_POST的密码,这也是为什么我们优先用这个一句话木马。具体的连接方式请见upload-labs通关。

我们在upload-labs中还用到的

<?php @eval($_GET['key']);?>
<?php $_GET['function']($_GET['key']);?>

也都是同理。

文件上传详解

文件上传漏洞前提

  1. 文件可上传
  2. 上传路径可知
  3. 上传文件可以被解释执行或被包含

存在的风险点

所有存在文件上传的地方都可能存在相关的漏洞,都可以进行测试,比如说上传头像、上传身份认证等

文件上传测试思路及方法

对于上传点测试思路及其方法如下,

思路:

方法:

这两张图取自upload-labs出题者。

大家经过upload-labs训练,想必已经对上面的技术较为熟练了,不多赘述

参考文献

WEB入门——文件上传漏洞_htaccess文件上传漏洞-CSDN博客

文件上传漏洞全解析:策略、绕过与安全修复-CSDN博客


http://www.kler.cn/a/536980.html

相关文章:

  • source 与 shell 之详解(Detailed Explanation of Source and Shell)
  • WebAssembly:前后端开发的未来利器
  • 【医院绩效管理专题】2.绩效管理:医院发展的核心驱动力
  • .net的一些知识点6
  • 1-kafka服务端之延时操作前传--时间轮
  • 【1】高并发导出场景下,服务器性能瓶颈优化
  • 当春晚遇上AI,传统与科技的奇妙碰撞
  • 使用 Axios 进行高效的数据交互
  • 各种协议设计
  • (2025|Meta,LLM,token 压缩/挑选,离散潜在标记,VQ-VAE)混合潜在标记和文本标记以改进语言模型推理
  • 详解正则表达式与案例
  • DOMParser解析TikTok页面中的图片元素
  • C# 中 Guid类 使用详解
  • Python3+Request+Pytest+Allure+Jenkins 接口自动化测试[手动写的和AI写的对比]
  • 3. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--什么是微服务--微服务的核心特性与设计理念
  • UE求职Demo开发日志#23 线性任务系统数据层实现
  • zephyr devicetree
  • Android 多环境(生产、测试、开发)多域名网络配置
  • 一次报警了解:direct path read、enq: KO - fast object checkpoint
  • 【C语言】文件操作详解 - 从打开到关闭
  • STM32的HAL库开发---高级定时器---输出比较模式实验
  • Java 多线程、线程同步、线程池
  • C# LiteDB 使用教程
  • Qt实现简易音乐播放器
  • 脚手架开发【实战教程】prompts + fs-extra
  • MySQL视图索引操作