热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络缓冲linux,一个简单的linux缓冲区利用

一个简单的linux缓冲区利用byNetfairy-2016-02-28刚开始接触linux下的漏洞利用,先做个练练手。程序源码如下:#include#

一个简单的linux缓冲区利用by Netfairy - 2016-02-28

刚开始接触linux下的漏洞利用,先做个练练手。程序源码如下:

#include

#include

#include

int valid_serial(char * psz)

{

size_t len=strlen(psz);

unsigned total=0;

size_t i;

if(len<10)

return 0;

for(i&#61;0;i

{

if((psz[i]&#39;z&#39;))

return 0;

total&#43;&#61;psz[i];

}

if(total%853&#61;&#61;83)

return 1;

return 0;

}

int validate_serial()

{

char serial[24];

fscanf(stdin,"%s",serial);

if(valid_serial(serial))

return 1;

else

return 0;

}

int do_valid_stuff()

{

printf("The serial number is valid!\n");

exit(0);

}

int do_invalid_stuff()

{

printf("Invaild serial number!\nExiting...\n");

exit(1);

}

int main()

{

if(validate_serial())

do_valid_stuff();

else

do_invalid_stuff();

return 0;

}

3c858f733a4c97427111c1ac09707bc0.png

然后用gdb调试它

gdb test

start

disas main

76928d58606281ce3fd6356b0d98850a.png

注意到是validate_serial()函数发生了溢出。我们先把验证成功分支的地址也记下来&#xff1a;0x0x080485ea。接下来进入valid_serial()函数第一条指令&#xff0c;把validate_serial()函数返回地址对应的esp值也记下来&#xff1a;0xbffff48c

4e3bcb7b06cdd2a7acaa7c893fc552b0.png

接下来出动pattern_create.rb和pattern_offset计算偏移

pattern_create 100

8d854d9a7dda7b9775f68fa1fd61034b.png

创建100个字符&#xff0c;然后把这100字符传给程序

c22d8278128d5dbe050bf409d5a27e25.png

发生了溢出导致段错误&#xff0c;看看前面esp0xbffff48c指向的地址是什么内容

07d8ecf4287cfc5d337343ce1113c289.png

很好&#xff0c;0x41326241覆盖了返回地址&#xff0c;然后用pattern_offset.rb计算多少字符覆盖到返回地址

b0a033eda36d10476738379965a66c81.png

接下来就简单了&#xff0c;利用格式如下

36个填充字符&#43;验证成功分支的地址

b0dd73c268333942058b97ed9c8562a4.png

do it !!!



推荐阅读
author-avatar
叔叔123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有