通用shellcode的编写、调用 实验缓冲区溢出攻击(非远程)调用shellcode实例(一)

在阅读此篇文章时,请先确定已有一些计算机功底,其中包括计算机组成原理、寄存器功能、汇编语感。


正文开始:

实验环境:windows8.1,vs2010



相信不少人听说过缓冲区溢出攻击,这是当时黑客网络攻击很关键的一种攻击方式,直到现在很多黑客找到bug后进行的攻击行为还是基于它为原理,今天我给大家简单实验一下。



首先讲一下缓冲区溢出攻击如何实现,就要提到计算机底层调用函数的方式。当你运行你自己写好的程序时,系统会自动开一个线程并为你分配一段内存以供程序运行,其中一部分内存会用来作为线程的栈,而函数的调用离不开栈的运用。



先讲一些寄存器esp(栈指针寄存器)ebp(基址寄存器)eip(指令地址寄存器)eax(指令寄存器,可能还有其它功能)。

寄存器中都存放了一个32位的二进制数(如果是64位操作系统则是64位二进制数,不过用c或者汇编写的程序大多是三十二位的),这32位二进制数当然是一个地址,如果这个数是0x00000018(十六进制数)那么则该寄存器指向内存中第十八个字节(当然0x00000018这样的内存是不可能被普通程序员使用的,大多是0x007FEF87这样的内存)。

esp中存放的数据(三十二位二进制数)自然就是栈中的栈顶指针,比如栈的内存块是0x00000000~0x000000FF,而其中0x000000CC~0x000000FF(这些地址都是随便一写)有数据,则esp的地址就是0x000000CC-4=0x000000C8这个数,下一次压栈时,就会把0x000000C8~0x000000CB填满数据,栈顶指针再自减4,指向0x000000C4(栈的走向是从高地址走向低地址)。

ebp中存放的数据是用来基址寻址的基址(好别扭),也是一个地址,它的特点是一般会在局部变量和函数参数所存放地址的中间,意思就是ebp+0

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值