/images/avatar.jpg

the more u learn, the less u know

玄武实验室安全研究员, 专注于内核与Httpd漏洞挖掘

转载必须注明原链接

linux 内核提权总结(demo+exp分析) -- ROP(一)

发表于看雪论坛 基础ROP篇(linux 5.0.21) 内核提权与用户态攻击的区别 攻击流程 用户态攻击: 执行 system("/bin/sh") 获得shell 内核提权: 内核执行 commit_creds(prepare_kernel_cred(0)) 使进程获得root权限 用户态进程执行system("/bin/sh") 获得root权限 shell 理解难点 内核rop链构造 用户态进程与内核之间的切换 一. 漏洞分析 (建议初学者先了解基础的驱动程序知识) 查看驱动安全机制 checksec rop.ko [*] '/home/povcfe/linux/flod/rop.ko' Arch: amd64-64-little RELRO: No RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x0) 发现开启canary和NX 查看qemu启动脚本boot.sh boot.sh qemu-system-x86_64 \ -kernel bzImage \ -initrd rootfs.

glibc2.23 ptmalloc 原理概述

发表于看雪论坛 linux用户态下的堆溢出利用即是对ptmalloc2安全机制的绕过,只有深入的了解ptmalloc,才能进行精准的堆溢出攻击 malloc __libc_malloc(传入参数:size) 判断 是否定义hook函数 ,如果存在则调用hook函数,否则跳到2 void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); 执行arena_get得到空闲分配区 arena_get (ar_ptr, bytes); 调用_int_malloc()获得内存地址 victim = _int_malloc (ar_ptr, bytes); 如果分配失败,ptmalloc会尝试再去寻找一个可用的arena并进行内存分配 if (!victim && ar_ptr != NULL) { LIBC_PROBE (memory_malloc_retry, 1, bytes); ar_ptr = arena_get_retry (ar_ptr, bytes); victim = _int_malloc (ar_ptr, bytes); } 得到内存地址后解锁分配区 if (ar_ptr !