点击蓝字
关注我们
0x00: stack4
本篇文章仅为翻译原文是来自https://0xrick.github.io/binary-exploitation/bof1的缓冲区课程系列。这次继续练习缓冲区溢出漏洞stack4。这次原作者终于体会到菜鸡不易继续走白盒测试路线了。
0x01:源代码分析
void win()
{
printf("code flow successfully changedn");
}
int main(int argc, char **argv)
{
char buffer[64];
gets(buffer);
}
这个源代码其实跟stack3差不多。该文件定义了win函数然后再main函数里面设置了缓冲区容量为64,同时会接收我们的输入储存到缓冲区中。但我们要思考一个问题,我们想要覆盖哪些变量呢?毕竟找溢出点容易但的确定目标溢出完后要取哪些数据。
这里就要提及另外一个东西,EIP,它是指令指针(instruction pointer)。指令指针是一个内存地址,在执行期间保存程序中下一条指令的地址。所以,如果我们覆盖该地址,则程序将执行该地址的内容。简单的来讲就是如果我们想程序输出code flow successfully changed这条语句我们可以先输入64个无效字符+win的地址就可以了。
0x02:解题
这里可以首先看看如果只丢64个字符串会发生什么。用回
/usr/share/Metasploit-framework/tools/exploit/pattern_create.rb
脚本生产字符串也可以用
python -c
这里我直接偷懒本地测试运行以后发现程序没有崩溃。因为返回地址并非像前面的题一样直接位于缓冲区之后,这次可以尝试100个字符串。
还是用pattern_create脚本创建
这次程序崩了。
开始用gdb分析下原因(这里建议还是像之前的文章用回scp拷贝文件过来不会出问题)。可以看到停在0x63413563这里。
用回pattern_offset.rb脚本可以发现停在的地方并非是64之后而是在76这个地方。
接下来我们用
objdump -d stack4
找找win函数这个地址因为我们的目标是要找到这个地址后执行
code flow successfully changed.
这次的地址是080483f4
最后用python -c 生产字符串 + 函数位置就可
神隐攻防实验室
微信公众号
神隐攻防实验室
关注公众号
获取更多你想知道的安全知识
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...