root@system:~# less myfile
-bash: /bin/less: Input/output error
O sistema de arquivos raiz está morto. Mas meu gato ainda está vivo (na minha memória):
root@system:~# cat > /tmp/somefile
C^d
root@system:~#
Ele é meio solitário, porém, todos os seus amigos se foram:
root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error
O sistema ainda está em execução e cumprindo sua finalidade. Eu sei, eu sei, a única resposta sensata a isso é baixar o sistema e substituir a unidade raiz. Infelizmente, isso não é uma opção, pois custaria muito tempo e dinheiro. Além disso, isso mataria meu gato, e isso me deixaria triste.
Pensei em trazer a ele seus amigos habituais de um doador. Não ouso tentar scp-los, no caso de o ssh tentar carregá-lo e cortar a linha (o binário desapareceu de qualquer maneira). Isso parece um trabalho para o primo do meu gato:
root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found
Infelizmente, ele se foi há muito tempo.
Agora, posso tentar enganar meu gato para realizar um ritual para ressuscitá-lo:
cat > netcat < /dev/tcp/localhost/9999
E esse tipo de trabalho. Ele está quase vivo:
root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied
Ele só precisa de uma pequena centelha de vida. Aquele pequeno +x
encantamento mágico que não posso recitar no momento.
Você pode me ajudar a trazer os amigos do meu gato de volta?
fonte
/lib/ld-linux.so.2 ./netcat
(ou o equivalente do seu sistema) e fazer alguma coisa?Respostas:
Existem várias possibilidades, todas dependendo dos parâmetros exatos da sua situação agora. Vou assumir o Linux nos exemplos a seguir, quando aplicável, mas na maioria dos casos existe funcionalidade semelhante em outras plataformas.
Você pode conseguir que o carregador dinâmico execute um executável para você. Supondo que
cat
esteja vinculado dinamicamente, o equivalente a sua plataforma/lib/ld-linux.so.2
provavelmente também estará na memória e, portanto, utilizável para executar um binário:Você pode ter várias delas (provavelmente de 32 e 64 bits) e pode haver várias cópias disponíveis ou links simbólicos que precisam ser resolvidos. Um desses pode funcionar.
Se você possui um sistema de arquivos vfat ou NTFS montado ou outro que trata todos os arquivos como 777, é possível criar seu executável lá.
Se houver uma partição montada você não se preocupam com o conteúdo, em uma unidade que ainda é maioritariamente de trabalho, você pode substituir o conteúdo com uma nova imagem do mesmo tipo de sistema de arquivos contendo arquivos executáveis que você quer -
cat
deve ser bom para isso no função que as pessoas costumam usardd
e você pode fornecer a imagem pela rede.Este é plausível, mas há muitos lugares para não funcionar, dependendo do que ainda está na memória dessa partição.
Se houver algum arquivo acessível que tenha permissão de execução em qualquer sistema de arquivos gravável, você poderá
cat >
substituir o conteúdo por um binário de sua escolha.ctypes.sh
, o que fornece uma interface de função externa para o Bash e, em seguidadlcall chmod ./netcat 511
.Você pode trazer um arquivo
foo.so
de biblioteca dinâmica de sua construção e, em seguida,cat
carregá-lo em seu nomeLD_PRELOAD
, permitindo executar código arbitrário.Se você interceptar, por exemplo
open
:então você pode fazer o que for necessário.
Minha sugestão seria trazer um
busybox
executável vinculado estaticamente como o primeiro item (ou realmente, o único item) para que você tenha toda a gama de comandos disponíveis sem reutilizar qualquer truque que o leve a esse ponto até a exaustão.fonte
busybox
": observe quesash
foi projetado especificamente para esse tipo de caso de uso e pode estar mais disponível rapidamente (por exemplo, você pode instalá-lo com antecedência e deixar uma cópia em algum lugar para que fique na memória quando o sistema pausas ... ou você pode abandonar seus animais de estimação e comprar um monte de gado, suponho).