PWN动态调试

news2024/11/28 20:49:16

这篇文章就是来教大家学习怎么动态调试的,然后我还写了一篇关于动态调试的文章,不是buu上面的题,就是两道简单的栈溢出问题,那两道题挺有特点的。大家可以去看看。

每日3道PWN之课外2道(第2.5天)-CSDN博客

先找一个简单的jarvisoj_level0调试一下,然后咱再看复杂的pwn1_sctf_2016

听说又不考pwn了,所以只写完了jarvisoj_level0,现在我就转行去学逆向了

so,停工了~~~私密马赛!

要求环境gdb和pwotool+pwndbg

jarvisoj_level0

先回忆一下

进去后按f5,查看反编译的代码

看一下vulnerable_function这个函数

找后门shift+f12

双击跟进

记录地址0x40059A

大概回忆起来了吧,就是read溢出,做题思路我的另一个博客写过,大家可以去看,

每日3道PWN(第二天)-CSDN博客


动态调试

现在我们进行动态调试

动态分析的正常流程,gdb打开文件

查看变量大小的两种方法

方法1(常规大main的断点+老老实实的查看)

b main 设置断点

阿这,他说我权限不够,稍等我一下哈,先chmod +x level0一下

然后再来一遍,run一下,我们就能看见main函数的汇编和栈什么的

下面这张不是本题的图,但是有结构大概解释

注意:asm的英文就是汇编的意思,registers是寄存器的意思,stack是栈的意思

看见漏洞函数了,为什么知道他是漏洞函数,当然因为前面我都博客里IDA静态分析过了~

而且这个函数的中文意思就是易受攻击的函数

我们就一直输入n,然后知道绿色的箭头指到漏洞函数vulnerable_function

按s,s就是step,si单步步进,进入该函数里面,看见了吧,漏洞利用点,read函数

tips:fini是退出当前函数,r是重新运行,如果弄错的,可以试试这两个

stack 24 命令查看当前栈的前24个栈帧

为什么要stack 24呢

我们的目的,就是查看当前变量buf的大小,前提就是要进入该函数内,就是n一直下一步,直到指向函数之后,输入s,单步进入函数,才能看见变量buf。所以要stack

然后为什么24,听我的大佬说,不管输入几,目的只要看见ebp或者rbp就算可以了,然后我们就用ebp(或者rbp)的地址减去eax(或者rax)的地址,来计算变量的大小

就像这样

咱直接看后两位相减就行,也就是0xb0-0x30=0x80=128

大小0x80,我们去看看对不对

对的。木的问题

vmmp

使用vmmap直接查看该进程的内存空间,不知道有啥用,晚点问问大神

1.查看栈、bss段是否可以执行,栈溢出包括BSS溢出


方法2(断点的其他方式)没成功

参考

栈溢出学习_loglevel:'debug-CSDN博客

cyclic这个工具,pwntools自带的一个东西

常用的作用有两个:

  1. 寻找偏移量(Offset):当你想要利用栈溢出等漏洞时,通常需要知道目标程序中栈上缓冲区的偏移量,以确定准确的覆盖位置。使用"cyclic"工具可以生成一种重复的模式,并将其发送给目标程序,然后在程序崩溃时,通过查找崩溃时覆盖的位置,就能够计算出偏移量。

  2. 覆盖返回地址:在进行栈溢出漏洞利用时,通常需要将恶意代码的地址写入到返回地址中,从而实现控制程序流程的目的。使用"cyclic"工具可以生成指定长度的重复模式,并将其作为返回地址,使程序跳转到我们控制的位置。

寻找偏移量,以下是实例代码:

from pwn import *

pattern = cyclic(100)  # 生成长度为100的重复模式,就相当于b'A'*n
print(pattern)

# 在漏洞利用中发送模式给目标程序
p = process('./vulnerable_program')
p.sendline(pattern)
p.recv()  //接受数据的意思,就是有时候他会有一个提示的字符串,需要你先进性接收
p.close() //关闭接受的意思

# 漏洞触发后,获取返回地址所在的偏移量
offset = cyclic_find(packed_address)  # packed_address为返回地址
print(offset)

然后我要讲的是gdb中cyclic的使用,目标是0x80=128,可以多一点,进行溢出,也可以刚刚好等于128

这里生成128位垃圾数据,一会直接拿来复制粘贴

这次也再学习以下打断点的其他方式

先去IDA中查找漏洞利用函数的地址,我们打地址的断点

先找到漏洞利用的read函数

然后右键选择copy to assembly(复制到程序集的意思,咱也不知道程序集是啥意思,但作用把每一行源代码就是编译成成汇编码,并进行注释说明)

call的汇编码意思是函数的意思,后面还有read字样

那就是他了,记一下地址0x4005bf

gdb打断点去

tip:对了,断点就是让程序运行道某给位置后停止,然后一步一步进行,是为了让程序员调试用的

打断点b *地址,别忘了*

然后我们在n的时候,就直接让我们输入东西了

找到栈,找道地址0x7fffffffdf30

然后用cyclic

