Назад | Перейти на главную страницу

Пакетная обработка Windows - получить имя текущего вошедшего в систему пользователя

В качестве своего рода небольшого смягчения для большой сети эксплойта замены utilman.exe при ремонте Windows с помощью cmd.exe с последующим изменением пароля пользователя я делаю небольшой скрипт на основе инструмента EventSentry, который обнаружит, что utilman.exe изменен, и я могу прикрепить к нему действие. Но это обнаружение произойдет после того, как злоумышленник уже вошел в систему на локальном компьютере. Итак, я делаю сценарий, который изменяет права доступа и блокирует удаление и переименование utilman.exe, и я хочу добавить изменение пароля для текущего зарегистрированного пользователя, а затем выйти из системы.

Вот что у меня есть на данный момент:

 @ECHO off
 takeown /f c:\windows\system32\utilman.exe
 icacls c:\windows\system32\utilman.exe /deny *S-1-1-0:(DE,WD,AD,RX)
 net user [NeedToGetLogedUser] 123456
 shutdown -L

Действие, которое я прикрепляю, выполнит этот сценарий под другим пользователем (не фактическим зарегистрированным пользователем). Поэтому мне нужно, чтобы на компьютере был зарегистрирован фактический текущий пользователь, а не пользователь, под которым будет запускаться этот сценарий.

Я думал о:

C:\Users\MyUser>query user
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>MyUser              console             1  Active      none   7/9/2020 6:27 PM

Но я не могу понять, как разобрать результат, чтобы получить только «MyUser» (используя findstr) для использования его с командой net user.

for /F "tokens=2 delims==" %f in ('wmic computersystem get username /value ^| find "="') do set "ConsoleUser=%f"

Вывод:

" \>set "ConsoleUser=COMPUTERORDOMAINNAME\username

При запуске в пакетном файле замените% на %%

for /F "tokens=2 delims==" %%f in ('wmic computersystem get username /value ^| find "="') do set "ConsoleUser=%%f"
echo %ConsoleUser%

Спасибо за все ответы. Это помогло мне найти решение. В итоге я написал этот сценарий, который идеально подходит для того, что мне нужно :)

@ECHO off
set ConsoleUser=None
takeown /f c:\windows\system32\utilman.exe
icacls c:\windows\system32\utilman.exe /deny *S-1-1-0:(DE,WD,AD,RX)
for /F "tokens=1" %%f in ('query user ^| find ">"') do set "ConsoleUser=%%f"
net user %ConsoleUser:~1% 123456
shutdown -L

Этот сценарий ограничит выполнение, удаление и переименование utilman.exe, сбросит пароль пользователя, который вошел в систему, а затем выйдет из системы. Таким образом, злоумышленник не может повторно изменить utilman.exe или запустить его, а пароль пользователя был изменен.

Еще раз спасибо!