После того, как маркер безопасности был создан из учетных данных, введенных и проверенных в отношении активного каталога, пароль больше не хранится. Он недоступен для поиска и повторного использования в другом месте. Остается только токен. Это по дизайну.
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 (местный орган безопасности) недоступен из поддельных процессов.
Это звучит как еще один в списке [когда люди просят дыры в безопасности как функции] (http://blogs.msdn.com/b/oldnewthing/archive/2005/05/04/414602.aspx). –