Utilização

Verificando o Hardware

Comando para ver configuração de hardware no Linux:

less /proc/cpuinfo

Distribuição, Versão e Arquitetura

# Informações sobre o SO
cat /etc/issue
cat /etc/*-release

# Versão do Kernel
uname -a

# Arquitetura
arch

Módulos do Kernel

Verificando módulos do kernel

Selecione um módulo no resultado do comando acima e execute o comando abaixo para ver mais detalhes

Manuais de Ferramentas

A maioria das ferramentas disponíveis do Linux, possui um manual (man pages), que podem ser acessados pelo comando:

As páginas do manual são referenciadas por meio de seções enumeradas, por exemplo, ping(8) significa que determinada informação do comando ping, está na seção 8. Então para acessarmos, vamos utilizar o comando:

Caso não especifique a seção do manual, o comando man irá exibir o primeiro que achar. Segue abaixo uma lista com o significado das seções:

SEÇÃO

DESCRIÇÃO

1

Comando de Usuário

2

Chamadas de Sistema

3

Documentação geral da biblioteca de programação Unix

4

Interface de dispositivos e informações sobre drivers

5

Descrições de arquivo (arquivos de configuração de sistema)

6

Jogos

7

Formatos de arquivo, convenções e codificações (ASCII, sufixos e assim por diante)

8

Comandos de sistema e servidores

Verificando Espaço em Disco

Verificando Memória

Monitorando Processos

Arquivos de Processos

Em /proc/self/fd/<id>, podemos ver o descritor de arquivos de todos os processos. Útil para procurarmos por informações úteis e/ou flags escondidas

Variáveis de Ambientes

Variáveis de Ambiente vs Variáveis de Shell

Antes de mais nada, vamos diferenciar asVariável de Ambiente com asVariável de Shell. A primeira não é específica do shell e todos os processos de sistemas UNIX podem armazenam e utilizar. Já a segunda é uma variável temporária para o shell (esta não aparece na saída do comando env).

Visualizando

Abaixo os comandos para visualizar as Variáveis de Ambiente já definidas

Logar com Root

Para ficar logado como root, digite um dos seguintes comando:

Gerenciando Usuários

Alterando Senha

APT

Chaves do APT

Ao receber erro de chave no apt install, como NO_PUBKEY 07DC563D1F41B907, basta pegar os últimos 8 caracteres, nesse caso 1F41B907, e digitar os seguintes comandos:

OBS.: Caso o primeiro comando acima dê erro, utilize um dos comandos abaixo:

Se o erro ainda persistir, altere a URL pgpkeys.mit.edu por pool.sks-keyservers.net.

Instalações Essenciais

DPKG

OBS.: Depois de utilizar o comando dpkg -i (instalação), execute sudo apt install -f, para que o apt possa verificar o que foi feito e corrigir qualquer problema que tenha aparecido durante a instalação

Desabilitando IPv6 (Debian)

Arquivos passwd e shadow

passwd

O arquivo /etc/passwd (utilize o comando vipw para editá-lo) armazena informações da conta do usuário separadas por :. No exemplo abaixo temos a seguinte linha

BLOCO

DESCRIÇÃO

teste

Usuário

x

Senha criptograda que fica /etc/shadow. Se o usuário não tiver uma senha, o campo da senha terá um * (asterisco)

1001

Todo usuário deve receber um ID (UID). O UID 0 (zero) é mantido para o usuário root, os UID's de 1 a 99 são mantidos para contas pré-definidas adicionais, os UID's de 100 a 999 é mantido pelo sistema para fins administrativos e o UID 1000 é quase sempre o primeiro usuário que não é do sistema, geralmente um administrador. Se criarmos um novo usuário em nosso sistema, ele receberá o UID 1001

1001

Indica o grupo de cada usuário. Assim como os UID's, os 100 primeiros GIDs geralmente são mantidos para uso do sistema, o GID de 0 refere-se ao grupo raiz e o GID de 1000 geralmente significa os usuários. Geralmente, novos grupos recebem GID's iniciados a partir de 1000

,,,

Este é o Gecos Field. Geralmente, esse é um conjunto de valores separados por vírgula que informa mais detalhes relacionados aos usuários. O formato para o campo GECOS indica as seguintes informações: Nome completo do usuário, número do edifício e da sala ou pessoa de contato, número de telefone do escritório, número de telefone residencial, qualquer outra informação de contato

/home/teste

Indica o caminho do diretório inicial do usuário, onde todos os seus arquivos e programas são armazenados. Se não houver um diretório especificado, então / se tornará o diretório do usuário

/bin/bash

Denota o caminho completo do shell padrão que executa o comando (pelo usuário). Caso queira mudar de shell padrão, utilize o comando chsh

shadow

As senhas do Linux (na maioria das distribuições), podem ser encontrada em /etc/shadow e seguem o seguinte padrão:

  • São dividas em 3 partes, utilizando um cifrão ($) como delimitador

  • A primeira parte (contendo apenas 1 dígito) informa o tipo de criptografia (1 = MD5 | 2 ou 2a = Blowfish | 5 = SHA-256 | 6 = SHA-512)

  • A segunda parte indica o salt, para garantir que senhas iguais tenham hashes diferentes

  • A terceira parte é o hash da senha

Linux utiliza MCF (Modular Crypt Format), um dos formatos mais utilizados em sistemas UNIX. Sistemas como Iphone não usa MCF, o que facilita quebrar a senha

Log de Logins

Mostra os últimos logins

Mostra os últimos logins para cada usuário do sistema

Rwho

Para enumerar usuários conectados a um host remoto e que esteja executando o daemon rwho (rwhod), digite:

Procurando Ferramentas no Próprio SO

GRUB

As vezes podemos nos deperar na situação onde, o GRUD está instalado, porém não reconhece o Windows. Para corrigir isso, primeiro vamos veriricar se o Windows está disponível

Caso seja positivo, edite o arquivo /etc/default/grub e junto com as linhas onde não estão comentadas, adicione o conteúdo abaixo:

Agora basta atualizar o grub com o comando abaixo e depois reiniciar o computador.

Services

service

systemctl

Ao utilizar o enable, pode-se utilizar o caminho completo do file.service, caso não esteja no diretório padrão.

update-rc.d

Cronjob

OBS.: Para gerenciarmos de forma que podemos escolher o usuário que irá executar o script, basta editar o arquivo /etc/crontab.

No arquivo /etc/crontab também é possível esconder a execução de um script é uma linha que está comentada (inicia com um #), como no exemplo abaixo, onde o script após o \r será executado normalmente.

Acessando Windows via RDP

rdesktop

freeRDP

Listando Portas e Seus Serviços

Para ver uma lista completa de portas e serviços que podem rodar em um Linux, digite no terminal:

Executando Comandos sem Deixar no Histórico

Coloque um espaço antes dos comandos

O mesmo que atalhos no Windows

Subcomandos

Deixando Comandos Universal

A vantagem disso, é que é possível chamar determinado arquivo de qualquer lugar do SO (no terminal)

lsof

Expect

Automatizando a conexão com FTP. Crie um arquivo chamado ftp.sh com o seguinte conteúdo.

Criando e Montando um Diretório Próprio

Unidade de Discos Disponíveis

Deixando o Pendrive Bootavel

OBS.: Utilize dmesg ou lsblk para descobrir a partição do USB

Montando e Desmontando Unidades (HD/USB)

Saber montar e desmontar um diretório pode ser muito útil, como por exemplo, caso queira ter acesso a um Diretório NFS remoto

OBS.: Caso o disco não esteja em /dev/usb, execute sudo fdisk -l e veja se consegue encontrá-lo e então executar o comando acima para montar.

Montando Unidade de Disco de Outro Host

Para isso é preciso que outra máquina esteja compatilhando um ou mais diretórios.

Lendo Arquivos Deletados do Pen Drive

Para ler conteúdo de arquivos deletados em um USB, primeiro é preciso ver a sua partição:

Você então deverá ter uma saída como:

Após isso, execute o comando abaixo para ler conteúdos de arquivos:

noexec

Execute o comando mount e verifique sa há particões com a flag noexec ativa. Se tiver, significa que nessa montagem (diretório) não pode ser executado nenhum arquivo

Output em Colunas

Dividindo a saída em colunas

Acessando Site via Terminal

curl

Netcat

Ao digitar os comandos no Netcat, atente-se que o backspace e setas não funcionam. Outro ponto importante é, sempre que for utilizar a versão 1.1 do HTTP, passe a flag host no cabeçalho, caso contrário, provavelmente sua requisição será negada. Como um bom pentester, é sempre bom também utilizar a versão 1.0 (este não precisa informar o host) para verificar se é possível encontrar informações sensíveis no cabeçalho de retorno.

openssl

Acessa de forma semelhante ao Netcat, sendo preciso digitar os detalhes da requisição manualmente, porém com a diferença que este tem suporte a criptografia.

Wget

Explicação

PARÂMETRO

DESCRIÇÃO

m (Mirror)

Habilita os opções adequadas ao espelhamento do site

p (Page)

Garante que os arquivos necessários sejam baixados, incluindo imagens e arquivos CSS

E (Ajust Extension)

Todas as páginas são salvas como HTML

k (Convert Links)

Fará todas as páginas serem convertidas para visualização local

K (Keep Backup Converted)

Faz backup do arquivo original, com o sufixo, com o sufixo .orig

Chaves SSH

Existem algumas formas de trabalhar com chaves SSH e veremos aqui alguns desses métodos. Para todos os métodos, vamos utilizar o seguinte cenário:

Host 1 = Host que irá acessar via SSH Host 2 = Host SSH que será acessado

Método 1

O intuito deste cenário, serve para acessar determinado alvo via SSH sem precisar de senha.

Irá ser criado dois arquivos: ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub . Utilize o parâmetro -f name caso queira definir um nome manualmente.

Agora acesse o Host 2 (da forma que preferir) e adicione o conteúdo de id_rsa.pub (Host 1) em ~/.ssh/authorized_keys. Feito isso, o Host 1 já consegue acessar o Host 2 sem precisar de senha através do comando.

Caso tenha utilizado alguma senha ao usar o comando ssh-keygen, utilize o comando ssh-add id_rsa para validar o acesso pela primeira vez.

Método 2

No Host 2 digite o comando ssh-keygen -t rsa e escolha o lugar onde irá guardar as chaves (por padrão será ~/.ssh/id_rsa), altere-o caso seja de sua preferência. Supondo que tenha deixado os valores padrões, serão criados dois arquivos, sendo eles ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub. Agora transfira o arquivo ~/.ssh/id_rsa.pub do Host 2 para o Host 1 (no mesmo diretório).

Agora acesse o Host 1 e digite o comando ssh-copy-id <user-host2>@<ip-host2> e digite a senha de acesso SSH. Feito isso basta acessar o Host 2 via SSH com o comando ssh <user-host2>@<ip-host2>, que irá conectar sem pedir senha.

Para verificar se a chave gerada está correta, utilize o comando ssh-keygen -y -e -f </home/user/.ssh/id_rsa>, lembrando que a chave deve ter permissão 600 para funcionar corretamente.

As vezes é preciso indicar o caminho da chave privada ao acessar via SSH, exemplo ssh -i </home/user/.ssh/id_rsa> <user>@<ip>.

Em alguns casos, podemos nos deparar com chaves que contém criptografia, que é indicada no início do arquivo, parecido como no exemplo abaixo:

DICA: Caso não saiba a senha, utilize a seção de Brute Force Offline para verificar como quebrar senha de RSA.

Podemos reverter essa chave inserindo sua senha, utilizando o comando:

Também podemos gerar chaves públicas a partir da chave primária

Método 3

Gere as chaves no host 2 e o arquivo authorized_keys com os seguintes comandos:

Agora envie o arquivo id_rsa (chave privada) para o Host 1, e então ainda no Host 1, execute o seguintes comandos para realizar o acesso.

Em alguns casos, temos acesso a um usuário mo qual já possui os arquivo id_rsa e id_rsa.pub. Nesse cenário basta apenas copiar o arquivo id_rsa.pub para authorized_keys.

Erro ao acessar via SSH

É comum as vezes recebermos o erro Unable to negotiate with <ip> port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1, então precisamos modificar um pouco a nosso comando para realizar a conexão, ficando assim:

Tipo de Autenticação SSH

É sempre importanta validarmos o tipo de autenticação que pode ser realizado para conectarmos em um servidor SSH. Por exemplo, caso o server só aceite requisições utilizando chave pública, não adianta fazermos um brute force com usuário e senha procurando por credenciais válidas, porque isso não vai ser possível.

Para verificar as possibilidades de acesso, execute o comando abaixo, procure pela linha Authentications that can continue e verifique os seus valores.

VALOR

DESCRIÇÃO

publickey

Autenticação com arquivo de chave pública

password

Autenticação com usuário e senha. Caso não tenha essa opção disponível, ataques de Brute Force não funcionam

keyboard-interactive

Autenticação utilizando MFA

SSH Não-Interativo

Executando comando via SSH sem deixar o terminal no modo interativo

SSH Renderizando GUI na Máquina Client

SSH Server

Vá em /etc/ssh/sshd_config e descomente as seguintes linhas

Reinicie o serviço de SSH

SSH Client

Habilite o Forward

Acesse via SSH. O encaminhamento de X11 com -Y (opção de confiança) pode resolver alguns problemas que -X (opção segura) não consegue, porém ambos podem ser eficaz:

Agora abra serviço que tenha GUI, por exemplo:

Screen

A screen joga um processo para segundo plano e pode ser acessada futuramente. O ponto forte é que mesmo se a conexão cair (caso esteja conectado via SSH por exemplo), o processo continua rodando em background. Uma outra maneira de colocar o processo em segundo plano (para não deixar o terminal preso), coloque um & no final do comando.

OBS.: Para sair de uma screen sem perder a sessão, aperte CTRL + A + D

tmux

Esse é um concorrente do screen mostrado acima, pois desempenha as mesmas funcionalidades básicas.

No TMUX, uma sessão pode possuir diversas janelas (canto inferior do terminal), e cada janela possuir diversos painéis (semelhante ao Terminator).

Arquivo de Configuração

Utilize (crie caso não tenha) o arquivo ~/.tmux.conf para configurar o tmux do usuário atual. O exemplo de configuração abaixo, habilita o scroll do mouse, pesquisas por palavras semelhante ao VI e copiar palavras/texto utilizando o teclado.

Para recarregar o arquivo, execute

Caso queira configurar para todo o sistema, utilize o arquivo /etc/tmux.conf.

Comandos Básicos

IMPORTANTE: Antes de executar os comandos, certifique-se de pressionar CTRL + B e depois de soltar as duas teclas, pressionar próxima tecla ou digitar algum comando seguido de : (dois pontos).

Habilitando o scroll do mouse

Verificando sessões ativas

Acessando uma sessão já ativa

Iniciando uma sessão com nome personalizado

Detached na sessão

Criando nova janela

Renomeando uma janela

Alterando para a próxima sessão

Alterando para a sessão anterior

Alterando para uma sessão através do seu número

Dividindo a painel horizontalmente

Dividindo a painel verticalmente

Invertendo posições dos painéis

Alterando de painel

Exibindo o número dos painéis

Deixa o painel atual em tela cheia. Execute o comando novamente para voltar ao normal

Finalizando um painel

Finalizando uma sessão

Scroll no navegador como se fosse um editor de texto (caractere por caractere). Pressione q para sair

Ainda nesse modo, é possível realizar buscas em strings no buffer do terminal, pressionando CTRL + S. Após fazer isso, pressione N para avançar ou Shift + N para voltar, semelhante ao VI.

Além disso, podemos aproveitar esse modo para copiar textos, bastando ir até o texto que deseja copiar, pressione ESPAÇO, use as setas para selection e agora pressione y para copiar. Lembre-se de ativar o modo de cópia no arquivo ~/.tmux.conf conforme mostrado acima.

Telnet

Geralmente acessamos o telnet através do comando telnet <ip>, porém nem sempre o telnet está disponível. Nesse caso, podemos utilizar o netcat para realizar o acesso.

Acessando Windows via Remote Desktop

É possível acessar um Windows pelo RDP na porta 3389, a partir de um Linux

Criando Functions

Criar funcition pode ser útil para startar sistemas em background, conexões SSH, criar alias, etc. No exemplo abaixo, vamos inicializar uma tool e deixar o terminal livre para a utilização. Abra o arquivo com o comando nano ~/.bashrc e depois insira as seguintes linhas no final

Para não precisar reiniciar o SO, utilize o comando source ~/.bashrc (disponível somente nesse mesmo terminal). Agora só digitar no terminal: <name_metodo> (sem os parênteses)

Configurando Teclado

Ou se preferir, pode editar manualmente o arquivo /etc/default/keyboard OBS.: Utilize o arquivo /usr/share/doc/keyboard-configuration/xorg.lst para mais detalhes

Criando Diretórios com Vários Subdiretórios

Útil quando iremos criar um diretório e vários subdiretórios dentro desse diretório. Podemos fazer isso com um só comando ao invés de utilizar vários comandos.

Diretórios com Nomes Camuflados

No Linux é possível criar pastas chamadas .. ou . (atenção ao espaço no final). Isso é muito utilizado por hackers pra enganar os administradores de rede

Executando Comando por Arquivo

Verificando Tempo de Execução

Útil para saber quanto tempo determinado comando gasta para executar

Timestamp / Data

Configurando Data/Hora manualmente

Para voltar com o horário normal de forma automática (através do NTP), execute:

Sincronizando com um server NTP

Convertendo valores

Instalando Flash Player

Execute o comando abaixo e depois reinicie o nvegador

Xterm

Quando receber erro no terminal Error opening terminal: xterm-256color, execute o comando abaixo:

Esse erro ocorre porque o terminal precisa trabalhar com mais cores, por exemplo o ht editor, onde o terminal fica azul. Fora isso, você poderá ter recursos como o comando clear, caso esteja em uma shell reversa.

Montando Unidade de Disco com VMDK

Montando arquivos VMDK (HD de VM) como Unidade de Disco:

lynx

browsh

netcat

Weechat

Este é um bate papo via terminal

Lendo LOG's

Quando for abrir um arquivo de log como /var/log/wtmp, utilize o comando who ao invés de cat, pois esse arquivo está em binário.

Transformando a VPS em Proxy

Antes de realizar esse procedimento, tome cuidado, pois não está configurado para pedir senha na utilização do proxy

Placa de Vídeo NVidia (Ubuntu)

Exibindo as placas de vídeos no host

Instalando drivers

Visualizando informações da placa de vídeo (versão da placa, cuda, etc) e processos que estão utilizando

Vendo tudo o que está executando na placa de vídeo onboarding

Vendo a Previsão do Tempo

No final da url, coloque a sua cidade, por exemplo: Sao_Paulo

Sites

Last updated

Was this helpful?