ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mac mprotect
    Hack/Pwnable 2015. 12. 7. 10:59

    Mac도 리눅스에서 우리가 사용한것처럼 똑같이 mprotect를 사용할수있다.


    mprotect는 해당주소에 권한을 부여할수있는데, 주로 NX Bit가 걸려있을떄 사용하게된다.


    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <sys/mman.h>

    char shellcode[] = "\xeb\xfe";


    int main(int argc, char *argv[])

    {

            void (*f)();

            char *x = malloc(2);

            memcpy(x,shellcode,sizeof(shellcode));

            f = (void (*)()) x;

            f();

    }


    다음과같은 코드가있다.


    이를 그냥 실행하면 NX가 걸려있는상태이기때문에 세그먼트 폴트가 나게된다.


    HackCat:~ Songsangjun$ ./heap

    Segmentation fault: 11


    그럼 우리는 mprotect로 rwx 권한을 주면된다.


    코드를 아래와같이 작성하면 mprotect 함수가 해당 베이스주소에 4092 만큼의 사이즈로 권한을 바꿔준다.


    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <sys/mman.h>

    char shellcode[] = "\xeb\xfe";


    int main(int argc, char *argv[])

    {

            void (*f)();

            char *x = malloc(2);

            unsigned int page_start = ((unsigned int) x) & 0xfffff000000;

            mprotect((void *) page_start,4092,PROT_READ | PROT_WRITE | PROT_EXEC);

            memcpy(x,shellcode,sizeof(shellcode));

            f = (void (*)()) x;

            f();

    }


    그럼 더이상 세그먼트폴트가 나지않고 정상적으로 실행이된다.




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

    ARM Exploit  (0) 2016.01.11
    Embedded Firmware Bug Hunting  (0) 2016.01.05
    Mac ASLR  (0) 2015.12.07
    otool (object tool)  (0) 2015.12.07
    kext(kernel extension)  (0) 2015.12.07

    댓글

Designed by Tistory.