我需要cat在挑战应用程序中使用缓冲区溢出对目标文件执行调用(无法在堆栈上执行,但可以使用libc)。作为参考,C这是我正在尝试做的有效代码:
int main(void) {
char * const argv[] = {"cat", "/etc/target/file"};
char * const envp[] = {NULL};;
execve("/bin/cat", argv, envp);
}
我可以在目标上加载一些以空字符结尾的字符串,并且我还确定了execve. 这是我掌握的信息:
"/bin/cat" @ 0xbfffffb9:
"cat" @ 0xbfffffbe
"/etc/target/file" @ 0xbffff96f
execve @ 0x804831c
我可以用EIP如下字符串覆盖以下字节:
"AAAA....AAA" + EIP + [RETURN ADDR] + ARG1 + ARG2 ....
在上面的字符串中,我可以EIP用 的地址替换execve并跳转到该函数,但这对我来说是很糟糕的地方。我从来没有为数组设置堆栈,也找不到在经典缓冲区溢出中使用数组的谷歌示例。
如何为函数调用设置带有数组参数的堆栈?在这种情况下,我的堆栈需要是什么样的?