привелегии процесса

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by pft, 19 Mar 2013.

  1. pft

    pft New Member

    Joined:
    18 Mar 2013
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    суть в следующем - не присваивается привилегия отладчика, судя по всему. Любые процессы админа удаляет без проблем, системные ни как. Отзавитесь кто в курсе. Тестил на 7-ке и Хр

    HTML:
    .386 
    .model flat, stdcall 
    option casemap:none 
    
    include \MASM32\INCLUDE\windows.inc
    include \MASM32\INCLUDE\masm32.inc
    include \MASM32\INCLUDE\gdi32.inc
    include \MASM32\INCLUDE\user32.inc
    include T:\MASM32\INCLUDE\kernel32.inc
    include \MASM32\INCLUDE\advapi32.inc
    include \MASM32\INCLUDE\shell32.inc
    includelib \MASM32\LIB\masm32.lib
    includelib \MASM32\LIB\gdi32.lib
    includelib \MASM32\LIB\user32.lib
    includelib T:\MASM32\LIB\kernel32.lib
    includelib \MASM32\LIB\advapi32.lib
    includelib \MASM32\LIB\shell32.lib
    
    szText MACRO Name, Text:VARARG
    LOCAL lbl
    jmp lbl
    Name db Text,0
    lbl:
    ENDM
    
    .data 
    
    szShut	db "SE_DEBUG_NAME",0
    ae db "PTOKEN_PRIVILEGES"
    tkp		TOKEN_PRIVILEGES <>
    
    
    
    
    .data?
    hSnapshot HANDLE ?
    ProcEnt PROCESSENTRY32 <?>
    hToken	dd ?
    
    .code 
    start: 
    	xor eax, eax
    	xor ebx,ebx
    	invoke GetCurrentProcess
    	invoke OpenProcessToken,eax,TOKEN_ALL_ACCESS,offset hToken
    	invoke LookupPrivilegeValue,ebx, offset szShut,offset tkp.Privileges[0].Luid
    	mov [tkp.PrivilegeCount],1
    	mov tkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
    	invoke AdjustTokenPrivileges,[hToken],ebx,offset tkp,addr ae,ebx,ebx
     push 2000d
    call Sleep
    xor eax, eax
    xor ebx,ebx	
    	szText AppName ,"csrss.exe"
    szText Problem_child ,"csrss.exe"
    
    invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS,0
    .IF (eax != INVALID_HANDLE_VALUE)
    mov hSnapshot,eax
    mov [ProcEnt.dwSize],SIZEOF ProcEnt
    invoke Process32First, hSnapshot,ADDR ProcEnt
    .IF (eax)
    @@:
    invoke lstrcmpi, ADDR Problem_child ,ADDR [ProcEnt.szExeFile]
    .IF (eax == 0)
    invoke OpenProcess, PROCESS_TERMINATE,FALSE,[ProcEnt.th32ProcessID]
    .IF (eax)
    invoke TerminateProcess, eax,0
    .ELSE
    .ENDIF
    .ENDIF
    invoke Process32Next, hSnapshot,ADDR ProcEnt
    test eax,eax
    jnz @B
    .ENDIF
    .ENDIF
    invoke CloseHandle, hSnapshot
    
      invoke ExitProcess, 0
    end start 
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    openprocesstoken (token_ADJUST_PRIVILEGES or TOKEN_QUERY)
    потом szshut вроде должен быть SeDebugPrivilege
    в adjusttokenprivileges последние 3 флага вроде 0 равны,а хэндл без скобок
    зы и код у тебя какой то кривой нах.оформи в процедуру получение прав отладчика,вместо регистров лучше юзать нули,не так мозолит глаз.
     
    #2 DooD, 19 Mar 2013
    Last edited: 19 Mar 2013
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    ну во первых
    #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")

    во вторых будь проще
    Code:
    void GetPrivilege(IN ULONG Privilege)  
    {  
      BOOLEAN OldValue;  
      RtlAdjustPrivilege(Privilege, TRUE, FALSE, &OldValue);  
    }
    
    GetPrivilege(20); //SeDebugPrivilege - вроде как
    
    http://source.winehq.org/source/include/winternl.h
    Code:
    /* Well-known LUID values */
    1637 #define SE_MIN_WELL_KNOWN_PRIVILEGE       2
    1638 #define SE_CREATE_TOKEN_PRIVILEGE         2
    1639 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE   3
    1640 #define SE_LOCK_MEMORY_PRIVILEGE          4
    1641 #define SE_INCREASE_QUOTA_PRIVILEGE       5
    1642 #define SE_UNSOLICITED_INPUT_PRIVILEGE    6 /* obsolete */
    1643 #define SE_MACHINE_ACCOUNT_PRIVILEGE      6
    1644 #define SE_TCB_PRIVILEGE                  7
    1645 #define SE_SECURITY_PRIVILEGE             8
    1646 #define SE_TAKE_OWNERSHIP_PRIVILEGE       9
    1647 #define SE_LOAD_DRIVER_PRIVILEGE         10
    1648 #define SE_SYSTEM_PROFILE_PRIVILEGE      11
    1649 #define SE_SYSTEMTIME_PRIVILEGE          12
    1650 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
    1651 #define SE_INC_BASE_PRIORITY_PRIVILEGE   14
    1652 #define SE_CREATE_PAGEFILE_PRIVILEGE     15
    1653 #define SE_CREATE_PERMANENT_PRIVILEGE    16
    1654 #define SE_BACKUP_PRIVILEGE              17
    1655 #define SE_RESTORE_PRIVILEGE             18
    1656 #define SE_SHUTDOWN_PRIVILEGE            19
    1657 #define SE_DEBUG_PRIVILEGE               20
    1658 #define SE_AUDIT_PRIVILEGE               21
    1659 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE  22
    1660 #define SE_CHANGE_NOTIFY_PRIVILEGE       23
    1661 #define SE_REMOTE_SHUTDOWN_PRIVILEGE     24
    1662 #define SE_UNDOCK_PRIVILEGE              25
    1663 #define SE_SYNC_AGENT_PRIVILEGE          26
    1664 #define SE_ENABLE_DELEGATION_PRIVILEGE   27
    1665 #define SE_MANAGE_VOLUME_PRIVILEGE       28
    1666 #define SE_IMPERSONATE_PRIVILEGE         29
    1667 #define SE_CREATE_GLOBAL_PRIVILEGE       30
    1668 #define SE_MAX_WELL_KNOWN_PRIVILEGE      SE_CREATE_GLOBAL_PRIVILEGE
    
     
    _________________________
    #3 Gar|k, 19 Mar 2013
    Last edited: 19 Mar 2013
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    кстати фишка с обходом вызова из kernel32,user32 etc через int 2eh не пашет под НТ?

    upd- проверил-работает.нихерово)
     
    #4 DooD, 19 Mar 2013
    Last edited: 19 Mar 2013
  5. pft

    pft New Member

    Joined:
    18 Mar 2013
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    парни сорри за тупость но не че не понял. asm не давно штурмую. DooD, пробовал, бро, уже эти варианты, равнодушна она к этому. Gar|k спасибо конечно, но если можно то чуть подробнее и желательно в синтаксисе asma. заранее всем благодарен.
     
  6. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    короче на.все равно не поймешь.
    Code:
    EnableDebugPrivilege proc
        local hTokenNew:HANDLE
        local tkpNew:TOKEN_PRIVILEGES
    
        invoke GetCurrentProcess
        mov ecx,eax
        invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hTokenNew
        .if eax != 0
          invoke LookupPrivilegeValue,0, addr szPriv,addr tkpNew.Privileges.Luid
          .if eax != 0
            mov tkpNew.PrivilegeCount,1
            mov tkpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED
            invoke AdjustTokenPrivileges,hTokenNew,0,addr tkpNew,0,0,0
            .if eax != 0
              invoke GetLastError
              .if eax == ERROR_SUCCESS
                mov eax,1
              .else
                xor eax,eax
              .endif
            .endif
          .endif
          push eax
          invoke CloseHandle,hTokenNew
          pop eax
        .endif
        ret
    EnableDebugPrivilege endp
    
    
     
  7. pft

    pft New Member

    Joined:
    18 Mar 2013
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0

    не работает) также любой из процессов кроме системного.
     
  8. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    win xp sp3- все работает.не знаю в чем твоя проблема.пробуй методом что Гарик сказал.
     
    #8 DooD, 20 Mar 2013
    Last edited: 20 Mar 2013
  9. pft

    pft New Member

    Joined:
    18 Mar 2013
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    ок, попробую разобраться.
    тока почему забудь - я не понял?
    когда прогоняешь прогу по отладчику csrss удаляется, так как на момент работы в ollydbg, она работает в режиме отладчика, значит и тут задача решаема.
     
  10. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    хм.да по идее должно.что то странное.на 7 не запахало.лень разбираться уже.может завтра.хотя на xp работает.
     
  11. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Что есть 'фишка с обходом
    вызова из
    kernel32,user32 etc через
    int 2eh под НТ', которая запахала?
     
  12. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    фишка в том что бы на прямую обратиться к обработчику прерывания int 2eh.
     
  13. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    И что обойти реально таким образом? Ринг 3 хуки проактивок на экспортируемые библиотеками нативные функции которые дергают сервисы ядра (ntdll, user32) чтоле или что? Вы видали когда нибудь чисто р3 проактивку без драйвера?
     
  14. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    да я не о том.функи из kernel'a и т.п. сами по себе заглушки.схема вызова примерно такова:
    createfile->ntcreatefile->( шлюз,вызов int 2eh)->zwcreatefile.
    обращаясь напрямую к обработчик int 2eh можно избежать вызова из kernel и ntdll. как то так;)
    хотя извращение такое,что ну его в баню,действительно проще дров создать.
     
  15. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Да, уж, точно. Дергать сервисы просто так смысла мало:)
     
  16. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    я это ж к чему завел:по идее,если сразу ринуться то int 2eh то можно выполнять действия без получения привилегий дебаггера, т.к. по сути мы пользуемся ядерными функциями.
    параша конечно,но для себя,забавы ради,можно)
    как г-рится если нельзя,но очень очень хочется-тогда можно)
     
  17. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Попробуй этим кодом выставить привилегии
    Code:
    .data
    szSeDebug byte "SeDebugPrivilege",0
    ...
    
    AdjustPrivileges proc
    local hToken:dword
    local SeDebugNameValue:qword
    local tkp:TOKEN_PRIVILEGES
    local adlen:dword
    local myACL:ACL
    
    	; Set debug status
    	invoke RtlZeroMemory,addr myACL,sizeof ACL
    	push 2
    	push sizeof ACL
    	lea eax,myACL
    	push eax
    	call InitializeAcl
    
    	invoke GetCurrentProcess
    	push eax
    	xchg eax,edx
    	push 0
    	lea eax,myACL
    	push eax
    	push 0
    	push 0
    	push 4
    	push 6
    	push edx
    	call SetSecurityInfo
    
    	; Adjust debug privilege
    	pop edx
    	lea eax,hToken
    	push eax
    	push TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY
    	push edx
    	call OpenProcessToken
    
    	lea eax,SeDebugNameValue
    	push eax
    	push offset szSeDebug
    	push 0
    	call LookupPrivilegeValue
    
    	lea esi,SeDebugNameValue
    	lea edi,tkp.Privileges[0].Luid
    	mov ecx,8
    	rep movsb
    	mov tkp.PrivilegeCount,1
    	mov tkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
    
    	lea eax,adlen
    	push eax
    	lea eax,tkp
    	push eax
    	push sizeof TOKEN_PRIVILEGES
    	push eax
    	push FALSE
    	push hToken
    	call AdjustTokenPrivileges
    	
    	ret
    AdjustPrivileges endp
    
    И кстати, GetLastError же должен вполне ясно сообщить, в чем проблема с завершением процесса.
     
    _________________________
  18. pft

    pft New Member

    Joined:
    18 Mar 2013
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Kaimi, "от перестановки слагаемых - сумма не меняется." - так я тоже пробовал. системный процесс остался стоять.) Вселенская печаль((
     
  19. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Про csrss не скажу, но другой системный процесс у меня на Win 7 x64 без проблем завершается при запуске от администратора с UAC
     
    _________________________
  20. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,310
    Reputations:
    327
    хз, я sysenter/syscall использую. в любом случае можно посмотреть какой обработчик стоит на прерывании. !idt в KD.