Как я “ловлю” неудавшуюся команду, которая не работает с попыткой … выгода?

Цель является двукратной:

  1. Путем отключения корневого SSH взломщики должны теперь предположить пароли и учетные записи. (можно также просто отключить пароли полностью и полагаться на PKI...),
  2. Путем отключения корневого SSH у нас есть более сильная идентификация и регистрирующийся метод. Таким образом, если мы контролируем сервер после нападения, мы видим не только, какой IP вошел в систему, но и с тем, кто учетные данные. Некоторые места даже отключают SU и требуют, чтобы администраторы использовали sudo, который уменьшает возможности людей, оставляющих окно терминала, открытое для прохожего, нападающего, и генерирует больше данных логов о том, кто сделал что.
3
задан 12 April 2013 в 23:16
2 ответа

Такое поведение наблюдается, потому что блоки try / catch работают только при устранении ошибок ( Тип ошибки MSDN Powershell Ссылка )

Вы можете управлять тем, как работает Powershell, изменив переменную $ ErrorActionPreference .

Если вы настроите свой скрипт так, чтобы $ ErrorActionPreference = "Stop" вверху, то все ошибки будут считаться прерывающими ошибками, и блок try / catch будет работать.

Если вы просто хотите изменить действие при ошибке для одной команды, вы можете использовать параметр -ErrorAction , чтобы изменить его для этой команды.

4
ответ дан 3 December 2019 в 06:10

Если вы хотите «поймать» ошибку, Я покажу вам свой пример, и, возможно, вы сможете использовать его.

function LoggedOnUser($MachineNameOrIP){

    $LoggedOnUser = "CouldNotGetUser"

    trap [Exception]{ # this installs an error handler for the function

        Write-Host "Error Accessing WMI - $MachineNameOrIP"
        Log("Error Accessing WMI - $MachineNameOrIP")

        continue;

    }


    $LoggedOnUser = Get-WMIObject Win32_Process -filter 'name="explorer.exe"' -computername $MachineNameOrIP |
    ForEach-Object { $owner = $_.GetOwner(); '{0}\{1}' -f $owner.Domain, $owner.User } |
    Sort-Object | Get-Unique

    return $LoggedOnUser

}

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

trap [ManagementObjectNotFoundException] {....}

, поскольку powershell тесно связывает .net.

0
ответ дан 3 December 2019 в 06:10

Теги

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