информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetПортрет посетителяSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Надо проверить... 30.01.06 15:45  Число просмотров: 2072
Автор: mmb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
<programming>
[win32] помогите понять почему zwqueryinformationtoken выдавёт ошибку status_invalid_handle 30.01.06 12:10  
Автор: mmb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
фрагмент кода:
PIO_STACK_LOCATION currentIrpStack;
HANDLE hTokenUser = NULL;
ULONG dwSizeOfToken = 0;
//
currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
case IRP_MJ_CREATE:
if( currentIrpStack == NULL ) {
return ...;
}
hTokenUser = currentIrpStack->Parameters.Create.SecurityContext->AccessState->Subje ctSecurityContext.ClientToken;
if( hTokenUser == NULL ) {
return ...;
}
Status = ZwQueryInformationToken( hTokenUser, TokenUser, NULL, 0, &dwSizeOfToken);

и в результате
Status == STATUS_INVALID_HANDLE
В чём может быть дело?
А кто сказал что currentirpstack->parameters.create.securitycontext->accessstate->subje ctsecuritycontext.clienttoken - это handle? 30.01.06 13:14  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 30.01.06 13:19  Количество правок: 1
<"чистая" ссылка>
ИМХО там указатель на чтото типа
typedef struct _PROCESS_ACCESS_TOKEN {

//
// Handle to Primary token to assign to the process.
// TOKEN_ASSIGN_PRIMARY access to this token is needed.
//

HANDLE Token;

//
// Handle to the initial thread of the process.
// A process's access token can only be changed if the process has
// no threads or one thread. If the process has no threads, this
// field must be set to NULL. Otherwise, it must contain a handle
// open to the process's only thread. THREAD_QUERY_INFORMATION access
// is needed via this handle.

HANDLE Thread;

} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;


ЗЫ а почему не воспользоваться ZwOpenProcessToken/ZwOpenThreadToken?
[win32] а кто сказал что currentirpstack->parameters.create.securitycontext->accessstate->subje ctsecuritycontext.clienttoken - это handle? 30.01.06 13:34  
Автор: mmb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> ИМХО там указатель на чтото типа
> typedef struct _PROCESS_ACCESS_TOKEN {
>
> //
> // Handle to Primary token to assign to the process.
> // TOKEN_ASSIGN_PRIMARY access to this token is needed.
> //
>
> HANDLE Token;
>
> //
> // Handle to the initial thread of the process.
> // A process's access token can only be changed if the
> process has
> // no threads or one thread. If the process has no
> threads, this
> // field must be set to NULL. Otherwise, it must
> contain a handle
> // open to the process's only thread.
> THREAD_QUERY_INFORMATION access
> // is needed via this handle.
>
> HANDLE Thread;
>
> } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
>
>
> ЗЫ а почему не воспользоваться
> ZwOpenProcessToken/ZwOpenThreadToken?

В файле дано описание структур
Module Name: ntddk.h

typedef struct _SECURITY_SUBJECT_CONTEXT {
PACCESS_TOKEN ClientToken;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
PACCESS_TOKEN PrimaryToken;
PVOID ProcessAuditId;
} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;

typedef PVOID PACCESS_TOKEN; // winnt

В файле и описание самой функции
Module Name: ntifs.h, release 53.

NTKERNELAPI
NTSTATUS
SeQueryInformationToken (
IN PACCESS_TOKEN Token,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID *TokenInformation
);
ZwQueryInformationToken!=SeQueryInformationToken 30.01.06 13:41  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
[Win32] Мне нужен токен пользователя, от имени которого запущен процесс, а взять его можно из ClientToken 30.01.06 14:41  
Автор: mmb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
а не известно, как преобразовать PACCESS_TOKEN в HANDLE, потому что кроме варинта доступа через
currentIrpStack->Parameters.Create.SecurityContext->AccessState->SubjectSecurityContext.ClientToken
ничего не описано
и описание вызова функции SeQueryInformationToken нигде не удалось найти :(
[Win32] Чтобы получить хендл, объект надо открыть [upd] 01.02.06 13:27  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 01.02.06 13:30  Количество правок: 1
<"чистая" ссылка>
> а не известно, как преобразовать PACCESS_TOKEN в HANDLE,

В данном конкртеном случае нужна функция ObOpenObjectByPointer

---------------

Только как по мне резолвить имя доменного юзера не выходя из нулевого кольца - гиблое дело. Как получить имя локального пользователя, я уже писал, а в домене скорее всего придется слать CIFS/SMB пакеты. Тогда уж действительно проще будет в каком нибудь юзерском процессе создать свой поток или в юзерский поток вставить APC. Ну в крайнем случае остается вариант - держать выделенный процесс (например сервис) специально для общения со своим драйвером.
IRP приходит в контексте процесса/потока который сделал запрос 30.01.06 15:04  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> а не известно, как преобразовать PACCESS_TOKEN в HANDLE,
> потому что кроме варинта доступа через
> currentIrpStack->Parameters.Create.SecurityContext->A
> ccessState->SubjectSecurityContext.ClientToken
> ничего не описано
> и описание вызова функции SeQueryInformationToken нигде не
> удалось найти :(
Потому ZwOpenProcess/ThreadToken на KeGetCurrentXxx должен дать тебе хэндл на нужный тебе токен более-менее документированным способом.

А по поводу SeQueryInformationToken:

SeQueryInformationToken (
IN PACCESS_TOKEN AccessToken,
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
OUT PVOID *TokenInformation
)

/*++


Routine Description:

Retrieve information about a specified token.

Arguments:

TokenHandle - Provides a handle to the token to operate on.

TokenInformationClass - The token information class about which
to retrieve information.

TokenInformation - Receives a pointer to the requested information.
The actual structures returned are dependent upon the information
class requested, as defined in the TokenInformationClass parameter
description.

TokenInformation Format By Information Class:

TokenUser => TOKEN_USER data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.

TokenGroups => TOKEN_GROUPS data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.

TokenPrivileges => TOKEN_PRIVILEGES data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.

TokenOwner => TOKEN_OWNER data structure. TOKEN_QUERY
access is needed to retrieve this information about a
token.

TokenPrimaryGroup => TOKEN_PRIMARY_GROUP data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.

TokenDefaultDacl => TOKEN_DEFAULT_DACL data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.

TokenSource => TOKEN_SOURCE data structure.
TOKEN_QUERY_SOURCE access is needed to retrieve this
information about a token.

TokenType => TOKEN_TYPE data structure.
TOKEN_QUERY access is needed to retrieve this information
about a token.

TokenStatistics => TOKEN_STATISTICS data structure.
TOKEN_QUERY access is needed to retrieve this
information about a token.

Return Value:

STATUS_SUCCESS - Indicates the operation was successful.


ЗЫ можно еще подождать местных гуру кернел-мода.
[Win32] При локальной работе это бы подошло, но у меня работа на сервере :( 30.01.06 15:15  
Автор: mmb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Потому ZwOpenProcess/ThreadToken на KeGetCurrentXxx должен
> дать тебе хэндл на нужный тебе токен более-менее
> документированным способом.

При локальной работе это бы подошло, но у меня работа на сервере :(
[UPD]В смысле lanman сетевые клиенты? 30.01.06 15:44  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 31.01.06 13:19  Количество правок: 1
<"чистая" ссылка>
А они через impersonating работают и ZwOpenThreadToken вернет правильный токен если OpenAsSelf установить в тру

[UPD]
Сорри, OpenAsSelf надо FALSE
[Win32] Надо проверить... 30.01.06 15:45  
Автор: mmb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach