ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows Shellcode 에러
    Hack/Windows 2016. 5. 27. 01:01

    shellcode 를 만드는법에 대해서 알아보았는데 강의를 보아선 정말 간단했다.


    리눅스는 쉘코드를 직접만들지않고 다른사람의것을 가져와도 되지만 윈도우즈는 조금 틀렸다.


    윈도우즈는 각자의 환경에따라 kernel32.dll이 바이너리에 맵핑될때 주소가 다르고, ImageBase 값도 다르며 각 함수의 오프셋도 다르기때문에 직접 작성해주어야한다.




    -------



    쉘코드 만드는법에 대해서는 다른 강의가많으니 구지 설명을 따로 할 필요없이, 함수의 offset 과 kernel32.dll의 ImageBase대로 똑같이 계산했는데 쉘코드가 정상작동하지않아 화가날때 참고하라는 글입니다!


    우선 모두가 하는일이 아래와같은 코드를 짜서 Disassembly한 결과로 테스트를 해볼거에요 아마


    #include <Windows.h>

    int main() { char buf[5]; buf[0] = 'c'; buf[1] = 'a'; buf[2] = 'l';

    buf[3] = 'c'; buf[4] = '\0'; WinExec(buf,SW_SHOWNORMAL); exit(1); }


    WinExec(실행시킬프로세스명, 실행특징); 으로 구현이되는데, 코드는 설명이 필요없을거같네요..


    일단 쉘코드 강의를보면 kernel32.dll에 exit(1);와 WinExec 함수가 포함되어있는데 그래서 kernel32.dll ImageBase + Function Offset 을 하는거에요 

    근데 이렇게했는데 쉘코드가 정상작동을안해... 막 크래쉬가 난다! 그럼 스크롤 쭊쭉 더 하시면되요



    저같은경우는 아래와같이 해결했어요. 우선 저 프로그램을 작성해서 올리디버거로 열어줘요




    그럼 이렇게 다양한 인스트럭션이있을거아니에요? EBP-8~-4 까지 calc\0 이라는 문자열을 집어넣어주고 문자열이 들어간 주소를 구해서 WinExec의 첫번째 인자로넣어서 실행을 시켜주는 코드에요 당연하다고 생각하실 분들도있지만 전 이생각을 늦게해서 하루동안 삽질했네요 ㅎㅎ..


    일단 WinExec의 IAT를 확인하면되요 그냥 ExitProcess 도 알아주구요



    call eax 를 하기전에 레지스터 상황이에요 kernel32.WinExec 의 주소인데 그냥 쉽게 이렇게 구해줄수있어요


    그리고 코드를 작성하면되죠  


    #include <windows.h>
    
    void main(){
    __asm{
        push ebp
        mov ebp,esp
        sub esp,48h
        mov byte ptr [ebp-8],63h
        mov byte ptr [ebp-7],61h
        mov byte ptr [ebp-6],6Ch
        mov byte ptr [ebp-5],63h
        mov byte ptr [ebp-4],0
        push 1
        lea eax,[ebp-8]
        push eax
        mov eax,0x761431F9 
        call eax
        push 1
        push eax
        mov eax,0x760c79d8 
        call eax
    }
    }


    이렇게 작성해주고 옵코드 따와서 실행시켜주면 정상적으로 실행되는것을 확인할수있어요



    반갑죠 이 계산기.. 


    그리고 가끔 64비트를 사용하시는분들, ExitProcess 가 ntdll에 속해있을때가있는데 당황하지마시고 재부팅한번 해보세요 

    저도 재부팅한번해봤는데 맵핑이 갑자기 kernel32.dll로 되더라구요...


    뭐 그래도 안된다하시면 그냥 ntdll 오프셋으로 하시면되겠죠 어느 바이너리든 해당 dll들은 임포트되니까 상관없어요


    그럼 삽질 그만하시길!






    'Hack > Windows' 카테고리의 다른 글

    SEH(Structured Exception Handling)  (0) 2016.06.01
    Windows BOF (ASLR)  (0) 2016.06.01
    Windows Calc Shellcode  (0) 2016.06.01
    Windows BOF Exploit with Shellcode  (0) 2016.05.27
    Windows BOF  (0) 2016.05.24

    댓글

Designed by Tistory.