前情提要:因为图片都很长的原因,up不会调,所以可能看的不舒服,请原谅up,电脑可以缩小至80或者90看会舒服一点,实在抱歉了
实验原理:
本次实验用到的基本上是缓冲区越界,学过c语言的可以将他类比为数组越界,原本数组开了10个int大小,但是我们给他输入了15个数字,那多出来5个数字就覆盖掉了别的位置的数。
一个例子:
我们要执行一个函数会向下开辟空间,就是红色区域。然后这个函数执行完会ret返回就是return到开辟之前的空间,就是第一个rsp的位置,然后执行那里的地址的代码。
test函数是1-5题都要接触到的



getbuf执行完rsp会回到上图rsp的位置
phase_1
任务内容:
本关任务:本关需要做的是劫持程序流,将函数的正常返回地址重写,使函数重定向到指定的函数。 本关要求重定向到touch1函数。
getbuf函数


getbuf函数开辟40个字节,然后test的rsp里面存的是地址有8个字节,存的是函数的地址且用小端法表示
所以我们要填充完40个字节的空间,然后让他溢出填充多8个字节的空间,把之前一个函数的地址覆盖成touch1的地址
用disas touch1 查询touch1的地址是0x4017c0,小端法表示:c0 17 40 00 00 00 00 00

所以答案是:
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 ////这里面40个00都是用来填充前面getbuf的40个bits的空间的
c0 17 40 00 00 00 00 00 ////让rsp指向的函数地址变成touch1的
演示一遍如何输入答案,因为要用文本输入:
创建一个 1.txt文本存16进制数


文章详细描述了一系列实验,涉及C语言中的缓冲区越界技巧,如何劫持程序流并实现函数重定向,以及使用ROP攻击在输入字符串中注入代码。每个阶段都介绍了具体的任务目标、所需操作和代码示例,展示了从基础原理到高级技巧的过程。

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



