linux内核泄露地址的方式

Linux内核调试技巧 Linux内核调试是一个需要耐心和细致观察的过程。本文介绍了设备驱动程序的基础知识,并通过示例展示了字符设备驱动的开发过程。我们还探讨了几种常用的内核调试技巧,这些技巧在日常的内核开发和调试中都非常有用。希望这篇文章能帮助你在Linux内核调试的道路上更进一步。 阅读详情

早些的时候可以利用dmesg通过缺页错误来泄露内核地址,但新一点的内核把这个修复了。最近看了下,遇到了目前常用的方式,详细分析下。

shmat

大部分搜到的记录是利用

struct shm_file_data {
    int id;
    struct ipc_namespace *ns;
    struct file *file;
    const struct vm_operations_struct *vm_ops;
};
#define shm_file_data(file) (*((struct shm_file_data **)&(file)->private_data))
使用方法:

 int shmid;
  if ((shmid = shmget(IPC_PRIVATE, 100, 0600)) == -1) {
    perror("shmget");
    return 1;
  }
  char *shmaddr = shmat(shmid, NULL, 0);
  if (shmaddr == (void*)-1) {
    perror("shmat");
    return 1;
  }

这个是进行了堆喷。
内核中在shmat操作后发生了如下内存分配:

struct shm_file_data {
int id;
struct ipc_namespace *ns;
struct file *file;
const struct vm_operations_struct *vm_ops;
};     //32

sfd = kzalloc(sizeof(*sfd), GFP_KERNEL);
sfd->id = shp->shm_perm.id;
sfd->ns = get_ipc_ns(ns);
sfd->file = base;
sfd->vm_ops = NULL;
file->private_data = sfd;

shm_file_data为一个32字节的数据结构,其中ns保存了init_ipc_ns指针。

为了得到这个堆喷的结构体中的数据,我们还需要利用uaf和任意地址读。强行读取0x4242424242424242类似地址的数据,获取堆喷数据。

msg_msg堆喷

https://bbs.pediy.com/thread-269311.htm
这里有篇文章记录了利用uaf修改 msg_msg内核数据的过程。
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
在这里插入图片描述
msgsnd 在内核中可以生成类似链表的结构来保存用户态数据。0x31-0x1000(kmalloc-64及以上)

在这里插入图片描述

int store_msg(void __user *dest, struct msg_msg *msg, size_t len)
{
    size_t alen;
    struct msg_msgseg *seg;
 
    alen = min(len, DATALEN_MSG);
  //首先拷贝alen长度
    if (copy_to_user(dest, msg + 1, alen))
        return -1;
    //如果有msg_msgseg,那么紧接着dest+alen放如果有msg_msgseg
    for (seg = msg->next; seg != NULL; seg = seg->next) {
        len -= alen;
        dest = (char __user *)dest + alen;
        alen = min(len, DATALEN_SEG);
        if (copy_to_user(dest, seg + 1, alen))
            return -1;
    }
    return 0;
}

msgrcv在 (MSG_COPY&msgflg)存在的时候会利用副本来回传 msg数据, 其中创建的副本大小可以受到用户态控制,当存在uaf时候,就有一定几率编辑这个可控大小的内核数据块。我们只需要修改msg 头部的指针,指向可能的 存在 shm_file_data的堆喷数据块,对其中的数据进行判断(地址随机化只进行基地址随机化,所以低32位可以作为判断依据),即可泄露init_ips_ns的地址。

任意地址写操作

在这里插入图片描述
这里作者利用suerfaultfd, 暂停了copyfromuser, 利用uaf造成的地址写能力,实现了伪造地址的数据修改。

Linux内核态内存泄露检测工具——Kmemleak 在Linux内核开发中,Kmemleak是一种用于检测内核中内存泄漏的工具。内存泄漏指的是程序中已经不再使用的内存没有被妥善地释放,导致内存的浪费。内核中的内存泄漏同样会导致系统性能下降、系统崩溃等问题。Kmemleak能够检测内核中的内存泄漏,通过检测内核中未被释放但又无法找到其使用位置的内存,进一步定位、修复内存泄漏的问题。在用户空间,我们常用Valgrind来检测;在内核空间,我们常用Kmemleak来检测。 阅读详情

相关推荐

linux 内核 内存泄露检测

linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测

堆技巧 数组反向越界泄露地址

痛苦痛苦痛苦,调了半天才找到数组起始地址,还是自己太菜了,好好记录一下这题题目给了libc,2.31的题嗯,可以考虑覆盖got表或者hook函数打开ida发现是c++的题,认真分析一下。

