Проверка целостности Windows Script Host

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,814
Реакции
6,593
А) Тест без повышения привилегий - архив Test_Script_Host_2.zip

1. Скачайте приложенный архив.
2. Распакуйте.
3. Запустите файл Test_Script_Host.cmd
4. Выложите в теме содержимое файла(ов) Host_log_x....txt (будет создан рядом со скриптом).

Б) Тест с повышением привилегий - архив Test_Script_Host.zip

1. Скачайте приложенный архив.
2. Распакуйте.
3. Запустите файл Test_Script_Host.vbs
4. Подтвердите кнопкой "Да" вопрос из диалогового окна "Контроль учетных записей"
5. Выложите в теме содержимое файла Host_log.txt (будет создан рядом со скриптом).

На исправной системе (Windows Vista и выше) лог будет выглядеть так:
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - FAILED: -2147024891-Неверная ссылка на корень в разделе реестра "HKLM\SOFTWARE\Elevation_Test\".
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - OK.
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
All tests compeleted.
VB.NET / VBA:
Option Explicit
On Error Resume Next
Const DQ = """", SP = " ", BS = "\"

Dim ScriptPath: ScriptPath = WScript.ScriptFullname: ScriptPath = left(ScriptPath, instrrev(ScriptPath, "\"))

'Дозапись в протокол
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim TS: Set TS = FSO.OpenTextFile(ScriptPath & "Host_log.txt", 8, True)

Dim oShell: Set oShell = CreateObject("WScript.Shell")
AddtoLog Err, "WScript.Shell Object"
Dim oShellApp: Set oShellApp = CreateObject("Shell.Application")
AddtoLog Err, "Shell.Application Object"
Dim oNetwork: Set oNetwork = CreateObject("WScript.Network")
AddtoLog Err, "WScript.Network Object"
Dim oADO: Set oADO = CreateObject("ADODB.Stream")
AddtoLog Err, "ADODB.Stream Object"

Test_WMI()

'Проверка админ. привилегии
Dim AdminKey: AdminKey = "HKLM\SOFTWARE\Elevation_Test\"
'Если уже есть значение, то скрипт дважды перезапустился
Err.Clear
Dim Status: Status = oShell.RegRead(AdminKey)
if err = 0 then
   TS.WriteLine "All tests compeleted."
   oShell.RegDelete AdminKey
   WScript.Quit
else
   Err.Clear
end if
'Пытаемся записать ключ
oShell.RegWrite AdminKey, "1"
'Если успех
AddToLog Err, "RegWrite Admin."
Dim isAdmin
if Err = 0 then isAdmin = true else Err.Clear

TS.WriteLine "==============================="

'Если привилегия еще не получена
if not isAdmin then
   'Запуск через GUI Host
  oShellApp.ShellExecute oShell.ExpandEnvironmentStrings("%WinDir%\system32\wscript.exe"), DQ & WScript.ScriptFullName & DQ, "", "runas", 1
   WScript.Quit
else
   'Запуск через Console Host
  oShellApp.ShellExecute oShell.ExpandEnvironmentStrings("%WinDir%\system32\cscript.exe"), DQ & WScript.ScriptFullName & DQ, "", "runas", 1
   WScript.Quit
End If

Function AddtoLog(oErr, Source)
   if oErr.Number = 0 then
     TS.WriteLine Source & " - OK."
   else
     TS.WriteLine Source & " - FAILED: " & oErr.Number & "-" & oErr.Description
   end if
  if oErr <> 0 then Err.Clear
End function

Function Test_WMI()
   Dim colOS: Set colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
   AddtoLog Err, "WMI Object"
   Dim oOS
   For Each oOS In colOS
    strOSLong = oOS.Version
   Next
   TS.WriteLine "OS: " & strOSLong
End Function
 

Вложения

  • Test_Script_Host.zip
    1.2 KB · Просмотры: 24
  • Test_Script_Host_2.zip
    1.2 KB · Просмотры: 15
Последнее редактирование:
Dragokas, в каких ситуациях может потребоваться такая проверка?

На исправной системе (Windows Vista и выше) лог будет выглядеть так:
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - OK.
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
All tests compeleted.
 
shestale, писал специально для Win7. Для общих случаев более детальный отчет сделаю.
Такая проверка сделана специально для этого случая: https://safezone.cc/threads/virulogs-otkryvaetsja-i-zakryvaetsja-bez-vypolnenija-zadachi.22750/
Судя по присланному мне листингу отладки, там высокая вероятность повреждения системного файла cscript.exe, ошибок в CMD-части самого ViruLogs, не было.
Хочу убедится.
Этот скрипт запускается двойным кликом (запуск произойдет через Wscript.exe - GUI-версия), и на практике с логированием проверяем возможность
повышения привилегий через сам wscript.exe, затем через cscript.exe,
++ работоспособность объектов Shell.Application, WScript.Network, ADODB.Stream,
+ работу службы WMI.
у меня лог покороче получился
У тебя скрипт запущен уже с админскими правами (есть право записи в улей HKLM). Все в порядке.
 
Последнее редактирование:
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - FAILED: -2147024891-Неверная ссылка на корень в разделе реестра "HKLM\SOFTWARE\Elevation_Test\".
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - OK.
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
All tests compeleted.
 
win8.0x64
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - FAILED: -2147024891-Неверная ссылка на корень в разделе реестра "HKLM\SOFTWARE\Elevation_Test\".
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - OK.
===============================
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
All tests compeleted.

А в таком случае как быть ?
scripthost.png

XP Home SP3
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
All tests compeleted.
WScript.Shell Object - OK.
Shell.Application Object - OK.
WScript.Network Object - OK.
ADODB.Stream Object - OK.
WMI Object - OK.
RegWrite Admin. - OK.
===============================

А такое вам известно ? Поработал Sector12.
[22.11.2013 - 21:21:08,70] - Запуск ViruLogs Collector
[22.11.2013 - 21:21:17,06] - System Recovery ERROR:
"WMIC" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
 
Последнее редактирование:
"WMIC" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Похоже что-то прибило c:\Windows\System32\wbem\wmic.exe
Можно переписать эту часть на VBScript. Если файлы службы WMI не повреждены, что не факт, то отработает, иначе и Автологгер не справится тоже.
А в таком случае как быть ?
Это если Script Host отключен. При этом для применения политики блокировки нужно перезагрузить систему, а для включения - нет.
Добавлю обход ограничения в следующую версию.akok, по крайней мере теперь знаю, что чисто VBScript-овая версия запустится нормально.
Повреждения сервера сценариев не было.
Koza Nozdri, можно рассмотреть необходимость включения EXE-файла процессора в состав сборки на случай его повреждения на заболевшей системе.
 
Последнее редактирование:
Похоже что-то прибило c:\Windows\System32\wbem\wmic.exe
Можно переписать эту часть на VBScript. Если файлы службы WMI не повреждены, что не факт, то отработает, иначе и Автологгер не справится тоже.
Neshta ! Откуда то... такую проверку можно сделать- if exist "%windir%\directx.sys" ,"%temp%\3582-490" then neshta
 
Phoenix, незачем. Просто эта часть функции не будет работать.
Проверку можно организовать:
1) через CMD:
CMD/BATCH:
2>NUL >&1 WMIC OS Get /Value
if %errorlevel% neq 0 echo И дальше устанавливаем флаг, чтобы не использовать WMI, например, предупредить пользователя, что контрольную точку ему нужно сделать самостоятельно.

2) через VBscipt:
VB.NET / VBA:
on error resume next
Set colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
if err <> 0 then msgbox "Здесь также - WMI не работает."
 
файловое,тут комбайны не помогут.
Ага. Заражает системные файлы с офигительной скоростью. У меня он даж на диск D: как-то перекинулся в папку инсталляторов. Первый раз думал переустановка поможет, а нифига, переставляю, ставлю проги получаю вирь. Долго не мог вкурить в чём дело. Пока не проверил салитикиллером и авзтулсом.
 
Drongo, а антивирус то молчал что ли?
У меня курейтик мигом замаячил.
Я тогда под лив и логи заново снял.
Помогло со второго раза.
 
Назад
Сверху Снизу