kernel pwn gdb调试

news2024/9/22 5:55:39

前言

对于Linux的二进制程序,gdb调试是十分重要的,可以清楚的了解程序是如何运行的,这里单独拉一篇记录我在kernel pwn中遇到的一些调试

GDB选择

在三大件pwndbg,gef,peda中,用了一圈下来感觉gef和pwndbg都挺好

gdb安装

简单写一下gdb的安装吧

因为用的python模块,环境依赖要装个python3吧,起码3.6+,省去很多麻烦

先到root

sudo su

三个都克隆下来

cd ~
git clone https://github.com/pwndbg/pwndbg.git
git clone https://github.com/longld/peda.git
git clone https://github.com/hugsy/gef.git

配置一下环境变量

echo source ~/pwndbg/gdbinit.py >> ~/.gdbinit
echo source ~/peda/peda.py >> ~/.gdbinit
echo source ~/gef/gef.py >> ~/.gdbinit

然后我们vim编辑一下,要用哪个把其他的给注释掉就好

vim ~/.gdbinit

当然普通用户也可以按如上操作安装gdb

只是因为我们后续要在root下来用gdb vmlinux,不然可能会出现权限问题

vmlinux-to-elf

可以解压出带符号的vmlinux,简直神器,我的评价是比extract-vmlinux好用

安装

直接用vmlinux-to-elf官方的方法

有时候会无法连接,隔一会试一下就好

sudo apt install python3-pip
sudo pip3 install --upgrade lz4 zstandard git+https://github.com/clubby789/python-lzo@b4e39df
sudo pip3 install --upgrade git+https://github.com/marin-m/vmlinux-to-elf

使用

安装好了直接用

./vmlinux-to-elf <input_kernel.bin> <output_kernel.elf>

例:

vmlinux-to-elf bzImage vmlinux

如何调试

qemu要设置参数-s -S或-gdb tcp::1234 -S选项用于启动gdb服务

此外还要设置-append还要设置nokalsr,不然gdb也是确定不了符号的

接着我们启动qemu

然后在root下启动刚提取出来的gdb vmlinux

接着可以set architecture i386:x86-64,当然不设置也没关系

然后用的target remote localhost:1234连上即可,可以看到有符号了

请添加图片描述

某些trick

tty->write

当我们在调用tty的write时,例:write(tty_fd, page, 233);

我们可以断点下在b*pty_write,然后c,接着去运行我们的exploit程序

pwndbg可以直观的看到

rdi是这个tty_stcuct的地址

rsi是我填入的内容fuck

rdx是233(0xe9)

这里rdi可以配合一些push_rdi;pop_rsp之类的gadget完成栈迁移

请添加图片描述

tty->ioctl

当我们在调用tty的ioctl时,例:ioctl(tty_fd[i], 0xdead, 0xbeef);

我们可以断点下在b*pty_write,然后c,接着去运行我们的exploit程序

rdi是这个tty_stcuct的地址

rsi是我填入的内容0xdead

rdx是0xbeef

rcx是这个tty_struct里tty_operations的地址

请添加图片描述

这里rdi和rcx也能利用一下用作栈迁移

请添加图片描述

参考

Kernel pwn CTF 入门 | Kiprey’s Blog

教你学内核-tty,seq结构体利用 | -NIYAH-

