一个简单程序,从汇编初识栈溢出漏洞

阅读本文需要C++编程基础以及汇编知识,废话不多说,进入正文

// StackOverFloat.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include "windows.h"

int test(char *str)
{
	char buffer[8];
	strcpy(buffer,str);
	return 0;
}

int main(int argc, char* argv[])
{
	LoadLibrary("Netfairy.dll");
	char str[3000]="AAAAAAA";
	test(str);
	return 0;
}

关于main函数入口,很有特征(截图标识出来了),容易找,本文不赘述。可以上网上找找文章了解
由于IDA具备较强的注释能力,很多的知识讲解我都用备注了,看截图
在这里插入图片描述
这里就是main函数入口了,可以对比上图。
在这里插入图片描述
来到这里,j继续跟进:
在这里插入图片描述
main函数内:
在这里插入图片描述
查看下堆栈:
在这里插入图片描述
这个结果是由于函数调用方式使然,可以看到,入栈test所需要的参数,这里只有一个,传入的是str[3000]的内容
其次入栈了call下条指令的地址,可以从截图清晰看出。
接下来我们F7,看看test都做了些什么操作:
在这里插入图片描述
这里用IDA分析的结果讲解:(这里纠正一下:sub esp,72这里的72我转换了进制,后文没改回来)
此后堆栈的ebp+ 的则是call带过来的内容,ebp-则是局部变量。因为栈又高地址向低地址增长…
在这里插入图片描述
我们看下栈的情况:
这里对应指令是IDA中 mov eax,[ebp+str[3000]]
在这里插入图片描述
push eax EAX此时存放了str[3000]的内容,即源代码中的AAAAAAA
在这里插入图片描述
lea ecx,[ebp+Dest] Dest = -8取的是局部变量地址,之所以-8是因为buffer[8]
入栈该变量空间的起始地址:
在这里插入图片描述
执行call _strcpy函数时,函数调用方式决定了下一条指令的add esp,8地址将入栈。。
在这里插入图片描述
在这里插入图片描述
跟进call _strcpy函数来到这里,首先执行了push edi操作,我们看下edi放的内容,发现是个地址。尝试栈窗口跟随:
在这里插入图片描述
发现来到栈底EBP,则这里入栈EBP地址
接下来的指令是 mov edi,dword ptr [esp+8]。
还记得这个存放的内容是什么吗?起始就是局部变量空间的起始地址,不记得的朋友可以仔细阅读上文的步骤
在这里插入图片描述
此时edi放的就是局部变量的起始地址了
接下来是强制跳转,我们跟进:
在这里插入图片描述
执行mov ecx,dword ptr [esp+c],即把AAAAAAA给到ecx起始就是字符串的存放地址,可以跟随数据窗口
接下来就是test配合je做的判断跳转了
在这里插入图片描述
先是mov指令了,然后mov eax,dword ptr [ecx]有寻址方式可以知道,是从ds:[ecx]取出2个字节的内容放在eax中
其实就是AAAAAAA
在这里插入图片描述‘接下来就是数据的存放了,感兴趣的,可以自行跟踪…
执行完pop edi栈的情况:

retn则会弹出栈顶,并且跳到那个地址,
在这里插入图片描述
清空eax寄存器,弹出之前保存的IDA截图提到的现场
并且交付申请到的局部变量空间,检查…h后重置esp最后返回main函数内,至此test函数执行结束。
用到的地址是之前main函数call test函数的下一条指令。栈溢出就是越界写入覆盖了这个返回地址。
因此我们可以找个指令时jmp esp的地址,覆盖这个返回地址,后续执行的返回地时候会pop出这个地址取执行指令
然后我们可以控制esp放我们的shellcode,jmp esp直接执行我们构造好的代码。
切换到内存窗口,选中模块反汇编查看,ctrl+f查找 jmp esp 记录地址77DF01EB放到内存EB 01 DF 77
在这里插入图片描述
所以我们改下源代码,将str[3000] = “AAAAAAAABBBB\xEB\x01\xDF\x77”
按照我们的分析,栈应该是这样子的:
在这里插入图片描述
在这里插入图片描述
对比前面的:
在这里插入图片描述
成功跳到执行jmp esp的位置,执行后会弹出这个地址,只需要在后面构造
shellcode就可以直接执行shellcode了 !!!在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43084928/article/details/88553701