PWN动态调试

news/2025/2/22 14:58:32

这篇文章就是来教大家学习怎么动态调试的,然后我还写了一篇关于动态调试的文章,不是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.niftyadmin.cn/n/5252473.html

相关文章

角谷定理 C语言xdoj32

角谷定理定义如下: 对于一个大于1的整数n,如果n是偶数,则n n / 2。如果n是奇数,则n 3 * n 1,反复操作后,n一定为1。 例如输入22的变化过程: 22 ->11 -> 34 -> 17 -> 52 -> 26 …

【C语言】字符串函数strcpystrcatstrcmpstrstr的使⽤和模拟实现

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

几分钟在Ubuntu搭建本地Emlog博客网站并发布至公网无需购买域名服务器

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

链表面试题的总结和思路分享

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

游戏被攻击该怎么办?游戏盾该如何使用,游戏盾如何防护攻击

随着Internet互联网络带宽的增加和多种DDOS黑客工具的不断发布,DDOS拒绝服务攻击的实施越来越容易,DDOS攻击事件正在成上升趋势。出于商业竞争、打击报复和网络敲诈等多种因素,导致很多商业站点、游戏服务器、聊天网络等网络服务商长期以来一…

分享下我发现的16个AI辅助编程的网站

这些工具和服务覆盖了多个方面,包括编程辅助、代码生成、问题解决、Git指令辅助、代码安全扫描等,为开发者提供了丰富的选择。 Codegeex (codegeex.cn/zh-CN): 类型:AI编程助手支持语言:Python, C/C, Java, Go, JavaScript等特点…

Qt 通过命令行编译程序

前言 从服务器拉代码到编译成可执行文件一个脚本解决问题。使用的项目文件见上一个文章 Qt生成动态链接库并使用动态链接库 脚本代码 为了方便易懂这是一个很简单的Qt编译脚本 call E:\vs2015\VC\vcvarsall.bat x86 rmdir /s /q my-project git clone gitgitee.com:wenbai1…

华为OD机试 - 密码解密(Java JS Python C)

题目描述 给定一段“密文”字符串 s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。 映射的规则(a ~ i)分别用(1 ~ 9)表示;(j ~ z)分别用("10*" ~ "26*")表示。 约束:映射始终唯一。 输入描述 “密文”字符串 输出描述 …