攻防世界 x Nepnep x CATCTF 2022 Nepnep战队官方WP (wolai.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PaddleNLP教程文档

文章目录一、快速开始1.1 安装PaddleNLP并 加载数据集1.2 数据预处理1.3 加载预训练模型1.4 设置评价指标和训练策略1.5 模型训练与评估1.6 模型预测二、数据处理2.1 整体介绍2.2 加载内置数据集2.3 自定义数据集2.3.1 从本地文件创建数据集2.3.2 paddle.io.Dataset/IterableDa…

OpenShift Security - 用 RHACS 为应用自动生成 NetworkPolicy

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.12 RHACS 3.73.1 环境中验证 文章目录什么是 NP-Guard用 NP-Guard 自动生成 NetworkPolicy参考什么是 NP-Guard NP-Guard 是 IBM 发起的一个开源项目&#xff0c;用来自动创建 …

WindowsTerminal 安装 oh-my-posh

文章目录1 前言2 安装过程3 Posh Themes 自定义主题参考1 前言 在Linux中&#xff0c;有非常好用的oh-my-zsh&#xff0c;最近使用WindowsTerminal时想想有没有和oh-my-zsh相同好用的插件呢&#xff0c;答案是&#xff1a;oh-my-posh 2 安装过程 进入最新版PowerShell&#…

干货 | 解决 App 自动化测试的常见痛点(弹框及首页启动加载完成判断处理)

1. 常见痛点App 自动化测试中有些常见痛点问题&#xff0c;如果框架不能很好的处理&#xff0c;就可能出现元素定位超时找不到的情况&#xff0c;自动化也就被打断终止了。很容易打消做自动化的热情&#xff0c;导致从入门到放弃。比如下面的两个问题&#xff1a;一是 App 启动…

【代码题】链表面试题

目录 1.链表分割 2.相交链表 3.环形链表 4.环形链表 II 1.链表分割 点击进入该题 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的…

国内注册Steam账号的快捷方法

本文介绍在国内注册Steam账号的快速、简便方法。 目前&#xff0c;在国内注册新的Steam账号变得越来越麻烦&#xff1b;尤其在最近&#xff0c;无论是无休止的谷歌人机身份验证&#xff0c;还是无法收到的验证邮件&#xff0c;都使得新建一个Steam账号与原来相比变得更加困难。…

[Linux_]make/Makefile

[Linux_]make/Makefile 心有所向&#xff0c;日复一日&#xff0c;必有精进专栏&#xff1a;《Linux_》作者&#xff1a;沂沐沐目录 [Linux]make/Makefile 前言 一、Mikefile 二、如何写Mikefile文件 三、原理 四、项目清理 报错&#xff1a;missing separator 前言 一个工…

Linux 命令

最基础的命令 1.我是谁 我用什么账号登录 whoami 2.我在那 在那个目录下 pwd 3.环顾四周 1.ll展示详细信息 2.ls 展示文件名称 4.cd 想去那 改变目录 cd 回家 cd ./ 定位到当前目录 cd../ 上级目录 cd../../上两级目录。 5.切换用户 su 从普通用户切换到root用户的…

C#应用程序配置文件(XML序列化) - 开源研究系列文章

上次写了一个C#线程池及管理器的博文( C#开发的线程池和管理器 - 开源研究系列文章 )&#xff0c;收到了不小的浏览量&#xff0c;在此感谢各位网友的支持。这次将另一个功能放出来单独讲解&#xff1a;C#应用程序的配置文件&#xff0c;使用的是XML文件保存程序的配置信息&…

数据结构(栈、队列、链表)

文章目录前言数据结构(栈、队列、链表)1、栈2、队列3、链表3.1、单向链表结构3.2、双向链表结构前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&…

多边形点集排序

一、问题描述已知多边形点集P {P1, P2, ... , PN}&#xff0c;其排列顺序是杂乱&#xff0c;依次连接这N个点&#xff0c;无法形成确定的多边形&#xff0c;需要对点集P进行排序后&#xff0c;再绘制多边形。二、排序规则点集排序过程中&#xff0c;关键在于如何定义点的大小关…

STC32G 时钟系统

文章目录时钟系统代码配置总结时钟系统 系统时钟有4个时钟源可供选择&#xff1a; 内部高精度IRC内部32KHzIRC&#xff08;精度较低&#xff09;外部晶振内部PLL输出时钟 主要关心的是两个指标&#xff1a;SYSclk和HSCLK SYSclk是系统的时钟&#xff0c;决定了指令执行速度…

Android 深入系统完全讲解(三)

系统调用 操作系统提供了一些方法&#xff0c;让用户层可以调用&#xff0c;而为了安全起见&#xff0c;这些方法调用&#xff0c;都是在内核空间。于是&#xff0c;用户调用的时候&#xff0c;就会有个动作&#xff0c;叫做陷入内核。 当用户调用系统方法的时候&#xff0c;系…

【k8s-device plugin】如何编写 k8s device plugin

参考 Device Plugin 入门笔记&#xff08;一&#xff09; Device Plugin 入门笔记&#xff08;二&#xff09; 从零开始入门 K8s&#xff1a;GPU 管理和 Device Plugin 工作机制 Kubernetes开发知识–device-plugin的实现 https://github.com/oceanweave/cola-device-plugi…

基于springboot的智慧物业管理系统的设计与实现(前后端分离)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

mysql 中间件 mycat2 的详细安装及配置步骤

下载 首先打开mycat官网&#xff1a;MyCat2 右上角下载里面有个文件下载服务&#xff0c;点进去发现无法访问 这里需要配置一下host&#xff0c;把下面内容复制到host文件中。host文件位置在C:\Windows\System32\drivers\etc 210.51.26.184 mycat.org.cn www.mycat.org.cn …

第五篇 - 数组的劫持

一&#xff0c;前言 上篇&#xff0c;主要介绍了 Vue 数据初始化流程中&#xff0c;对象属性的深层劫持是如何实现的 核心思路就是递归&#xff0c;主要流程如下&#xff1b; 1.通过 data isFunction(data) ? data.call(vm) : data;处理后的 data 一定是对象类型 2.通过 d…

如何定位Bug——Qt

1. 前言 在写程序的过程中&#xff0c;不可避免出现各种Bug&#xff0c;如何快速的定位到Bug的位置&#xff0c;是程序员必备的技能之一。 2. 几种方法 2.1. 逻辑分析 根据程序所出的问题&#xff0c;分析问题可能所在的几个位置&#xff0c;通过逻辑分析找出Bug&…

从 Nginx Ingress 窥探云原生网关选型

作者&#xff1a; 魁予 现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而 K8s 和微服务是云原生的两大支柱&#xff0c;随着云原生浪潮而被广泛应用。 对多数应用而言&#xff0c;提供对外服务的使命并不会改变&#xff0c;相比于原来的单体应用&#xff0c;微服…

VUE3中,使用.env.development和.env.production

在实际项目开发过程中&#xff0c;可能开发环境和生产&#xff08;测试&#xff09;环境不一样&#xff0c;经常需要修改配置常量&#xff0c;才能满足对应的环境&#xff0c;才能使软件运行起来。在vue3中可以使用2个文件进行区分。 .env.development&#xff1a;开发环境 .…