Level 2: firecracker(30分)bufbomb中存在一个bang函数,
与前面两关类似,要求调用getbuf后返回到bang,并设置全局变量global_value为自己的cookie.从这一关开始,需要在堆栈的buf中布置可执行的she免费云主机域名llcode,经过实验,发现自己机器中Ubuntu 12.04.5的堆栈区不可执行(May sombody tell me?),由于没有找到关闭的方法,在虚拟机中安装Fedora 7,按如下方式关闭堆栈不可执行和随机化,继续进行实验。sysctl –w kernel.randomize_va_space=0sysctl –w kernel.exec-shield=0在gdb中反汇编bang,获得存储全局变量global_value的地址为0x804aa60,bang函数的入口地址为0x804898c接下来,需要在buf中布置设置全局变量和跳转到bang中的shellcode,并将ret设置成buf在调试中获得buf在地址0x08048a50处设置断点并运行,得知buf为0xbfffb0bc接下来编写shellcode,最终获得shellcode的16进制机器码,为16字节,刚好够用。于是exploit string为shellcode加上bufLevel 3: Dynamite (40分)这一关要求getbuf返回到test当中,但是不能破坏为test函数维护的堆栈状态(test函数加了堆栈状态检测),同时加test函数中的调用getbuf后的返回值为自己的cookie。test函数如下,这要求我们的shellcode不能破坏getbuf调用函数test的堆栈状态,既需要返回到test中,也需要恢复SFP即test的栈基址EBP,而恢复栈基址有两种方法:一是在shellcode中设置,二是在exploit string中的合适位置填入SFP,这里我们选择了第二种方法。反汇编test函数,获得getbuf调用的正常返回地址。在0x80489df中下断点,获得其栈基址的值为0xbfffb0e8
编写shellcode,获得其16进制的机器码综合前面的信息,得到exploit string, 其中字节ff可为任意字节(除了回车符0a和空字符00)
最后再来分析high级别的代码:这里首先有一条语句需要理解:$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, ‘.’) + 1);在这条语句里,首先利用strrpos() 函数来查找“…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。