做移动网站建设,西安百度竞价托管,网站制作 苏州,wordpress备案号居中这篇文章就是来教大家学习怎么动态调试的#xff0c;然后我还写了一篇关于动态调试的文章#xff0c;不是buu上面的题#xff0c;就是两道简单的栈溢出问题#xff0c;那两道题挺有特点的。大家可以去看看。 每日3道PWN之课外2道#xff08;第2.5天#xff09;-CSDN博客 … 这篇文章就是来教大家学习怎么动态调试的然后我还写了一篇关于动态调试的文章不是buu上面的题就是两道简单的栈溢出问题那两道题挺有特点的。大家可以去看看。 每日3道PWN之课外2道第2.5天-CSDN博客 先找一个简单的jarvisoj_level0调试一下然后咱再看复杂的pwn1_sctf_2016
听说又不考pwn了所以只写完了jarvisoj_level0现在我就转行去学逆向了
so停工了~~~私密马赛
要求环境gdb和pwotoolpwndbg
jarvisoj_level0
先回忆一下
进去后按f5查看反编译的代码 看一下vulnerable_function这个函数 找后门shiftf12 双击跟进 记录地址0x40059A
大概回忆起来了吧就是read溢出做题思路我的另一个博客写过大家可以去看
每日3道PWN第二天-CSDN博客 动态调试
现在我们进行动态调试
动态分析的正常流程gdb打开文件
查看变量大小的两种方法
方法1常规大main的断点老老实实的查看
b main 设置断点 阿这他说我权限不够稍等我一下哈先chmod x level0一下
然后再来一遍run一下我们就能看见main函数的汇编和栈什么的 下面这张不是本题的图但是有结构大概解释 注意asm的英文就是汇编的意思registers是寄存器的意思stack是栈的意思 看见漏洞函数了为什么知道他是漏洞函数当然因为前面我都博客里IDA静态分析过了~
而且这个函数的中文意思就是易受攻击的函数 我们就一直输入n然后知道绿色的箭头指到漏洞函数vulnerable_function 按ss就是stepsi单步步进进入该函数里面看见了吧漏洞利用点read函数 tipsfini是退出当前函数r是重新运行如果弄错的可以试试这两个 stack 24 命令查看当前栈的前24个栈帧
为什么要stack 24呢
我们的目的就是查看当前变量buf的大小前提就是要进入该函数内就是n一直下一步直到指向函数之后输入s单步进入函数才能看见变量buf。所以要stack
然后为什么24听我的大佬说不管输入几目的只要看见ebp或者rbp就算可以了然后我们就用ebp或者rbp的地址减去eax或者rax的地址来计算变量的大小
就像这样 咱直接看后两位相减就行也就是0xb0-0x300x80128 大小0x80我们去看看对不对 对的。木的问题
vmmp
使用vmmap直接查看该进程的内存空间不知道有啥用晚点问问大神
1.查看栈、bss段是否可以执行栈溢出包括BSS溢出 方法2断点的其他方式没成功
参考
栈溢出学习_loglevel:debug-CSDN博客 cyclic这个工具pwntools自带的一个东西 常用的作用有两个 寻找偏移量Offset当你想要利用栈溢出等漏洞时通常需要知道目标程序中栈上缓冲区的偏移量以确定准确的覆盖位置。使用cyclic工具可以生成一种重复的模式并将其发送给目标程序然后在程序崩溃时通过查找崩溃时覆盖的位置就能够计算出偏移量。 覆盖返回地址在进行栈溢出漏洞利用时通常需要将恶意代码的地址写入到返回地址中从而实现控制程序流程的目的。使用cyclic工具可以生成指定长度的重复模式并将其作为返回地址使程序跳转到我们控制的位置。 寻找偏移量以下是实例代码 from pwn import *pattern cyclic(100) # 生成长度为100的重复模式就相当于bA*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的使用目标是0x80128可以多一点进行溢出也可以刚刚好等于128
这里生成128位垃圾数据一会直接拿来复制粘贴 这次也再学习以下打断点的其他方式 先去IDA中查找漏洞利用函数的地址我们打地址的断点 先找到漏洞利用的read函数 然后右键选择copy to assembly复制到程序集的意思咱也不知道程序集是啥意思但作用把每一行源代码就是编译成成汇编码并进行注释说明 call的汇编码意思是函数的意思后面还有read字样 那就是他了记一下地址0x4005bf gdb打断点去 tip对了断点就是让程序运行道某给位置后停止然后一步一步进行是为了让程序员调试用的 打断点b *地址别忘了* 然后我们在n的时候就直接让我们输入东西了 找到栈找道地址0x7fffffffdf30 然后用cyclic 或者当时直接这样查看 跟着博主没成功私密马赛学艺不精 pwn1_sctf_2016未整理