1

Я ищу способ, чтобы захватить сетевые учетные данные текущего сеанса в переменную, что я могу передать позже ...Powershell: Откройте для себя учетные данные сети по умолчанию при запуске из RunAs/netonly

Дело в том, чтобы выполнить команды в чужом домене, к которым у меня есть доступ к учетной записи/привилегии, но доверие между исходным и целевым доменами отсутствует.

Во-первых, мы проводим внутри PowerShell, который порождал с помощью команды Запуск от имени (Запуск от имени/netonly/пользователя: Domian \ учетная запись PowerShell

Отсюда я могу сделать почти все, что я хочу, за исключением создания события в планировщик задач без жесткого кодирования в командной строке имя пользователя/пароль

Invoke-Command -scriptblock -Компьютер $ назначения {SchTasks -ru домен \ учетная запись -rp пароль}

То, что я ищу, чтобы сделать что-то вроде

$ username = Получить текущую сессию Сеть Имя пользователя ($ (whoami) вызывает фактическую локальную учетную запись Longon, а не учетную запись runas, которая породила окно PowerShell)

$ пароль = Получить пароль, который был введен, когда команда RunAs был выполнен

+3

Это звучит как еще один в списке [когда люди просят дыры в безопасности как функции] (http://blogs.msdn.com/b/oldnewthing/archive/2005/05/04/414602.aspx). –

ответ

3

После того, как маркер безопасности был создан из учетных данных, введенных и проверенных в отношении активного каталога, пароль больше не хранится. Он недоступен для поиска и повторного использования в другом месте. Остается только токен. Это по дизайну.

UPDATE:

я вырыл немного дальше, чтобы поддержать свое дело, и это не совсем, как указано выше, но конечный результат будет таким же. Пароль, используемый с runas.exe, кажется, недоступен. Сетевые учетные данные: не, подтвержденный против AD, что имеет смысл в ретроспективе, поскольку вы часто используете /netonly для работы с удаленным, ненадежным доменом: по определению вы не можете проверить удаленные учетные данные из локальной системы. От MSDN:

Информация о флагове LOGON_NETCREDENTIALS_ONLY, используется с CreateProcessWithLogonW.

Войдите, но используйте указанные учетные данные только в сети. Новый процесс использует тот же токен, что и вызывающий, но система создает новый сеанс регистрации в LSA, и процесс использует указанные учетные данные в качестве учетных данных по умолчанию.

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

Система не проверяет указанные учетные данные. Следовательно, может начаться процесс , но он может не иметь доступа к сетевым ресурсам.

Хорошо, так как он не может подтвердить учетные данные и получить токен, то он должен хранить пароль где-то в памяти, так как он должен передать их по кабелю позже для SSPI и т. Д.Итак, можем ли мы получить от них процесс, запущенный с runas.exe? Давайте посмотрим:

PS> runas /netonly /user:foo\bar powershell.exe 
Enter the password for foo\bar: ****** 

Я буквально использовал foo\bar для домена и пользователя выше. Это не подтверждается, как уже упоминалось. Я ввел 12345 для получения пароля. Вышеупомянутая строка запустит новый экземпляр powershell. Таким образом, из этого нового экземпляра, давайте посмотрим на сети по умолчанию учетные данные:

PS> [System.Net.CredentialCache]::DefaultNetworkCredentials 

UserName           Domain 
--------           ------ 

Ну, не повезло: ничего там. Моя догадка заключается в том, что учетные данные охраняются в некоторой зашифрованной части памяти в ядре, вероятно, LSA (местный орган безопасности) недоступен из поддельных процессов.

+0

Если вы регистрируете учетные данные в переменной, пароль * все еще находится. Попробуйте это: '$ cred = get-credential; $ cred.GetNetworkCredential(). Password;' [См. Также] (http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/26/decrypt- powershell-secure-string-password.aspx) – alroc

+0

xOn - тогда где командлеты получают информацию? Выполняя руны powershell, cmndlets, которые обычно требуют, чтобы я вводил новый набор учетных данных, используют учетные данные, которые завернуты в сеанс powershell. –

+0

Командлеты * не * получают информацию. Это происходит выше стека; Использование/netonly означает, что Windows будет использовать альтернативный токен для доступа к сети автоматически, но будет использовать токен уровня процесса для локальной работы. Все дело в токенах - пароль давно ушел. – x0n

 Смежные вопросы

  • Нет связанных вопросов^_^