tbsqigongzi的博客 423

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3366

Double Free浅析(泄露堆地址的一种方法)

Double Free其实就是同一个指针free两次。虽然一般把它叫做double free。其实只要是free一个指向堆内存的指针都有可能产生可以利用的漏洞。double free的原理其实和堆溢出的原理差不多,都是通过unlink这个双向链表删除的宏来利用的。只是double free需要由自己来伪造整个chunk并且欺骗操作系统所以好像和普通的堆溢出伪造chunk然后free触发unlink...

omnispace的博客 7763

DDR4 硬件设计笔记

DDR4-DRAM是第四代支持双倍数据读取,支持随机位置存取的静态存储器。DDR4-DRAM的工作原理。DDR之T拓扑和Fly-by拓扑。DDR的硬件设计。DDR4 PCB设计要点介绍。DDR4之PCB走线间距的串扰评估。DDR4之内存通道(channel)和内存列(rank)。

qq_26815321的博客 1万+

rk3568 RGMII KSZ8795 MAC TO MAC

参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》

明天乌儿会歌唱 6493

Largebin attack & house of cat

largebin attack house of cat

qq_42220888的博客 482

WiFi信道状态信息 基于Intel 5300的CSI Tool 安装及使用(一)

经过半个月的坎坷安装过程,连Windows系统都没装过的本人终于颤颤巍巍把CSI TOOL装好了,下面记录一下适于我所使用设备的安装过程。设备:一台THINKPAD X201,一台师兄借的华硕主板的台式机首先,如果你和我一样对linux其实一窍不通的话,建议先反复看教程里的安装代码,照猫画虎很难一步实现的,中途一定会有这或那的问题需要解决,所以该了解的基础linux指令还是要了解,起码安装过程中的那些指令可以去查一查。.........

Silver_777的博客 2万+

【kernel exploit】CVE-2021-4154 错误释放任意file对象-DirtyCred利用

CVE-2021-4154 DirtyCred 利用方法

panhewu9919的博客 1173

12、信号采样与Z变换的全面解析

本文全面解析了信号采样和Z变换的核心概念与应用。内容涵盖采样基础、采样频率与奈奎斯特率的关系、离散时间处理模拟信号的方法、采样率转换技术,以及Z变换的定义、性质、常见变换对和逆变换计算。通过实例分析和流程图展示,帮助读者深入理解数字信号处理的关键步骤,为相关领域的学习与应用打下坚实基础。

Jerry的专栏 118

YOLO系列算法改进 | C3k2改进篇 | 融合DEConv细节增强卷积模块 | 细节增强+多分支差分卷积融合,标准卷积的完美涨点替代! | TIP 2024

YOLO系列算法改进 | C3k2改进篇 | 融合DEConv细节增强卷积模块 | 细节增强+多分支差分卷积融合,标准卷积的完美涨点替代! | TIP 2024 (以YOLO26最新目标检测模型为基础,融合C3k2_DEConv创新模块进行改进)

2502_91881744的博客 310

【kernel exploit】CVE-2022-25636 nftables OOB 写堆指针漏洞利用

