imprime o arquivo / etc / shadow no console

2

Como altero as permissões de um arquivo executável para acessar o arquivo / etc / shadow?

Até agora eu tenho o seguinte script bash:

#!/bin/bash

gcc print.c -o print
chmod +s print

./print

exit 0

e o seguinte código c:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *open = fopen("/etc/shadow", "r");
    int tmp;

    do {
      tmp = fgetc (open);
      printf("%c", tmp);
    } while (tmp != EOF);

    fclose(open);
    return 0;
}

Eu posso imprimir facilmente o arquivo /etc/passwd , mas recebo um núcleo despejado assim que tento acessar o arquivo /etc/shadow .

    
por Mark 24.10.2014 / 23:25

2 respostas

4

Para dar uma permissão binária para executar as coisas como root, você precisa definir o "sticky bit" no binário.

Normalmente, depois da compilação, você pode ver:

# ls -l print
-rwxr-xr-x  1 mark  mark  111 24 Oct 17:32 print

Definir o bit set-uid (sticky) pode ser feito usando o modo octal, ou simbolicamente (observe que você precisará de privilégios de "root" para alterar a propriedade de um arquivo):

# chown root print
# chmod o-x print
# chmod u+s print
# ls -l print
-rwsr-xr--  1 root  mark  111 24 Oct 17:32 print

Na primeira versão, o s nas permissões, como você já descobriu, indica que isso é executável e "set-uid". Mas você também precisa alterar a propriedade do arquivo, para que "set-uid" defina o fluxo de root em vez de seu próprio usuário. Neste ponto, o "grupo" não mudou seu valor, mas isso não é importante neste caso específico. (Embora possa ser um fator de segurança.)

A linha final acima mostra as permissões que também podem ser expressas como um número octal, portanto, se esse for o resultado desejado, você poderá substituir as duas chmod linhas acima por uma única:

# chmod 4754 print

Dê uma olhada na página man do chmod para mais detalhes.

Se não for isso que você está procurando, esclareça suas dúvidas na sua pergunta.

NOTA IMPORTANTE : o arquivo /etc/shadow é mantido privado por um motivo. Se você a expuser com algo que possa ser executado por outros usuários, poderá comprometer a segurança do seu sistema. Remover a permissão executável do mundo é um "aceno" em relação à segurança, mas se você acha que precisa expor /etc/shadow desta forma, você pode estar resolvendo o problema errado .

    
por 24.10.2014 / 23:49
2

É possível sem ser root, mas você deve configurar o SUID para o seu programa. Há duas maneiras de fazer isso, que são exatamente iguais, de qualquer forma.

chmod u+s [program]
chmod 4755 [program]

Você pode querer ver SETUID

Além disso, se você quiser lidar com isso em C:

Você deve verificar a função setuid

E se você quiser fazer isso no bash:

Você deve verificar o setuid em scripts de shell

    
por 25.10.2014 / 17:16