Пакет Windows - Получить имя текущего пользователя

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

Это то, что у меня так far:

 @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.

2
задан 26 July 2020 в 14:38
5 ответов

for / F "tokens = 2 delims =="% f in ('wmic computersystem получить имя пользователя / значение ^ | find "="') установить "ConsoleUser =% f"

Вывод:

"\> set" ConsoleUser = COMPUTERORDOMAINNAME \ username

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

для / F "tokens = 2 delims ==" %% f in ( 'wmic computersystem получить имя пользователя / значение ^ | find "="') установить "ConsoleUser = %% f"
echo% ConsoleUser%

3
ответ дан 4 January 2021 в 07:58

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

@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 или запустить его, а пароль пользователя был изменен.

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

1
ответ дан 4 January 2021 в 07:58

Если вы хотите разделить имя пользователя и домен, а затем использовать его для установки пути к данным локального приложения для пользователя, вот как это сделать

:: Get current session user's Domain and username
for /F "tokens=2 delims==" %%f in ('wmic computersystem get username /value ^| find "="') do set "ConsoleUser=%%f"
:: Split and set variables for current session user's Domain and username
FOR /f "tokens=1 delims=\" %%a IN ("%ConsoleUser%") do set "domain=%%a"
FOR /f "tokens=2 delims=\" %%b IN ("%ConsoleUser%") do set "user=%%b"
:: Echo username and domain
echo %domain%
echo %user%
:: Set variable localappdata path and echo
set localappdata "C:\users\%user%\AppData\Local"
echo %localappdata%
0
ответ дан 20 October 2021 в 13:18

То же, что и ниже, с использованием Powershell

# get the Session ID of this process - the same as that of the user
$sessionId = Get-Process -id $pid | select-object -expand SessionId

# get the output of 'query.exe user' for that session ID
$quOutput = query.exe user $sessionId

# parse the output of query.exe to get the user ID only
$userId = $quOutput[1] -replace '^>([^\s]+)+.*$','$1'

# set localappdata path
$localappdata = "C:\users\${userid}\appdata\local"
0
ответ дан 20 October 2021 в 13:38

..и для хет-трика -то же, что и выше, используя vbscript

Set wshShell = WScript.CreateObject("WScript.Shell")
 
' Get the username 
strUsername = Get_LoggedOnUserName()
 
' Set localappdata variable and then echo it out
 Dim localappdata 
localappdata = "C:\users\" & strUsername & "\appdata\local"
wscript.echo localappdata

Function Get_LoggedOnUserName
  Dim Array
  strComputer = "." 
  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
  Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48) 
 
  For Each objItem in colItems 
    Array = Split(objItem.UserName, "\", -1, 1)  
 
    Get_LoggedOnUserName = Array(1)
  Next 
 
End Function
0
ответ дан 20 October 2021 в 13:50

Теги

Похожие вопросы