`nf_table` 模块的 `net/netfilter/nf_dup_netdev.c`中的 [nft_fwd_dup_netdev_offload()](https://elixir.bootlin.com/linux/v5.16.11/source/net/netfilter/nf_dup_netdev.c#L67) 函数由于计算分配空间与实际初始化时判断条件不一致,存在**OOB write**(系统必须支持包处理卸载-Network Interface Cards (NICs),但是现实中很少见

panhewu9919的博客 1312

1、工作流介绍

工作流起源于办公自动化,是对软件中业务流程的抽象。通过工作流将各个任务有序组织起来形成一个完整的业务闭环。比如:请假审批流程,网上购物流程,银行贷款流程;!

leyoliu的博客 5109

linux kptr_restrict使用

在内核Documentation/sysctl/kernel.txt中对其使用有介绍,如下所示: kptr_restrict: This toggle indicates whether restrictions are placed on exposing kernel addresses via /proc and other interfaces. When kptr_res...

flyingnosky的专栏 2532

USB_TYPE-C 母座电路设计

本文详细介绍了USB Type-C接口(C2765186)的电路设计要点,重点解析了电源、识别和数据三部分的关键连接方案。电源部分需并联VBUS和GND引脚并加宽走线以承载3A电流;识别部分必须为CC1/CC2引脚配置5.1kΩ±1%精度的下拉电阻,这是触发PD充电的核心条件;数据部分通过短接正反插引脚实现盲插功能。文档还提供了完整的引脚对照表,并强调PCB布局需注意ESD防护、差分走线阻抗控制等要点,为Type-C接口设计提供了实用指导。

在读研究生,FPGA电路设计与功能开发。 586

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

KASLR技术解析:内核地址空间随机化的原理与应用

地址空间布局随机化(ASLR)是现代操作系统的基础安全机制,通过随机化内存地址布局增加攻击者利用内存漏洞的难度。KASLR(Kernel Address Space Layout Randomization)是ASLR在内核层的实现,它随机化内核代码、数据结构和模块的加载地址,有效防御代码注入和ROP攻击。在x86-64架构上,KASLR能提供28位熵值的随机化空间。Linux从3.14版本开始支持KASLR,结合FGKASLR(函数粒度随机化)和KPTI(内核页表隔离)等增强技术,形成了深度防御体系。虽然

weixin_28716443的博客 4

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

现代缓解机制的组合拳(五):内核级缓解 KASLR 与 SMEP/SMAP 剖析

内核漏洞利用(Kernel Exploitation)与用户态利用的核心区别在于硬件特权级(Ring 0 vs Ring 3)的切换与隔离机制。在 Linux 内核演进过程中,KASLR(Kernel Address Space Layout Randomization)、SMEP(Supervisor Mode Execution Prevention)和 SMAP(Supervisor Mode Access Prevention)构成了防御内核空间遭受代码执行攻击的三大底层支柱。

2301_80245214的博客 287

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

内核保护机制详解:KASLR、KPTI、SMAP/SMEP、CFI、Stack Canary 原理

现代 Linux 内核之所以越来越难被攻破,不是因为没有了漏洞,而是因为内核引入了层层叠叠的保护机制。绝大多数内核漏洞利用链,本质就是 “逐层击破” 这些保护机制的过程:先泄露一个地址破坏 KASLR,再绕过 NX/SMEP 找到可执行路径,还要躲过 KPTI 的页表隔离、绕开 CFI 的控制流校验、避开 Stack Canary 的栈保护。任何一层保护缺失,都会让内核利用难度大幅下降;反之,全部开启时,即便存在越界写漏洞,攻击者也很难在短时间内稳定提权。很多安全学习者在读内核 POC 时,看到。

fly_enum的博客 303

Linux内核copy_to_user深度解析:从原理到驱动实战

在Linux内核开发中,用户态与内核态的数据交互是驱动编程的核心场景之一。由于现代CPU通过MMU实现了严格的地址空间隔离,内核无法直接解引用用户空间指针,必须依赖专门的uaccess接口。copy_to_user作为最常用的安全拷贝函数,背后涉及地址校验、缺页异常处理、SMAP防护等复杂机制。理解其完整调用链,不仅有助于防范内核任意地址读写等安全漏洞,更是编写健壮字符设备驱动和ioctl处理函数的基础。本文从用户态与内核态隔离的底层原理出发,逐步拆解copy_to_user的源码实现、异常表机制以及原子上

weixin_31856057的博客 274

linux下内存的统计和内存泄露类问题的定位

在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本。在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进程相关的文件进行分析,精确评估系统消耗内存的大小,还可以对内存泄露类问题的解决提供一种定位手段。        Linux在内存使用上的原则是:如果内存充足,不用白不用,尽量使用内存来缓存一些文件,

572

Linux内核中利用msg_msg结构实现任意地址读写

文章首发于安全客:Linux内核中利用msg_msg结构实现任意地址读写 题目及exp下载 —— https://github.com/bsauce/CTF/tree/master/corCTF 2021 介绍:本文示例是来自corCTF 2021中 的两个内核题,由 BitsByWill 和 D3v17 所出。针对UAF漏洞,漏洞对象从kmalloc-64到kmalloc-4096,都能利用 msg_msg 结构实现任意写。本驱动是基于NetFilter所写,有两个模式,简单模式(对应题目Fire_of_

panhewu9919的博客 2399

解决Linux内核vmalloc泄露:3步定位与修复实战指南

服务器频繁OOM崩溃?监控显示`vmalloc`内存持续增长却找不到原因?本文将带你通过`vmallocinfo`日志分析,从现象到源码级修复,系统性解决Linux内核虚拟内存泄露问题。 ## 什么是vmalloc与内存泄露风险 `vmalloc(虚拟内存分配器)`是Linux内核中用于分配非连续物理内存的机制,广泛用于设备驱动、模块加载等场景。与直接映射的`kmalloc`不同,`vmall...

gitblog_00270的博客 1139
上一篇: kernel exploit 有用的结构体
下一篇: CVE-2021-26708 利用四字节释放特定地址,修改内存
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值