这是一项任务,但我对基本理解存在问题。使用snprintf缓冲区溢出
漏洞代码:
int choc(char *arg)
{
char buf[400];
snprintf(buf, sizeof buf, arg);
return 0;
}
据我所知,ARG必须是一个格式字符串将与我要执行的代码的地址覆盖返回地址。但是我在创建格式字符串时遇到了麻烦。该格式字符串需要
所以,事情有:
- 返回指令的地址,这是我需要覆盖
- %的名单X
- 的价值,我会写在返回地址。这将是我想要执行的代码的地址。
为了得到返回地址,我只需要在gdb中查看'ret'指令的地址吧? %x的目的究竟是什么?我如何编码我想要在格式字符串中执行的代码的地址?
我做了一个测试: 使用gdb我发现我的buf地址是0xbffffba0。我生成了arg为“\ xa0 \ xfb \ xff \ xbf_%x。%x。%n”;不应该这样写地址0xbffffba0处的buff的开始值吗?不过,我得到一个段错误。我究竟做错了什么?
任何帮助,将不胜感激!
我不想写一个答案,但我只是做了这个任务。对于那些追随我的人,我通过逐字节地覆盖'__DTOR_END__'来实现它。你最终会使用几乎所有由snprintf调用分配给你的字节,但是你可以及时完成,并跳入'arg',它应该在你的shellcode结尾。我跟着这个链接的第一部分解释让我开始:https://www.exploit-db.com/docs/28476.pdf – 2017-11-19 05:55:55