或者当时直接这样查看

跟着博主没成功,私密马赛,学艺不精

pwn1_sctf_2016(未整理)

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

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

相关文章

uniApp项目的创建,运行到小程序

一、项目创建 1. 打开 HBuilder X 2. 右击侧边栏点击新建,选择项目 3. 填写项目名,点击创建即可 注:uniapp中如果使用生命周期钩子函数,建议使用哪种 ?(建议使用Vue的) 二、运行 1. 运行前先登录 2. 登录后点击 manifest.js…

基于SSM的酒店管理旅店系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

模块一——双指针:202.快乐数

文章目录 题目描述简单证明补充知识算法原理代码实现 题目描述 题目链接:202.快乐数 为了方便叙述,将对于⼀个正整数,每⼀次将该数替换为它每个位置上的数字的平方和这⼀个操作记为x操作; 题目告诉我们,当我们不断重…

Python之random和string库学习

一、random库 random是python中用来生存随机数的库。具体用法如下: 1、生成一个0到1随机浮点数 random.random() 2、生成一个a到b的随机浮点数 random.uniform(1,2) 3、生成一个a到b之间的整数 random.randint(a,b) 4、随机从序列元素中取出一个值,…

基于SpringBoot+Vue的学校在线学习系统

开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本系统拥有管理员,教师,学生三种身份登录,管理员登录可以查看所有信息,教师登录可以发布作业,查看试卷,回答问题等,学校登录可以查看作业&…

低代码还是好用的,我持有这个观念

低代码开发是近年来迅速崛起的软件开发方法,让编写应用程序变得更快、更简单。 有人说它是美味的膳食,让开发过程高效而满足,但也有人质疑它是垃圾食品,缺乏定制性与深度。 你认为低代码到底是美味的膳食还是垃圾食品呢&#xff0…

minio的k8s的单机部署

minio的k8s的单机部署 apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: itshare spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: minio/minio:RELEASE.2022-10-15T19-57-03Z…

基于Java swing的医院信息管理系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

c++-定长内存池

文章目录 前言一、定长内存池 前言 一、定长内存池 我们知道申请内存使用的是malloc,malloc其实就是一个通用的申请函数,什么场景下都可以用,但是什么场景下都可以用就意味着什么场景下都不会有很高的性能,下面我们来设计一个定…

Windows安装Maven

一、Maven 是什么? Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。 在有多个开发团…

Flutter笔记:滑块及其实现分析1

Flutter笔记 滑块分析1 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134900784 本文从设计角度&#…

一个通用游戏后台的设计模式实践总结

搞业务开发的时候,发现有一些代码的开发会让人感觉非常简便舒服,有一些代码的开发却有时候会让人感觉心智负担比较大。 逐步总结的过程中,发现让开发人员写起来感觉舒服的代码,大概率是因为当前模块与其他模块代码耦合度低,开发人员无需花费过多的精力去关注其他模块的实现…

基于java swing 药品销售管理系统

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Integer和int相比较

Integer和int相比较 一、 Integer类 在Java中,”万物皆对象“,但是八种基本数据类型是个例外,出于性能等方面的考虑,八种基本数据类型没有类和对象的概念,相应的变量值直接在栈内存中存放。但这带来了一些问题&#…

根据对数器找规律、根据数据量猜题目解法

题目一 小虎去买苹果,商店只提供两种类型的塑料袋,每种类型都有任意数量。1)能装下6个苹果的袋子2)能装下8个苹果的袋子小虎可以自由使用两种袋子来装苹果,但是小虎有强迫症,他要求自己使用的袋子数量必须…

NAND闪存市场2023年Q3增长2.9%,Q4有望激增20%

TrendForce报告显示,NAND闪存市场在2023年第三季度出现了关键转折,主要由三星的战略性减产决定驱动。最初,市场对终端用户需求的不确定性以及对平淡旺季的担忧导致买家采取保守的方法,库存低、采购慢。然而,随着三星等…

Go压测工具

前言 在做Go的性能分析调研的时候也使用到了一些压测方面的工具,go本身也给我们提供了BenchMark性能测试用例,可以很好的去测试我们的单个程序性能,比如测试某个函数,另外还有第三方包go-wrk也可以帮助我们做http接口的性能压测&…

「Verilog学习笔记」多bit MUX同步器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 输入数据暂存在data_reg中,使能信号data_en用打两拍的方式跨时钟域传输到时钟域B,最后data_out根据使能信号更新数据。data_en信号在A时钟域用一个D…

【QED】高昂的猫 Ⅰ

目录 题目背景题目描述输入格式输出格式 测试样例样例说明数据范围 思路核心代码 题目背景 这是小橘。因为它总是看起来很高傲,所以人送外号“高昂的猫”。 题目描述 "锕狗"的房间里放着 n n n ( 1 ≤ n ≤ 1 0 9 ) (1 \leq n \leq 10^9) (1≤n≤109)个…

忘记PDF密码了,怎么办?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和office一样,可以对文件进行加密,但是没有提供恢复密码的功…