大概是对下面内容里面如何拿到用户cookie的一个理解
CrushFTP Critical Vulnerability CVE-2023-43177 Unauthenticated Remote Code Execution - Converge Technology Solutions (convergetp.com)
官网公告的43177修复方式 限制了加载jar包的目录,是从后台修的。
重点好奇一下前台怎么登进去
从描述感觉第一个洞利用应该是任意文件读取,读取sessions.obj 获取里面存储的登录用户的cookie信息。
来实际看看
这里idea反编译不出来,用jd-gui看的,这里buildPostItem函数会遍历传入的header头信息,然后分装到as2Info中,而判断是否是as2Info的条件就是header中有as2-to 且值不为空就可以进入到as2-to的信息处理中了
putAll会将as2-to 信息传入覆盖掉user_info
uiSG函数
开头文章提到了,从访问日志看第一次访问给的未登录cookie是anonymous权限的从而可以利用as2去覆盖一些值。这里搜索产生的日志也可以验证这一点。
流程分析
对于已有用户信息的user_info 他会调用sharedsession的find方法
首先init会从sessions.obj文件中去读取然后反序列化 获取已有的user_info
sessions.obj文件是crushftp初始化的时候就创建的文件,不被占用可以随便删除,它隔一段时间会自动生成新的。
在正常请求流程中ServerSessionHTTP调用buildPostItem可以利用as2-to 将header中的值赋值给user_info
在后面的调用流程中writeResponse会在返回前调用drain_log函数
这里user_log_path_custom不为空,则会进行文件复制移动然后删除的操作。
通过调试发现user_log_path_custom:123 参数传入的值,会被user_info赋值给user_log_path 也就是上一次文件的值。
那么发起两次请求,传入两次user_log_path_custom,把文件进行移动
由于user_log_file会生成后缀拼接在path后面,我们让user_log_file的值为空即可控制想要移动的任意文件。
比如将sessions.obj移到web根目录就可以访问到了。
原文始发于微信公众号(FXDSecurity):CrushFTP CVE-2023-43177
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论