Questão Linux é possível executar script como dono de arquivo?


Lamento não saber que este é o lugar correto ou não. Estou com pressa, correndo com o tempo. Eu tenho um arquivo que tem os seguintes atributos em uma máquina Linux. (kernel 2.6.26)

-rwxrwxrwx 1 root root 25 2015-06-01 08:08 /usr/bin/runme

Eu não tenho privilégios de root na máquina e não sei senha de root. É possível executar este script como proprietário. Eu tenho escrever e compilar algum código c em um arquivo diferente, mas não funcionou. O código que usei;

#include <unistd.h>
#include <errno.h>

int main(void) {        
     setuid(0);
     system("/bin/bash /usr/bin/runme"); 
}

Então alguém disse que usar execve, mas o resultado não é alterado. Aqui está o código quando eu uso execve;

#include <unistd.h>
#include <errno.h>

int main(void) {        
        extern char * const environ[];
    char * const command[] = {"runme", NULL, NULL, NULL, NULL,NULL, NULL};
    execve("/usr/bin/runme", command, environ);
}

1


origem


Questões específicas para programação e desenvolvimento de software estão fora do tópico, veja Quais tópicos posso perguntar aqui?. Experimentar Estouro de pilha mas, por favor, leia primeiro Como faço uma boa pergunta?. - DavidPostill♦
A ironia que eu abri esta questão para empilhar estouro e eles disseram a mesma coisa que você disse. Então, o que devo fazer com a minha pergunta? - Cello


Respostas:


É possível, mas você deve ser extremamente cuidadoso - seu script tem privilégios globais de leitura / gravação, o que significa alguém poderia mudá-lo e, portanto, poderia fazer qualquer coisa como root.

Isso é uma espécie de buraco de segurança. Se você quiser obter um normal binário para executar como um usuário você precisa adicionar o setuid bandeira para o binário com chmod g+s. Isso você terá que fazer como root, porque isso também está abrindo uma enorme falha de segurança se você não o fez.

Se você quiser fazer com um script ... isso depende da linguagem de script. Alguns (na verdade - muitos) simplesmente se recusam a trabalhar, devido à maneira como são implementados - novamente, risco de segurança.

Eu sugeriria que a raiz (sic) para ir aqui é olhar para sudo - é um "super usuário" e permite que usuários não privilegiados executem comandos como contas privilegiadas (ou raiz). Então - uma vez configurado - você pode:

sudo /path/to/script

Embora, eu ainda não deixasse esse roteiro de mundo gravável. Isso ainda é um risco de segurança.

Se você não tem root, nenhuma senha de root e nenhum acesso de administrador ... então eu sugiro que é porque NÃO é o seu sistema, e você pára de tentar fazer isso, porque provavelmente é o uso indevido do computador e pode ser um crime dependendo de onde você vive.


3



Obrigado por você responder. Não há risco de ser um crime, basta executar esse arquivo de script com privilégios de root. Eu editei esse arquivo e coloquei algum código para me conectar. Eu posso executá-lo, mas ele é executado com meus privilégios. - Cello


Não há nenhuma maneira (sem usar uma vulnerabilidade) para executar um script (ou qualquer executável) como outro usuário, a menos que esse usuário tenha concedido a você esse direito em algum momento.

Para executáveis ​​"reais", isso pode ser feito usando o bit setuid, que pode ser definido pelo proprietário do arquivo. Para scripts, os ambientes modernos normalmente ignoram o bit setuid, então você precisaria de algum tipo de wrapper (personalizado ou sudo). Vejo https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts para mais detalhes.

Seu caso específico é um excelente exemplo de como o bit setuid pode ser perigoso. Ter o bit setuid em um arquivo que é mundialmente gravável e executável permitiria executar qualquer comando como o proprietário do arquivo. Como o dono do arquivo é realmente root, substituindo o conteúdo de tal arquivo por, por exemplo, o conteúdo do bash lhe concederia um shell root.


2



Obrigado pela explicação, mais uma pergunta, o que deve ser escrito nesse arquivo para ter um shell de root? Eu tentei tudo com execve e execl como você vê. Mas eu não consegui um shell de root. Existe um exemplo para isso? - Cello
Eu disse isso seria estar. No seu caso, o arquivo não tem o setuid bit set, e somente o dono do arquivo (ou root) pode configurá-lo. - user2313067