非常抱歉,不知道是哪位大佬写的文章。 我先把内容备份在这里,大佬等下来认领一下。
以下是大佬原文
Flarum这程序我完全没玩过。我只能简单说说。
以前在看雪论坛瞎逛的时候,经常看见有大佬“赞扬”PHP是漏洞王。不少内网渗透大佬就是被PHP养活的。
和"小学生"不同,你看在论坛发帖研究ddos和cc攻防,其实我是在这个领域知之甚少,所以才研究的。我了解渗透比ddcc多一些。
渗透防御,最经常遇到的就是“某X”放大话说要“日你站”,结果他日不下来,于是对你的站进行ddcc。“既然日不了,就打你,让你也无法用”,于是开始研究ddcc这些的。
来这里的乐趣,就是看着站长被打,然后帮站长出主意,同时学习一些防御技术。
首先先说几个普遍的点
根据多年的经验,web服务器,除了nginx的漏洞最少,其他服务器漏洞挺多了(OpenLiteSpeed没用过),尤其是加载apache这种加载外部组件越多的,漏洞越多。
(apache你禁止上传php,他可以上传php5。你禁止上传php5,他可以上传php3。你禁止上传php3,他上传php/x00/x0a截断符。你禁止php*,他直接上传.htaccess,让jpg以php格式执行),特别难防
第二,php尽量使用fastCGI方式执行,不要使用LSAPI或者内置于web server lib.so的方式,这种很容易造成安全问题,比如内存安全,逻辑安全等等。
fastCGI可以动静态分离,只用不犯傻,配置了错误的$.php执行规则。基本上别人上传的文件直接以静态处理,就不会照成别人恶意上传的php被执行。
我简单说下Flarum,问题,其实这个我研究的很少的。
Flarum最新的漏洞库为CVE-2024-21641,允许任何第三方重定向到任意链接。暂时不知道如何使用。
首先是文件上传功能,Flarum仅有三处支持文件上传的逻辑,分别是网站Logo、Favicon和用户头像……是的,作为一个论坛社区,发帖默认不支持上传附件和图片,需要安装扩展来实现。可以排查。
但是
看了一下三处图片上传的代码,文件名无法控制,后缀写死成.png,文件内容也会使用GD库转换成png格式保存,基本上是水泄不通的。比如这是上传用户头像的部分代码:
/**
* @param User $user
* @param Image $image
*/
public function upload(User $user, Image $image)
{
if (extension_loaded('exif')) {
$image->orientate();
}
$encodedImage = $image->fit(100, 100)->encode('png');
$avatarPath = Str::random().'.png';
$this->removeFileAfterSave($user);
$user->changeAvatarPath($avatarPath);
$this->uploadDir->put($avatarPath, $encodedImage);
}
如果自己没用瞎搞,插件没用修改的话。
Flarum没有动态执行用户传入的类和函数,而是通过router的方式分发路由,比如:
return function (RouteCollection $map, RouteHandlerFactory $route) {
// Get forum information
$map->get(
'/',
'forum.show',
$route->toController(Controller\ShowForumController::class)
);
......
}
可以排查一下这里
反序列化漏洞
经过分析,Flarum中存在反序列化的有两个地方,一是session,二是缓存
Flarum有个有趣的地方是其支持Less语法。
Less是一个完全兼容CSS的语言,并在CSS的基础上提供了很多高级语法与功能,比如CSS中不支持的条件判断与循环,相当于是CSS语言的超集。前端开发者使用Less编写的程序,可以通过编译器转换成合法的CSS语法,提供给浏览器进行渲染。
Flarum使用了less.php这个第三方库来编译Less,在其README页面很容易看到下面这段警告:
[链接登录后可见].php
The LESS processor language is powerful and includes features that may read or embed arbitrary files that the web server has access to, and features that may be computationally exensive if misused.
In general you should treat LESS files as being in the same trust domain as other server-side executables, such as PHP