当前位置: 首页 > news >正文

重庆网站服务器通信网站模板

重庆网站服务器,通信网站模板,网站建设需要些什么,100个关键词前言 这是一个系列文章#xff0c;之前已经介绍过一些二进制安全的基础知识#xff0c;这里就不过多重复提及#xff0c;不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域#xff0c;程序在运行时用来分配内存。它与栈不同#xff0c;栈用于静态… 前言 这是一个系列文章之前已经介绍过一些二进制安全的基础知识这里就不过多重复提及不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域程序在运行时用来分配内存。它与栈不同栈用于静态分配内存并且具有固定的大小 程序使用如malloc、calloc、realloc等函数在堆上动态分配内存。当内存不再需要时使用free函数释放。 例如 int main(int argc, char **argv) {struct data *d;d malloc(sizeof(struct data)); }通过malloc函数分配的堆地址 接下来就用实战来讲解堆的运作机制 heap 0 #include stdlib.h #include unistd.h #include string.h #include stdio.h #include sys/types.hstruct data { #定义了一个名为data的结构体char name[64]; #包含一个64字节大小的字符数组name };struct fp { #定义了一个名为fp的结构体int (*fp)(); #包含了一个函数指针fp };void winner() #自定义函数winner {printf(level passed\n); #输出level passed }void nowinner() #自定义函数nowinner {printf(level has not been passed\n); #输出level has not been passed }int main(int argc, char **argv) #主函数从命令行获取参数 {struct data *d; #声明了一个指向 struct data 类型结构体的指针 dstruct fp *f; #声明了一个指向 struct fp 类型结构体的指针 fd malloc(sizeof(struct data)); #给data结构体分配内存f malloc(sizeof(struct fp)); #给fp结构体分配内存f-fp nowinner; #fp结构体中的函数指针初始化为指向nowinner函数printf(data is at %p, fp is at %p\n, d, f); #输出data和fp结构体的内存地址strcpy(d-name, argv[1]); #strcpy函数将命令行提供的第一个参数复制到data结构体的name数组中f-fp(); #调用函数指针指向的函数nowinner}漏洞发生在strcpy函数处strcpy函数不会检查目标缓冲区的大小如果我们提供的参数超过64字节它将导致缓冲区溢出如果发生了缓冲区溢出并且覆盖了f-fp的值那么可以使它指向winner函数调用winner函数 我们先在第一个malloc函数调用的地方下一个断点然后执行到断点处来看看堆是怎么运行的 现在停在了malloc函数处还没有执行该指令可以看到程序空间里是没有堆的 输入n执行malloc函数再次查看程序空间 可以看到多出了一个heap空间也就是堆地址是0x804a000-0x806b000我们查看这个堆空间里的数据 现在堆里只有两个数据0x49-10x48是第一个mallco函数给我们分配的空间大小为什么要减一呢因为在这个堆中保存数据是为了区分是否是空闲区域都会在表示大小的值后面加一个11了就说明当前空间已经被存放了数据那这里为什么后面存放的数据都是0呢是因为这个程序是从命令行参数里获取值然后保存的我们运行程序时没有输入参数所以这里都是0 name函数大小设置的是64字节为什么程序给我们分配了72字节的空间其实是这样算的 程序还将前面保留的四个字节空闲空间和本身表示大小的空间算进去了 而最后的0x20fb9表示空余堆空间的大小我们在程序执行strcpy函数的地方下一个断点这个地方是程序将我们输入的值存入堆里的地方 我们重新运行程序输入A执行strcpy函数的指令再在查看栈空间 程序已经将我们输入的8个A的十六进制值放入了堆并且下面还有第二个mallco函数的空间 而这个0x8048478则是nowinner函数地址 前面说过strcpy函数不会检查目标缓冲区的大小如果我们提供的参数超过64字节它将导致缓冲区溢出如果发生了缓冲区溢出并且覆盖了f-fp的值那么可以使它指向winner函数调用winner函数我们输入76个字符就能完整覆盖nowinner函数地址控制程序跳转的地址 python -c print(A*72 B*4)重新打开gdb然后运行 这里程序提示跳转到了0x42424242的地址也就是我们输入的BBBB这时我们查看堆空间 我们已经将nowinner函数地址给覆盖了 我们将BBBB改为winner函数地址就成功破解了程序 我们可以使用echo工具来输入不可见字符 ./heap0 /bin/echo -ne AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x64\x84\x04\x08成功跳转到winner函数 堆是一个很难的部分为了方便入门这篇文章只是简单的介绍了一些堆的运作机制之后的文章再慢慢介绍其他的机制
http://www.pierceye.com/news/264018/

相关文章:

  • 南京哪家网站建设好网站开发需要注意的
  • 一个综合网站上线多少钱wordpress粘贴word
  • 承接电商网站建设新手做自己的网站
  • 网页版视频网站建设需要多少钱四川鸿业建设集团公司网站
  • h5网站实例wordpress改造mip
  • 完整的网络营销推广方案包括优化营商环境心得体会个人
  • 商洛市住房和城乡建设局网站建免费网站
  • 做网站要多少的服务器网站设计的步骤
  • 网站关键词怎么做上首页wordpress 架构原理
  • 厦门专业网站建设代理国外在线crm系统suitecrm
  • 哪个网站可以领手工活在家做wordpress heroku
  • 为什么没有网站做图文小说电子商务网站开发的课程介绍
  • 在哪个网站做问卷好单页面网站推广
  • 专业网站建设模块维护静海网站建设
  • 国内前十网站建设公司龙之网官网
  • 昆山做网站的公昆山做网站的公司司网站开发与设计岗位职责
  • 网站投注员怎么做做旅游项目用哪家网站好
  • 环县网站怎么做咸阳网站开发公司地址
  • 重庆巴南网站制作wordpress外贸建站公司
  • 桂林旅游网站制作公司软件开发公司属于什么行业
  • 网站 备案 中国 名字老薛主机 wordpress
  • 有什么网站可以做投票功能合肥房地产交易网
  • 世界网站广西建设工程质检安全网站
  • 建设银行网站会员基本信息wordpress主题图片丢失
  • 找人做网站需要注意什么问题中国建设信用卡网站
  • 公众号制作的网站开发营销平台推广
  • 河源手机网站制作网站页面效果图怎么做
  • 公司网站建设要注意的问题wordpress上传图片x
  • 网站开发PHP留言本快代理
  • 温州做网站价格怎么做简易手机网站