我试图从Phrack Magazine开始利用这个易受攻击的代码。这是易受攻击的二进制文件的代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
unsigned short s;
int i;
char buf[80];
if(argc < 3){
return -1;
}
i = atoi(argv[1]);
s = i;
if(s >= 80){ /* [w1] */
printf("Oh no you don't!\n");
return -1;
}
printf("s = %d\n", s);
memcpy(buf, argv[2], i);
buf[i] = '\0';
printf("%s\n", buf);
return 0;
}
我成功获得了可以绕过验证的整数,当它转换为无符号短路时为65536,它将等于0,但是当我试图放置一些&#34; A&#34;为了找到返回地址(EIP)的位置,我收到了这个错误: 这是我的有效载荷:
(gdb)r 65536 $(python -c&#39; print&#34; A&#34; * 65536&#39;)
当我调查问题时,它就在这里:
`0x08048532 <+182>: lea 0x1a(%esp),%edx
0x08048536 <+186>: mov 0x5c(%esp),%eax
---Type <return> to continue, or q <return> to quit---
0x0804853a <+190>: add %edx,%eax
=> 0x0804853c <+192>: movb $0x0,(%eax)
0x0804853f <+195>: lea 0x1a(%esp),%eax
0x08048543 <+199>: mov %eax,(%esp)
0x08048546 <+202>: call 0x8048350 <puts@plt>
0x0804854b <+207>: mov $0x0,%eax
0x08048550 <+212>: leave
0x08048551 <+213>: ret`
但我不明白为什么会发生这种情况。