摘要: 初识Canary 关于canary说白了就是一个防止栈溢出的手段,一般情况下是在栈底前边设置一个值,在进程结束时,对比这个值有没有被篡改,如果篡改就退出。具体汇编如下 函数开始前在函数序言部分会取 fs 寄存器 0x28 处的值,存放在栈中 rbp-0x8 的位置(32位ebp-0x4。但是这个位置 阅读全文
posted @ 2024-07-11 21:43 能打八个攻城狮 阅读(329) 评论(0) 推荐(1)
摘要: not_the_same_3dsctf_2016 查看保护就不说了 IDA反编译发现为静态编译,不用找libc了这点节省不少功夫。打开main函数,发现栈溢出漏洞 偏移为45,这个是根据gdb的cyclic算出来的 发现后门函数get_secret,功能是把flag读取赋值给fl4g 初步思路为通过 阅读全文
posted @ 2024-07-09 15:19 能打八个攻城狮 阅读(68) 评论(0) 推荐(0)
摘要: 已知libc库的情况 在动态编译的程序中,如果没有对system函数的直接调用,在plt中就不会存在system函数,也就是不能直接知道system函数的地址 在解决动态编译的二进制文件之前,需要了解动态链接的基础知识,这个过程叫作lzy-binding。程序对外部函数的调用要求在生成可执行文件时将 阅读全文
posted @ 2024-06-17 12:34 能打八个攻城狮 阅读(66) 评论(0) 推荐(0)
摘要: 我们已经学会了编写单个和两个简单函数的ROP链,在这里我们说一下,编写ROP链多个需要注意的问题 之前我们在学习两个函数的ROP时,编写了这样的payload 我们当时没有考虑,参数冲突和栈溢出大小,现在我们来说一说 举个例子,如果我们上次学习的两个函数的ROP中没有gets函数,而是read函数我 阅读全文
posted @ 2024-06-16 17:05 能打八个攻城狮 阅读(40) 评论(0) 推荐(0)
摘要: 什么是ROP链 在我初识栈溢出那篇博客已经详细的讲了函数的调用过程(基于X86框架),不了解的可以看一下,没有这个理论基础,是学不好ROP的。现在我们说一下什么是ROP。 ROP链就是通过返回地址的修改来完成的编程,调用特定的函数的一种编程模式。我们可以联想一下你做的最简单的栈溢出的题,返回地址覆盖 阅读全文
posted @ 2024-06-16 15:31 能打八个攻城狮 阅读(59) 评论(0) 推荐(0)
摘要: 什么是Shellcode Shellcode指的是用来完成某个功能的汇编代码,常用的功能就是获取目标系统的shell。在栈溢出的基础上,我们一般都是向栈中写内容,所以要想执行Shellcode,就要要求对应的二进制文件没有开启NX保护。利用ret_address返回Shellcode处执行 怎么生成 阅读全文
posted @ 2024-06-16 00:00 能打八个攻城狮 阅读(167) 评论(0) 推荐(0)
摘要: 认识栈结构 栈这种结构学过数据结构的都知道,是一种先进后出的结构,类似于子弹放进弹夹一样,先放进的子弹最后打出。 函数调用过程 这个知识是整个栈方面的关键知识,我在大一的时候学pwn怎么也学不会,就是忽略了对基础知识的学习,直接学漏洞,一直搞不清怎么回事,非常郁闷。现在详细总结一下函数调用过程,以X 阅读全文
posted @ 2024-06-15 17:19 能打八个攻城狮 阅读(76) 评论(0) 推荐(0)