Kali 中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 295|回复: 1

堆栈溢出渗透实战-part1

[复制链接]
发表于 2019-6-4 19:50:18 | 显示全部楼层 |阅读模式
堆栈溢出渗透实战-part1[color=rgba(0, 0, 0, 0.3)]原创: [color=rgba(0, 0, 0, 0.3)]光明SAMA [url=]吾生也有涯IT也无涯[/url] [color=rgba(0, 0, 0, 0.3)]5月6日
堆栈溢出技术是渗透技术中的大杀器之一,主要分为堆溢出和栈溢出两种,堆栈溢出的原理是利用软件在开发时没有限制输入数据的长度,导致向内存中写入的数据超出预分配的大小从而越界,越界部分覆盖了程序的返回指针,使程序脱离正常运行流程而执行恶意代码。本次实战主要为栈溢出的入们级练习,联系环境选择了vulnhub上的Stack Overflows for Beginners: 1这个靶机,此靶机共设置了5个flag,每个flag对应了一个用户名,每拿到一个flag就会得到下一个任务对应用户名的密码,完成所有任务可以拿到root权限。
0x00  Level0
虚拟机是一个kali linux,处始用户是level0,密码level0
登陆系统后,查看目录下有2个相关的文件,一个是名为levelOne的可执行文件,另一个是同名的C语言源文件,看来第一个任务为了降低难度已经把源代码给出来了。
查看源代码,可以看出作者声明了两个变量,一个为long类型的变量,另一个为32字节的char类型变量。随后调用了strcopy函数,将传递进来的参数直接copy到了buf中,并没有检测传入的数据长度,看来溢出的入口就是这里了。往下看后面还有一个判断,如过key的值为0x42424242,会得到一个uid=1001的shell,前面已经把key的值写死为12345678了,那我们只能通过溢出将其原始值覆盖。
随便给一个参数试试
接下来请出神器edb-debugger,这是一款linux下的图形界面反汇编神器,通过反汇编及动态调试就可以精确定位我们需要覆盖的地址。这里用AAAABBBB做为输入参数
分析一下汇编代码,在这里可以找到给key赋值的代码,将12345678写到了ebp-1c这个地址上,ebp当前值为ffffd338,再减去1c,等于ffffd31c
点击执行下一行代码,可以发现ffffd31c的值已经为12345678了。
接下来在call levelOne!strcpy的下一行处设置断点并执行,可以看到AAAABBBB已经被copy到ffffd2fc处并且依次向后写入,只要令输入参数足够长,就可以将ffffd31c的值覆盖。另外可以看出字母B的编码为42,所以用字母B覆盖ffffd31c就可以达到目的,那么从行数上直接计算出一共需要填充8*4个A字符,4个B字符即可。
根据上面得到的信息编写一个简单的python脚本,用来填充数据,使栈溢出。
运行levelOne并传递填充字符,key值变为42424242,成功得到了level1用户的shell
在/home/level1目录下得到了level1的密码和下一个任务的可执行文件









微信扫一扫
关注该公众号





+1
296°C
1
  • simonliu988
过: 他们
发表于 6 天前 | 显示全部楼层
谢谢楼主分享,学习。。。。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Kali linux ( 蜀ICP备10027298号-4 ) Topics |


免责声明:
Kali linux中文网所发布的一切教程文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。

GMT+8, 2019-6-27 06:40 , Processed in 0.119955 second(s), 21 queries , Gzip On.

Powered by Discuz!

© 2009-2016 KALI

快速回复 返回顶部 返回列表