外链论坛

 找回密码
 立即注册
搜索
查看: 23|回复: 2

fastadmin前台getshell漏洞 | 实战

[复制链接]

3030

主题

210

回帖

9777万

积分

论坛元老

Rank: 8Rank: 8

积分
97779012
发表于 2024-10-10 04:07:48 | 显示全部楼层 |阅读模式

因为微X公众号推送机制改变了,快来星标

再也不迷路,谢谢大众

影响版本:

V1.0.0.20180911_beta - V1.0.0.20200506_beta

日前看官方4天了,还修复

漏洞代码位置:

https://github.com/karsonzhang/fastadmin/blob/master/application/index/controller/User.php

漏洞披露信息:https://github.com/karsonzhang/fastadmin/issues/73?spm=a2c4g.11174386.n2.3.428c1051tmy0pT

============================================

官方发布信息了:https://www.fastadmin.net/news/83.html

==========================

漏洞利用要求

usercenter=>true

漏洞分析:

 

 存在漏洞文件位置:

application/index/controller/User.php

/** * 空的请求 * @param $name * @return mixed */public function _empty($name){ $data = Hook::listen("user_request_empty", $name); foreach($dataas $index => $datum) { $this->view->assign($datum); } return $this->view->fetch(user/ . $name);}_empty函数接收$name遍历,直接将$name返回视图中:return $this->view->fetch($name);攻击者可经过上传文件,例如照片,传入$name,fetch模板进行php模板解析,引起getshell。

渲染fetch实质运用的是thinkphp的解析模板函数,内容如下:

public function fetch($template, $data = [], $config = []){ if ( == pathinfo($template, PATHINFO_EXTENSION)) { // 获取模板文件名 $template = $this->parseTemplate($template); } // 模板不存在 抛出反常 if (!is_file($template)) { throw newTemplateNotFoundException(template not exists: . $template, $template); } // 记录视图信息 App:debug && Log::record([ VIEW ] . $template . [ . var_export(array_keys($data),true) . ], info); $this->template->fetch($template, $data, $config);    }

在验证是不是为模板文件,能够看到if (!is_file($template)) ,来判断是不是存在,倘若存在就将文件进行php解析。

这儿有一个小问题:

关于操作系统解析文件路径的时候,linux和windwos is_file()函数实现不同样

1、linux判断is_file() /demo/../../../../test 倘若demo目录不存在,就会返回false;

    windows下无论这个目录是不是存在,均会返回true;

2、在linux下,is_file()函数判可用于判断符号链接

3、在linux下,is_file函数会受到权限的影响,当前用户权限不足或父目录设置+x权限时,is_file()会返回false

4、windows系统里面/和\ 都能够运用然则在linux下只能运用/ 来分隔路径,因此呢这会引起is_file()在区别系统下的返回结果不一致

5、is_file()判断文件时,倘若文件体积超过2^32时,会判断失败(PHP 的整数类型是有符号整型况且非常多平台运用 32 位整型,对 2GB 以上的文件,有些文件系统函数可能返回没法预期的结果)

能够参考https://www.php.net/manual/zh/function.is-file.php

实验如下:

漏洞验证:

 用户登录,进入个人页面,修改上传照片

 brup:

获取到的位置

 payload:

http://www.demo.com/index.php/index/user/_empty?name=../../public/uploads/xxxxx/xxxxx.jpg

因is_file()在linux下/user目录不存在,因此没法利用,除非能够创建或存在,能够手工创建public下创建user目录

windows下通杀。 

修复方法

打开application/index/controller/User.php,找到大概第58行的_empty办法,有以下两种修复办法

一种修复办法是直接移除_empty办法

另一种是将_empty办法改为

public function _empty($name){ if (!preg_match("/^([a-z0-9_]+)$/i", $name)) { $this->error(__(Invalid parameters)); }$data = Hook::listen("user_request_empty", $name); foreach ($data as $index => $datum) { $this->view->assign($datum); } return $this->view->fetch(user/ . $name); }

这个方法设计的用途重点是用于插件系统,便于插件研发者在处理前台用户关联信息时能够直接运用index/user/custommethod的URL方式拜访到自定义的视图,便于共用布局和JS。

https://www.cnblogs.com/sevck/p/13723094.html

付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各样资料文档+各样工具+付费会员

进成员内部群

星球的近期主题和星球内部工具有些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666能够领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明因为传播、利用本公众号渗透安全团队所供给的信息而导致的任何直接间接的后果及损失,均由运用自己负责,公众号渗透安全团队及作者不为承担任何责任,一旦导致后果请自动承担!如有侵权烦请通知咱们会立即删除并致歉。谢谢!好文分享保藏赞一下最美点在看哦




上一篇:fastadmin框架结合bootstrap-treegrid数据渲染更直观
下一篇:接单必须神器FastAdmin系列二,一键CRUD
回复

使用道具 举报

3062

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139046
发表于 2024-10-14 10:12:15 | 显示全部楼层
seo常来的论坛,希望我的网站快点收录。
回复

使用道具 举报

2999

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109184
发表于 2024-11-15 06:35:40 | 显示全部楼层
你的见解独到,让我受益匪浅,非常感谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 15:39 , Processed in 0.132530 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.