-
Mac mprotectHack/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