freeBuf
你看:BC站文件上传漏洞分析
2024-05-11 14:51:46

近期在某平台上监控了一些POC之类的,后续发现了一个公开的POC,所以根据这个POC去尝试了一下复现,分别也针对这个漏洞问题进行了分析,这个盘的源码都是网上下载的搭起来用的,站的源码都还带着广告!对于经常搞这些的朋友们,肯定觉得无所谓,所谓就是开单吃一年,不开单饿死!

1715398723_663ee843a180e48e7eee1.png!small

一、WebUploader组件

WebUploader属于一个比较老的组件,该组件在19年的时候是出现过文件上传的漏洞问题,像类似文件上传组件几乎都存在一定的过滤不严的问题,那么今天我们先简单了解/webuploader这个组件文件上传的漏洞!

找到组件源码后,我们简单的给它过一遍吧,既然有源码就少不了流程,seay审计工具跑一遍!

1715402993_663ef8f1dad0349cfeaca.png!small

在漏洞详细也是截图的右列我们也看到扫描出来的,可能存在:文件操作函数中存在变量,可能存在任意文件读取/删除/修改/写入等漏洞,你在看的同时你也会发现/webuploader-master/server/preview.php中的file_put_contents($filePath, $data);函数代码串是和其它的代码函数都非常的特别。

1715403181_663ef9ada81ec686b8c35.png!small

我们先来了解这个PHP函数,在PHP官方提供了一个很方便的函数叫做file_put_contents()来帮助我们做这件事情。它的用法很简单,你只需要告诉它要保存的文件名和要写入的内容,它就会帮你把内容写入文件里。

语法:file_put_contents(string $filename, mixed $data, int $flags = 0, resource $context = null): int|false

  • $filename:要写入的目标文件名或路径。
  • $data:要写入的数据,可以是字符串、数组或者其他可写入的数据类型。
  • $flags:可选参数,用于指定写入数据时的行为选项,比如追加到文件末尾等。
  • $context:可选参数,通常用于传递文件处理的上下文资源。

这里来一个正常栗子:

$data = "Hello, world!";
$filename = "example.txt";

// 将数据写入文件
$result = file_put_contents($filename, $data);

if ($result !== false) {
echo "数据成功写入文件";
} else {
echo "写入文件失败";
}

在这个例子中,我们把字符串"Hello, world!"写入到了名为example.txt的文件中。如果写入成功,file_put_contents()函数会返回写入文件的字节数。如果写入失败,它会返回false

这里来一个使用不当的栗子(涉及文件路径注入漏洞):

$data = "Hello, world!";
$filename = $_GET['filename']; // 从用户输入获取文件名

// 将数据写入文件
$result = file_put_contents($filename, $data);

if ($result !== false) {
echo "数据成功写入文件";
} else {
echo "写入文件失败";
}

在这个例子中,程序从用户的输入$_GET['filename']获取文件名,然后直接传递给file_put_contents()函数。如果攻击者能够控制filename参数,并且传入一个恶意的文件路径,就可能导致文件路径注入漏洞的发生。例如,攻击者可以将文件名设置为../../../etc/passwd,从而尝试读取系统的密码文件。

二、preview.php文件分析

通过第一章节,我们已经了解过漏洞的主要的一些风险函数,接下来我们分析整个/webuploader-master/server/preview.php文件,其实整个文件也是特别的容易上手,先看整体代码片段,先让自己有个底和感觉。首先,这个文件上传漏洞用的是什么方法进行上传?又怎么绕过?

1715404343_663efe37ce397806b0da5.png!small

<?php
/**
* 此页面用来协助 IE6/7 预览图片,因为 IE 6/7 不支持 base64
*/

#!! 注意
#!! 此文件只是个示例,不要用于真正的产品之中。
#!! 不保证代码安全性。
#!! IMPORTANT:
#!! this file is just an example, it doesn't incorporate any security checks and
#!! is not recommended t

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