Por que “echo os.system ('/ bin / bash')” funciona?

5

Eu estava fazendo um tipo de desafio de hacking, uma parte da qual me encontrou presa dentro de um shell restrito que tinha muito poucos comandos. Um dos comandos disponíveis foi echo . Depois de algumas horas batendo com a cabeça na parede, decidi dar um pico em algumas dicas. Acontece que echo os.system('/bin/bash') iria acabar com a shell restrita ... é só depois que eu vi isso que eu era capaz de pesquisar no Google, mas eu não encontrei nenhuma informação a não ser que você pode faça isso em algumas situações de shell restritas. Não funciona no meu terminal quando eu tentei com zsh e bash ... por que isso funciona? A parte os.system parece com o Python para mim ... Alguém pode me fornecer algum conhecimento sobre isso? Se este é o Python, de que outra forma ele pode ser usado com o eco?

    
por Totem 13.06.2017 / 01:58

1 resposta

4

Este parece ter sido um problema que existia no LShell 0.9.15, um shell restrito implementado em python.

A função vulnerável foi chamada check_path() , que foi usada para verificar se um usuário tinha permissão para acessar o caminho fornecido na linha de comando.

O problema era que essa função usava eval() como um meio de extrair aspas da linha de comando, e isso também executaria qualquer expressão python válida.

        for item in line:
            # remove potential quotes
            try:
                item = eval(item)
            except:
                pass

Esse problema foi corrigido posteriormente na confirmação a seguir substituindo a chamada eval() por uma substituição de expressão regular: link

    
por 13.06.2017 / 08:57