Test environment: SERV-U 4.1 & 5.0 & 5.004
Test result: the test is successful.
Test method:
After entering the plain text, click Submit, copy the hash in the text box below, paste it into the Serv-U's ServUDaemon. ini file, and restart the Serv-u service. To test whether the password is correct.
The test found that the account directly added in the INI file, you do not need to start the SERV-U to log on (Note: may be the author of the next "re" Go ), however, if you add some virtual directories at the same time, the virtual directory takes effect only when the server restarts.
In addition, if an error message is entered during INI modification, the user cannot log on. if the service is not restarted, the user cannot log on normally. solution:
Modify the user name and correct the configuration information to log on.
Asp code:
<%
Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32
Private m_lOnBits (30)
Private m_l2Power (30)
Private Function LShift (lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = & H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits <0 Or iShiftBits> 31 Then
Err. Raise 6
End If
If (lValue And m_l2Power (31-iShiftBits) Then
LShift = (lValue And m_lOnBits (31-(iShiftBits + 1) * m_l2Power (iShiftBits) Or & H80000000
Else
LShift = (lValue And m_lOnBits (31-iShiftBits) * m_l2Power (iShiftBits ))
End If
End Function
Private Function RShift (lValue, iShiftBits)
If iShiftBits = 0 Then
RShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And & H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits <0 Or iShiftBits> 31 Then
Err. Raise 6
End If
RShift = (lValue And & effecffffffe) m_l2Power (iShiftBits)
If (lValue And & H80000000) Then
RShift = (RShift Or (& H40000000 m_l2Power (iShiftBits-1 )))
End If
End Function
Private Function RotateLeft (lValue, iShiftBits)
RotateLeft = LShift (lValue, iShiftBits) Or RShift (lValue, (32-iShiftBits ))
End Function
Private Function AddUnsigned (lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult
LX8 = lX And & H80000000
LY8 = lY And & H80000000
LX4 = lX And & H40000000
LY4 = lY And & H40000000
LResult = (lX And & H3FFFFFFF) + (lY And & H3FFFFFFF)
If lX4 And lY4 Then
LResult = lResult Xor & H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And & H40000000 Then
LResult = lResult Xor & HC0000000 Xor lX8 Xor lY8
Else
LResult = lResult Xor & H40000000 Xor lX8 Xor lY8
End If
Else
LResult = lResult Xor lX8 Xor lY8
End If
AddUnsigned = lResult
End Function
Private Function md5_F (x, y, z)
Md5_F = (x And y) Or (Not x) And z)
End Function
Private Function md5_G (x, y, z)
Md5_G = (x And z) Or (y And (Not z ))
End Function
Private Function md5_H (x, y, z)
Md5_H = (x Xor y Xor z)
End Function
Private Function md5_ I (x, y, z)
Md5_ I = (y Xor (x Or (Not z )))
End Function
Private Sub md5_FF (a, B, c, d, x, s, ac)
A = AddUnsigned (a, AddUnsigned (md5_F (B, c, d), x), ac ))
A = RotateLeft (a, s)
A = AddUnsigned (a, B)
End Sub
Private Sub md5_GG (a, B, c, d, x, s, ac)
A = AddUnsigned (a, AddUnsigned (md5_G (B, c, d), x), ac ))
A = RotateLeft (a, s)
A = AddUnsigned (a, B)
End Sub
Private Sub md5_HH (a, B, c, d, x, s, ac)
A = AddUnsigned (a, AddUnsigned (md5_H (B, c, d), x), ac ))
A = RotateLeft (a, s)
A = AddUnsigned (a, B)
End Sub
Private Sub md5_II (a, B, c, d, x, s, ac)
A = AddUnsigned (a, AddUnsigned (md5_ I (B, c, d), x), ac ))
A = RotateLeft (a, s)
A = AddUnsigned (a, B)
End Sub
Private Function ConvertToWordArray (sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray ()
Dim lBytePosition
Dim lByteCount
Dim lWordCount
Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448
LMessageLength = Len (sMessage)
LNumberOfWords = (lMessageLength + (MODULUS_BITS-CONGRUENT_BITS) BITS_TO_A_BYTE) (MODULUS_BITS BITS_TO_A_BYTE) + 1) * (MODULUS_BITS bits_to_word a_word)
ReDim lWordArray (lNumberOfWords-1)
LBytePosition = 0
LByteCount = 0
Do Until lByteCount> = lMessageLength
LWordCount = lByteCount BYTES_TO_A_WORD
LBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
LWordArray (lWordCount) = lWordArray (lWordCount) Or LShift (Asc (Mid (sMessage, lByteCount + 1, 1), lBytePosition)
LByteCount = lByteCount + 1
Loop
LWordCount = lByteCount BYTES_TO_A_WORD
LBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
LWordArray (lWordCount) = lWordArray (lWordCount) Or LShift (& H80, lBytePosition)
LWordArray (lNumberOfWords-2) = LShift (lMessageLength, 3)
LWordArray (lNumberOfWords-1) = RShift (lMessageLength, 29)
ConvertToWordArray = lWordArray
End Function
Private Function WordToHex (lValue)
Dim lByte
Dim lCount
For lCount = 0 To 3
LByte = RShift (lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits (BITS_TO_A_BYTE-1)
WordToHex = WordToHex & Right ("0" & Hex (lByte), 2)
Next
End Function
Private Function MD5 (sMessage)
M_lOnBits (0) = CLng (1)
M_lOnBits (1) = CLng (3)
M_lOnBits (2) = CLng (7)
M_lOnBits (3) = CLng (15)
M_lOnBits (4) = CLng (31)
M_lOnBits (5) = CLng (63)
M_lOnBits (6) = CLng (1, 127)
M_lOnBits (7) = CLng (255)
M_lOnBits (8) = CLng (511)
M_lOnBits (9) = CLng (1, 1023)
M_lOnBits (10) = CLng (2047)
M_lOnBits (11) = CLng (4095)
M_lOnBits (12) = CLng (8191)
M_lOnBits (13) = CLng (1, 16383)
M_lOnBits (14) = CLng (32767)
M_lOnBits (15) = CLng (65535)
M_lOnBits (16) = CLng (131071)
M_lOnBits (17) = CLng (262143)
M_lOnBits (18) = CLng (1, 524287)
M_lOnBits (19) = CLng (1048575)
M_lOnBits (20) = CLng (2097151)
M_lOnBits (21) = CLng (4194303)
M_lOnBits (22) = CLng (1, 8388607)
M_lOnBits (23) = CLng (1, 16777215)
M_lOnBits (24) = CLng (33554431)
M_lOnBits (25) = CLng (67108863)
M_lOnBits (26) = CLng (134217727)
M_lOnBits (27) = CLng (268435455)
M_lOnBits (28) = CLng (536870911)
M_lOnBits (29) = CLng (1073741823)
M_lOnBits (30) = CLng (2147483647)
M_l2Power (0) = CLng (1)
M_l2Power (1) = CLng (2)
M_l2Power (2) = CLng (4)
M_l2Power (3) = CLng (8)
M_l2Power (4) = CLng (16)
M_l2Power (5) = CLng (32)
M_l2Power (6) = CLng (64)
M_l2Power (7) = CLng (128)
M_l2Power (8) = CLng (256)
M_l2Power (9) = CLng (512)
M_l2Power (10) = CLng (1024)
M_l2Power (11) = CLng (2048)
M_l2Power (12) = CLng (4096)
M_l2Power (13) = CLng (8192)
M_l2Power (14) = CLng (16384)
M_l2Power (15) = CLng (32768)
M_l2Power (16) = CLng (65536)
M_l2Power (17) = CLng (131072)
M_l2Power (18) = CLng (262144)
M_l2Power (19) = CLng (524288)
M_l2Power (20) = CLng (1048576)
M_l2Power (21) = CLng (1, 2097152)
M_l2Power (22) = CLng (4194304)
M_l2Power (23) = CLng (8388608)
M_l2Power (24) = CLng (16777216)
M_l2Power (25) = CLng (33554432)
M_l2Power (26) = CLng (67108864)
M_l2Power (27) = CLng (134217728)
M_l2Power (28) = CLng (268435456)
M_l2Power (29) = CLng (536870912)
M_l2Power (30) = CLng (1073741824)
Dim x
Dim k
Dim AA
Dim BB
Dim CC
Dim DD
Dim
Dim B
Dim c
Dim d
Const S11 = 7
Const S12 = 12
Const S13 = 17
Const S14 = 22
Const S21 = 5
Const S22 = 9
Const S23 = 14
Const S24 = 20
Const S31 = 4
Const S32 = 11
Const S33 = 16
Const S34 = 23
Const S41 = 6
Const S42 = 10
Const S43 = 15
Const S44 = 21
X = ConvertToWordArray (sMessage)
A = & H67452301
B = & HEFCDAB89
C = & H98BADCFE
D = & am