有堆栈腐败。使用错误代码退出的功能系统()可能139。您的应用程序没有注意到这是不同的过程。
堆栈准备新过程-Bash / System()呼叫差异
-
29-07-2022 - |
题
我有一个说明堆栈缓冲区溢出的应用程序。我想激发重返LIBC攻击。
缓冲区溢出基于:
int main(int argc, char **argv)
{
[...]
char buff[16];
strcpy(buff,argv[1]);
[...]
}
当我直接从Shell调用此应用程序时,我会得到预期错误 - 堆栈已损坏:
[syssec@syssecvm bufov1]$ ./vulnapp hhgfhdsgfsagfzutuewzrqwgfshgafsd
Segmentation fault
但是,当我试图在其他应用程序(executor.c)中准备参数,并通过System()调用调用vulnapp,什么也不会发生。 Vulnapp接受任何Lenght的论点:
./executor
You executed:./vulnapp 01234567890123450123BBBB�%�/bin/ged�������/
[syssec@syssecvm bufov1]$
在这种情况下,没有堆栈腐败。
为什么这样?
如果system()调用,有什么方法可以获得相同的效果(缓冲区溢出)?
解决方案
不隶属于 StackOverflow