专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

栈溢出怎么解决,栈溢出详解

来源:小易整编  作者:小易  发布时间:2023-03-20 05:25
摘要:栈溢出怎么解决,栈溢出详解栈溢出原理图在DEBUG程序中ebp会入栈,非调试版本ebp是可以优化掉的。我们的栈溢出主要是就是产生在函数堆栈中的局部变量区,例如我们在局部变量区定义了一个Buffer,我们在向这个Buffer拷贝数据的时候,如...

Shellcode

是一段可执行的机器码(指令)的十六进制编码字符串。

"\xFF\xD0"  ==> call eax  ==> DOFF  ==> "\xFF\xDO"

在Shellcode中使用函数不能使用函数名,而是函数的地址,所以,在Shellcode中使用函数需要先LoadLibrary加载动态链接库,再通过GetProcAddress获取函数地址再进行使用。

EXPLOIT

构造攻击字符串,通过EXP书写规则:'任意字符串+JMP ESP+ SHELLCODE'。

栈溢出怎么解决,栈溢出详解

使用Shellcode

typedef void(*Func)()((Func) &sh)();

编写Shellcode方法

(1)如果硬编码功底或者汇编功底好直接OD写了拷贝出来。

(2)如果上面这种不行则可以自己创建一个项目,写上要执行的操作后只需要在程序的main函数中任意代码行下断使其断下来,然后转到汇编页,复制机器码即可。如果没有显示机器码,右击->显示字节码(Show Code Bytes)。

注意事项:如果提取出来的Shellcode中间存在 00 这种字符则可能导致Shellcode被截断,这种情况就需要进行指令替换,例如 00 是 mov eax,0 这条指令导致产生的,则我们修改该指令为 xor eax,eax ,通过这种方式进行替换规避。

ShellCode的设计

(1)提取机器码(VS直接提取)

(2)调试

(3)通用性(获取调用的API地址)

      • 在SHELLCODE中调用的API地址随平台变化.
      • 如何搜索API地址.
      • JMP ESP地址搜索.

(4)EXPLOIT:构造攻击字符串

      • "任意字符串+JMPESP+SHELLCODE"

      • 任意字符串:用于填满缓冲区。

      • Jmp esp:用于跳转到Shellcode。

      • Shellcode:真正执行的恶意代码。

如何获得函数地址

#include <windows.h>#include <stdio.h>typedef void (*MYPROC) (LPTSTR);int main(){    HINSTANCE LibHandle;    MYPROC ProcAdd;    LibHandle = LoadLibrary( "msvcrt.dll");    printf( "kernel32LibHandle = 0x%x\n",ibHandle);    ProcAdd=(MYPROC)GetProcAddress(LibHandle,"system");    printf("system= 0x%x\n",ProcAdd);    return 0;}

如何获取JMP XXX系列指令地址

思路:内存中查找机器码。

其实这里不一定需要ESP才可以利用,也可以使用其他的配合达到目的。

下面这段代码就是搜索JMP ESP指令的程序。

//FF E0     JMP EAX//FF E1     JMP ECX//FF E2     JMP EDX//FF E3     JMP EBX//FF E4     JMP ESP//FF E5     JMP EBP//FF E6     JMP ESI//FF E7     JMP EDI//FF D0     CALL EAX//FF D1     CALL ECX//FF D2     CALL EDX//FF D3     CALL EBX//FF D4     CALL ESP//FF D5     CALL EBP//FF D6     CALL ESI//FF D7     CALL EDI//#define DLL_NAME "mfc42.dll"#include <windows.h>#include <stdio.h>#define DLL_NAME "user32.dll"int main(){    BYTE* ptr;    int position,address;    HINSTANCE handle;    BOOL done_flag = FALSE;    handle=LoadLibrary(DLL_NAME);    if(!handle)    {        printf(" load dll erro !");        exit(0);    }    ptr = (BYTE*)handle;        for(position = 0; !done_flag; position++)    {        try        {            if(ptr[position] == 0xFF && ptr[position+1] == 0xE4)            {                // 0xFFE4 is the opcode of jmp esp                int address = (int)ptr + position;                printf("OPCODE found at 0x%x\n",address);            }        }        catch(...)        {            int address = (int)ptr + position;            printf("END OF 0x%x\n", address);            done_flag = true;        }    }    return 0;}

