0x03-逆向-BoF基础的基础

目录 今日目标 深入 BoF BoF 的前世今生 BoF 的种类 BoF 的应对策略 为什么程序会有栈? 为什么 EBP 和 EIP 会在 BoF 中被覆盖? 栈帧(Stack Frame)以及方法调用 NOP 总结 参考链接 今日目标 今天细看了一下 narnia2(不知道这是什么的小伙伴看我前篇),是个栈溢出的练习。所以,Buffer Overflow,BoF,是今天的主题。这篇文章的标题是基础的基础,我们会把基于栈的溢出深入再深入地探讨一下。网上由很多关于栈溢出地基础例子和文章,想必大家也看过很多了。 带着下面几个问题,我们开始这篇 BoF 基础的基础。无论大家能不能回答这几个问题,看下去,总有一些新的收获。 BoF 的前世今生大家了解多少?BoF 有多少种类型? 都说栈溢出,首先,为什么你的程序会有栈? 漏洞叫做栈溢出,EBP,EIP,或者 BP,IP 是寄存器,一个在内存,一个在 CPU,为什么那些文章总说 EBP 和 EIP 会被覆盖,难道栈溢出还能溢出到 CPU ? 那些文章都提到 nop (\x90),nop 到底是什么?为什么要用 nop? 深入 BoF 我们先了解一下 BoF 的一小段历史,BoF 的种类,以及计算机科学家在与…

0x02-逆向-执行环境变量

目录 今日目标 可以学到什么? 什么是 Shellcode? Shellcode 是怎么编写出来的? Shellcode 测试 “\x” 转义序列 “\x” 的作用 “\x” 转义的 16 进制作为字符串的处理 Bash 设置环境变量 “ $() 如何利用这个漏洞? 参考链接 今日目标 继续 narnia 系列。今天的目标是 narnia1。 首先,这个挑战本身很简单,但是可以细想一下背后的原理,还是有一些地方值得挖掘和理解。 这是 narnia1 的源码。 #include <stdio.h> int main(){ int (*ret)(); if(getenv("EGG")==NULL){ printf("Give me something to execute at the env-variable EGG\n"); exit(1); } printf("Trying to execute EGG!\n"); ret…

0x01-ReverseEngineering-narnia0

目录 这是什么? 可以学到什么? 数据类型长度 管道 格式化输出 Endianess Setuid GDB基础 内存 如何利用这个漏洞? 参考链接 这是什么? 进入逆向的世界。以一个 war game 作为开场,后续不断深入。 这个 war game 是 narnia。链接此处。 Level 0 -> Level 9,难度不断增加。 踏出第一步,Level 0. 根据官网的提示,SSH 连接到服务器。 所有源文件都在 /narnia 目录,并有编译好的二进制。直接运行即可。所需要解锁的密码在 /etc/narnia_pass/ 文件夹。比如这是 Level 0,用户是 narnia0,那么下一级别 narnia1 用户的密码就在 /etc/narnia_pass/narnia1 里。看完本篇,大家就知道整体流程了。 文章越写越长,一段小小的代码,原本不知道会有这么多东西可以挖掘。但是只有挖的够深,才能学到更多。 可以学到什么? 开篇比较简单,但是也有值得学习的地方。几个点拿出来一起学习讨论。 数据类型长度 再后面的小节中会看到源码中对于变量 val 的定义: long val=0x41414141 了解一下各个 data type…