• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Пользовательский контекст при анонимном доступе под Iis

  • Автор темы *null
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

*null

Здравствуйте!

Есть IIS 5.1 на WinXP SP2 на котором работает Web Service. К узлу разрешен анонимный доступ, используется администраторская учетная запись.

Web Service в работе использует DLL-ку, которая вызывает некоторые крипто-функции Windows. Эта библиотека успешно используется в связки с WindowsApplication, а вот с WebService проблемы.

Так, например вызов CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, "MY") возвращает ошибку ERROR_ACCESS_DENIED - «Access is denied».

При этом WindowsApplication, запущенное этим же пользователем (под которым узел на анониме работает) и нормально вызывает функции DLL-ки использующие CertOpenStore, никаких ошибок не возникает.

Если запускаю WebService из под встроенного в Visual Web Developer 2005 EE, тоже все прекрасно работает.

С чем может быть такое связано? Подозреваю, что под IIS при анонимном доступе WebService все же исполняется не совсем под заданной учетной записью, или накладываются какие то ограничения. Тот же Context.User.Identity.Name при этом пуст.

Как такое можно побороть?
 
E

etc

<!--QuoteBegin-*null+13:06:2007, 13:32 -->
<span class="vbquote">(*null @ 13:06:2007, 13:32 )</span><!--QuoteEBegin-->При этом WindowsApplication, запущенное этим же пользователем[/quote]
Как вы это делаете?
 
N

*null

Наверно я не совсем точно обрисовал суть проблемы.

Сделал DLL-ку, написанна на C#, которая обеспечивает некоторые крипто-функции, например, зашифровать буфер с данными использую закрытый ключ на который ссылается такой то сертификат.
Функции библиотеки через P/Invoke обращаются к CryptoApi Windows (да, пришлось сделать именно так - крипто из .net не подходит), той же CertOpenStore.

Есть C# Windows-Application которое использует данную библиотеку. Использует успешно все работает.
Приложение запускаю под свой админской учетной записью.

Возникла необходимость сделать Web-Service, который использует эту библиотеку. Столкнулся с упомянутой выше проблемой - под IIS обращения методов сервиса к функциям ДЛЛ-ки вызывает ошибки. Доступ к узлу с WebService открыт анонимный, используется та же учетная запись под которой я разрабатываю/тестирую WindowsApplication.

Вот собственно так я это и делаю.
 
P

Pasha

<!--QuoteBegin-*null+13:06:2007, 13:32 -->
<span class="vbquote">(*null @ 13:06:2007, 13:32 )</span><!--QuoteEBegin-->К узлу разрешен анонимный доступ, используется администраторская учетная запись.
[snapback]69188" rel="nofollow" target="_blank[/snapback]​
[/quote]Она используется IIS, а не рабочим процессом ASP.NET. Вот, статья .
Если коротко, то проблема исправляется добавлением
Код:
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
</configuration>
в web.config.
 
N

*null

Наверно я не совсем точно обрисовал суть проблемы.

Сделал DLL-ку, написанна на C#, которая обеспечивает некоторые крипто-функции, например, зашифровать буфер с данными использую закрытый ключ на который ссылается такой то сертификат.
Функции библиотеки через P/Invoke обращаются к CryptoApi Windows (да, пришлось сделать именно так - крипто из .net не подходит), той же CertOpenStore.

Есть C# Windows-Application которое использует данную библиотеку. Использует успешно все работает.
Приложение запускаю под свой админской учетной записью.

Возникла необходимость сделать Web-Service, который использует эту библиотеку. Столкнулся с упомянутой выше проблемой - под IIS обращения методов сервиса к функциям ДЛЛ-ки вызывает ошибки. Доступ к узлу с WebService открыт анонимный, используется та же учетная запись под которой я разрабатываю/тестирую WindowsApplication.

Вот собственно так я это и делаю.
 
P

Pasha

<!--QuoteBegin-*null+13:06:2007, 14:57 -->
<span class="vbquote">(*null @ 13:06:2007, 14:57 )</span><!--QuoteEBegin-->Доступ к узлу с WebService открыт анонимный, используется та же учетная запись под которой я разрабатываю/тестирую WindowsApplication.
[snapback]69200" rel="nofollow" target="_blank[/snapback]​
[/quote]Кем используется?
 
N

*null

Pasha, спасибо за совет! На другом форуме мне посоветовали прописать userName="SYSTEM" в processModel machine.config - помогло.

"Кем используется" - имел ввиду, что к узлу открыт анонимный доступ, при этом используется учетная запись амдинистратора, под которой я обычно и сижу/пишу/тестирую.
 
N

*null

Pasha, спасибо за совет! На другом форуме мне посоветовали прописать userName="SYSTEM" в processModel machine.config - помогло.

"Кем используется" - имел ввиду, что к узлу открыт анонимный доступ, при этом используется учетная запись амдинистратора, под которой я обычно и сижу/пишу/тестирую.
 
P

Pasha

<!--QuoteBegin-*null+13:06:2007, 15:21 -->
<span class="vbquote">(*null @ 13:06:2007, 15:21 )</span><!--QuoteEBegin-->"Кем используется" - имел ввиду, что к узлу открыт анонимный доступ, при этом используется учетная запись амдинистратора, под которой я обычно и сижу/пишу/тестирую.
[snapback]69203" rel="nofollow" target="_blank[/snapback]​
[/quote]Все таки советую прочитать статью :)
"Используется" одновременно 3 разных учетных записи:
1. Учетная запись пользователя, под которым запущено клиентское приложение.
2. Учетная запись, используемая IIS для анонимных пользователей (настраивается в св-вах virtual folder).
3. Учетная запись, под которым запущен процесс рабочий процесс asp.net (настраивается в machine.config/processModel).

Учетная запись, от имени которой выполняется код приложения (та самая, у которой не хватает прав) определяется следующим образом:
1. По умолчанию: Сonfiguration/system.web/identity/@impersonate = false, используется №3.
2. Сonfiguration/system.web/identity/@impersonate = true - используется токен, полученный от IIS (№2 или №1)
3. Сonfiguration/system.web/identity/@impersonate = true, явно заданы identity/@userName и identity/@password. - они и используются.

Изменение processModel machine.config меняет учетную запись для всех приложений, изменение identity - только для одного.

Это так, примерно. По ссылке подробно расписано.
 
E

etc

вот еще в тему
 
N

*null

Pasha, etc, спасибо за ссылки и советы! Буду разбираться.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!