默认栈的大小是2M。

新版本的VS编译器中已经加入了缓冲区溢出保护,就是加了security cookie,这个东西就像是Linux中Cannary。

栈溢出中的字节对齐问题

在进行计算溢出字节数的时候不要为了局部变量区会进行字节对齐,X86上是以4字节对齐,例如如果是我们的在函数中开辟的是长度为10的字符数组,则需要16个字节才到返回地址,因为 10字节以4字节对齐就是12字节 + 4字节ebp = 16字节。

Shellcode绕过检测

加密+自解密

案例

栈溢出怎么解决,栈溢出详解


本文地址:百科问答频道 https://www.neebe.cn/wenda/933478_2.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 怎么设置iPhone手机自动锁定时间

    怎么设置iPhone手机自动锁定时间

    现在有很多人在使用iPhone手机,有些新用户不知道怎么设置自动锁定时间,接下来小编就给大家介绍一下具体的操作步骤。具体如下:1.首先第一步根据下图箭头所指,找到并点击【设置】图标。2.第二步进入【设置】页面后,根据下图箭头所指,点击【...

  • QQ钱包怎么注销

    QQ钱包怎么注销

    我们在使用QQ的时候,开通了钱包功能,后来不用了,出于安全考虑,想要注销,该怎么操作呢?今天就跟大家介绍一下QQ钱包怎么注销的具体操作步骤。1解锁手机后,找到桌面上的QQAPP,打开。2.进入主页面后,点击左上角的个人头像。3.在打开...

  • 怎么在手机上找到QQ接收的文件?如何找到QQfile_recv文件夹?

    怎么在手机上找到QQ接收的文件?如何找到QQfile_recv文件夹?

    小伙伴们经常会遇到这种情况,有时候需要将电脑上的文件传输到手机上,可是身边又没有数据线,我们会通过电脑上的QQ往手机QQ发送文件,这样不仅省去了数据线的麻烦同时传输速度也很快,可是我们怎么找到接收到的文件呢?QQfile_recv文件夹又在...

  • apple id忘记密码后怎么使用电脑重设密码

    apple id忘记密码后怎么使用电脑重设密码

    appleid是我们在苹果手机中很重要的一个账号,有的时候我们可能会忘记appleid的密码,那么接下来小编就教大家怎样在电脑上重新设置appleid的密码。具体如下:1.首先我们打开电脑进入到桌面,找到浏览器图标点击打开。进入到浏览器界面...

  • 怎么修改itunes备份的路径

    怎么修改itunes备份的路径

    想要对电脑上iTunes的备份位置进行修改,该怎么操作呢?今天就跟大家介绍一下怎么修改itunes的备份路径的具体操作步骤。1.首先打开电脑,进入桌面,点击左下角的开始图标,在打开的菜单中,找到计算机选项,点击2.在打开的计算机页面,找...

  • UMD是什么文件 UMD文件怎么打开

    UMD是什么文件 UMD文件怎么打开

    umd是一种文档格式,小说也有这个格式的,很多电子书被做成UMD格式,供用户在手机上用掌上书院阅读。。目前UMD格式是流行最广,被用户普遍接受并喜爱的手机电子书格式。很多网站、论坛,为满足用户对手机电子书的需求,都自发制作UMD格式的电子书...

  • 怎么用iphone抠图

    怎么用iphone抠图

    想知道怎么用iPhone抠图吗?小编教你怎么做。操作方法01首先小编需要说明的是,iPhone自身并不带有抠图功能,所以需要下载一个抠图软件才可以,接下来小编教你具体步骤吧。0...

  • 电脑COM口怎么设置

    电脑COM口怎么设置

    COM口即串行通讯端口,通常位于电脑主机机箱的后面,端口形状为梯形,主要用于连接一些外置的数据通讯设备,例如交换机等,那么如何设置电脑的COM口呢?下面小编就来给大家讲解一下。操作方法01首先,打开控...

  • 周排行
  • 月排行
  • 年排行

精彩推荐