• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Упаковка файлов

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Привет!

Помогите пожалуйста решить проблему

запускается серверный агент с кодом

Код:
	Print "start+"
Dim WShell As Variant
Dim id As Long	
Dim command_message As String			
Set WShell = CreateObject("WScript.Shell")		
id = WShell.Run(command_message, 0, True)		
If Not id=0 Then
error_message = "Возникла проблема при выполнении командной строки '"+command_message+"'"					
Print error_message
End If	
Print "end+"

несколько раз. После очередного запуска выдается ошибка Agent 'test' error: Cannot create automation object

Помогает перезагрузка сервера лотус, потом происходит все аналогично.

Помогите побороть проблему.

Сервера lotus 5,5 и 6.0, системы - виртуалки windows 2003r2, скрипт сохраняется в 5,5 дизайнере


Причем заметил такую особенность. Если код вынести в библиотеку - то объект сразу не может создать.

Заранее благодарю.
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
А без WScript никак не обойтись? Обычным батником? Я бы вообще не рискнул бы использовать какое-либо OLE на сервере, даже если бы оно у меня было :)

По существу вопроса - я не знаю WScript - многопоточный? Несколько экземпляров скрипт сервера можно инициализировать? Подозреваю, что оно занято предыдущим сеансом работы или зависло, а другой экземпляр инициализировать нельзя или можно, но ограниченное количество, и всё это количество уже запущено. Вы их, кстати, как то прибиваете по окончанию работы вашего скрипта?

Про OLE - попробуйте сначала использовать GetObject и если объект не получен, то тогда уже CreateObject.
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
А без WScript никак не обойтись? Обычным батником? Я бы вообще не рискнул бы использовать какое-либо OLE на сервере, даже если бы оно у меня было :)

По существу вопроса - я не знаю WScript - многопоточный? Несколько экземпляров скрипт сервера можно инициализировать? Подозреваю, что оно занято предыдущим сеансом работы или зависло, а другой экземпляр инициализировать нельзя или можно, но ограниченное количество, и всё это количество уже запущено. Вы их, кстати, как то прибиваете по окончанию работы вашего скрипта?

Про OLE - попробуйте сначала использовать GetObject и если объект не получен, то тогда уже CreateObject.

WScript как раз и запускает обычный батник

на локале работает все отлично, на сервере - обычно со второго раза уже не запускается.

Wscript нужен чтобы дождаться исполнения батника (обычно в нем идет упаковка файлов и может занимать длительное время)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
а чем вам обычный Shell не угодил?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
Gandliar
Журнали рование в винде смотрели? может какие логи пишет система.
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Gandliar
Журнали рование в винде смотрели? может какие логи пишет система.

Смотрел - нету там ничего

Я думаю проблема в лотус-сервере, 1 раз выполняет, второй раз - ошибка, помогает перезагрузка сервера
То есть видимо не освобождает объект почему-то
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
так, ок...
Может garrick прав, попробовать получить через GetObject и если нет то создавать?

А если через Exec делать?
.
Тогда можно будет батник запустить в дочернем потоке Ws, еще и управлять им немного.
Но есть подозрение, что тогда точно надо будет через GetObject идти первоначально.
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
так, ок...
Может garrick прав, попробовать получить через GetObject и если нет то создавать?

А если через Exec делать?
.
Тогда можно будет батник запустить в дочернем потоке Ws, еще и управлять им немного.
Но есть подозрение, что тогда точно надо будет через GetObject идти первоначально.

через getObject - все равно пишет cannot create automation object

видимо оле на лотус-сервере падает почему-то
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
616
223
BIT
9
По завершению агента
Set WShell = Nothing

Лотус сам этот процесс не закроет
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
По завершению агента
Set WShell = Nothing

Лотус сам этот процесс не закроет

и так тоже пробовал - не помогает.

Написал на батниках

Код:
Function shellAndWait(commandList List As String, waitMax As Long) As Variant
Dim filePathTmp As String
filePathTmp = Environ("Temp")
Dim fileName As String
fileName = Format(Cstr(Now), "yyyymmddhhnnss")+Cstr(Int(Rnd()*1000))
'Создадим батник	
Dim fileNum As Integer
fileNum = Freefile()	
Open filePathTmp+"\"+fileName+".bat" For Output As FileNum
Forall c In commandList
Print #FileNum, c		
End Forall
'Впишем последней строкой копирование файла
Print #FileNum, "copy "+filePathTmp+"\"+fileName+".bat"+" "+filePathTmp+"\"+fileName+".bak"	
Close FileNum	
Dim id As Integer	
id = Shell(filePathTmp+"\"+fileName+".bat")	
'Проверим в цикле наличие файла
Dim i As Long
For i = 1 To waitMax
If Not Dir$(filePathTmp+"\"+fileName+".bak",0)="" Then
Kill filePathTmp+"\"+fileName+".bat"
Kill filePathTmp+"\"+fileName+".bak"
shellAndWait = True
Exit Function
End If
Sleep 1
Next		
End Function
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
53
Gandliar
У Вас на сервере Java не работает?
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
WScript как раз и запускает обычный батник

на локале работает все отлично, на сервере - обычно со второго раза уже не запускается.

Wscript нужен чтобы дождаться исполнения батника (обычно в нем идет упаковка файлов и может занимать длительное время)
Всё понятно. WScript вам не нужен. Вам нужно переписать вашего агента на Java. Если с Java не дружите, то должно помочь вам.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
wscript ожидает завершения процесса а обычный shell нет
вот буду пробовать извращаться с shell
а то что шелл возвращает ИД процесса который из лотуса можно спокойно мониторитьи отследить когда он завершился вам мало? ;)
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Всё понятно. WScript вам не нужен. Вам нужно переписать вашего агента на Java. Если с Java не дружите, то должно помочь вам.

Первая ссылка с поиска помогла, апишная функция работает похоже стабильно.

Большое спасибо всем кто откликнулся.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!