问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CSZcms任意解压漏洞RCE
漏洞分析
一次简单的代码审计分析
官网 <https://www.cszcms.com/product/download> 下载地址 <https://jaist.dl.sourceforge.net/project/cszcms/install/CSZCMS-V1.3.0.zip> 安装过程 访问web目录,然后填下下面的表  登录后台   然后进入maintenance System中,选择文件进行上传  此时写一个test.php,然后压缩成.zip格式  上传成功  访问目录下的test.php,成功RCE  PS: 因为笔者是黑盒测完就立马审了,本文是边审边写的,所以一些临时文件名和随机数可能会上下文不一致,但不会影响审计逻辑与阅读 下面是代审环节,通过路由定位到install函数,在do\_upload函数前,是一些检测语句,比如194行判断是否登录,202行判断上传的是否是压缩包  进入到211行do\_upload函数中,先是405行判断了下路径是否能上传,然后412行判断文件是否可以上传  在do\_upload函数中继续往下跟,一些平常的赋值与正常的判断,获取了文件名与后缀  再往下走就可以看到上传点,这里是先用copy函数将存储的临时文件复制到正常的上传目录,如果不行的话再用move\_uploaded\_file进行上传  出来后,跟着逻辑往下走,进入到217行unzip->extract进行解压  然后进入到84行\_list\_files  在\_list\_files函数中,208行打开该压缩包  然后进入到216行\_load\_file\_list\_by\_eof函数,在404行获取到了压缩包的文件名   然后回到上级函数,将compressed\_list里面的参数继续return回去  这里有个循环,判断压缩包里的文件  继续往下走,进入到\_extract\_file函数中,其中用刚刚的compressed\_file\_name赋值给了$fdetails   往下走进入到\_uncompress函数中  最后,判断mode为8,通过三目运算符判断有值,即用file\_put\_contents写入文件  最后return回去文件地址  成功写入 
发表于 2024-04-25 10:07:06
阅读 ( 15832 )
分类:
漏洞分析
0 推荐
收藏
0 条评论
请先
登录
后评论
ZAC安全
5 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!