问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
由log4j攻击事件到泛微OA任意文件上传漏洞分析
渗透测试
漏洞分析
前段时间log4j远程代码执行漏洞可谓是掀起了一股浪潮,伴随而来的是接踵而来的应急,那天被客户一个电话紧急叫走了,到了现场查看了我司的流量设备,果不其然,捕获的攻击事件数据包显示已经被成功利用了。紧接着就是一系列的应急流程,通过公开的exp帮助客户检查了所有的资产,并协助其升级为了RC2版本。
 根据攻击者的poc显然是log4j的利用,对攻击源IP进行了溯源,微步情报显示为恶意IP,并且带有log4j的标识,显然就是攻击者的IP地址了   正当以为此次应急事件就此结束之时,在流量设备上搜索攻击者IP发现了另一起攻击事件,,根据攻击路径去进行溯源,结合搜索到的资料,发现是前不久微步公开捕获的泛微e-office任意文件上传漏洞  之后在征得同意之后登录到了这台winserver机器上,并找到了攻击者上传的恶意代码,下载到了本地,用微步沙箱进行检测确认为哥斯拉的马,之后协助进行了后门的清除。  紧接着进行了漏洞利用的复现,根据捕获的数据包,利用BurpSuite进行构造攻击,根据响应包输出的logo-eoffice.php,远程登录到机器上找到文件,可以看到已经成功写入了复现构造的恶意代码。   之后根据cnvd的通报到泛微官网下载了更新包打上了补丁,封堵漏洞入口。应急结束之后,和一个大哥提起这个漏洞,巧的是刚好有e-office的安装包,那就借此机会来分析一下。 ### 环境搭建 这里在安装的时候,如果本地有启php+mysql服务需要先关闭,安装程序在安装的时候会直接启动php+mysql,避免因为冲突导致mysql运行失败,数据库无法连接  漏洞分析 根据poc定位到漏洞点 `webroot\general\index\UploadFile.php` 调用的是UploadFile类中的`uploadPicture`方法  这里首先会对获取到的`$_FILES`数组进行判断,如果数组为空那么就不会接着往下,并且也不会有任何的异常抛出;调试可以发现数组中有五个键值对,包括上传时的文件名,临时文件名,文件的类型,大小以及是否有异常 接着`$uploadTyp`e获取到的是GET或者POST传参传递的`uploadType`值,并且下面的代码都与这个`uploadType`参数值直接相关,根据poc传入的`uploadType=eoffice_logo`,直接来看到对应的代码部分 `general\index\UploadFile.php#124`  跟进查看`$_SERVER['DOCUMENT_ROOT']`默认值为空,所以$targetPath=/images/logo/,之后会判断是否存在对应的路径,如果不存在就会创建相应的文件夹。自会后调用类中的`getFileExtension`方法,传入方法中的参数为前面提到过的二维数组中的文件名,跟进方法  调用strrpos来获取.在$file参数中最后出现的位置,之后调用substr来截取$file从$pos位置开始的所有字符串,简而言之就是获取到上传的文件名后缀 回到上面,接着往下 ```php $_targetFile = "logo-eoffice" . $ext; $targetFile = str_replace("//", "/", $targetPath) . "/" . $_targetFile; if (move_uploaded_file($tempFile, $targetFile)) ``` 这里会进行两次拼接最后拼接成上传的文件存储的路径和相应的文件名 后面可以看到调用`move_uploaded_file`方法将上传后临时保存的$tempFile移动到最后的$targetFile路径下面,后面的代码部分涉及到数据库操作,和这个漏洞并没有太大的关系。所以整个的漏洞分析就到这里了 利用poc来打一下   ### 漏洞修复 对比补丁包中的更新代码部分,对可以上传的文件后缀进行了限制。  此外通过审计Uploadfile类中uploadPicture方法中其他几种uploadType的代码,可以发现都是有相应的文件后缀白名单限制的。由此可以推测这里应该是开发人员的失误导致忘记添加白名单,也就造成了该任意文件上传漏洞,并且并不需要管理员权限。
发表于 2022-01-18 14:13:17
阅读 ( 16376 )
分类:
漏洞分析
4 推荐
收藏
0 条评论
请先
登录
后评论
苏苏的五彩棒
25 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!