Bash Anmeldeskript seltsames Verhalten

Oct 06 2020

Ich mache gerade einen Honeypot, der alle Benutzereingaben aufzeichnet, sobald sie sich erfolgreich über SSH angemeldet haben.

So funktioniert es: Ich habe die adminStandard-Shell meines Honeypot-Benutzers auf ein Bash-Skript eingestellt:

admin:x:1001:1001::/home/admin:/home/admin/HoneyPot/spawner.sh

Das spawner.shSkript startet ein exceptSkript und zeichnet die Ausgabe mit auf script.

#!/bin/bash
cd /home/admin/HoneyPot/template/

pwd
script -c "./script.exp" -t 2> timing.log -a output.session #start recording session, execute except script
echo "we should not get here"

Hier sind die ersten Zeilen von script.exp:

#!/usr/bin/expect -f
#
# This Expect script was generated by autoexpect on Mon Oct  5 13:55:35 
# boilerplate comments and code:

set force_conservative 0  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg
    }
}

# start of my code

set timeout -1
spawn emulator #emulator is a simh emulator executable. not a shell script.
...
interact

Als ich das Skript ausführen ./template.shals adminmit bash, wird das Skript völlig in Ordnung. Wenn ich mich jedoch mit anmelde su, geschieht Folgendes:

austin@ubuntu:~$ su admin
Password: 
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
...

Warum funktioniert mein Bash-Skript nicht mit der darauf eingestellten Shell des Benutzers? In meinem Skript gibt es keine rekursiven Aufrufe, und der scriptBefehl sollte blockiert werden!

Und für den Fall, dass sich jemand Sorgen macht, verfügt dieser Computer über keine ausgehende Netzwerkverbindung. Es können nur SSH-Verbindungen empfangen werden. Ja, ich weiß, dass ein Benutzer daraus ausbrechen kann. Dies wird in einer VM ausgeführt.

Antworten

1 laktak Oct 06 2020 at 01:35

Ich denke, Sie verwenden irgendwo ein Skript ohne Shebang.

Siehe diese Antwort :

Wenn die Funktion execl () aufgrund eines Fehlers fehlschlägt, der dem im Volume System Interfaces von POSIX.1-2008 definierten Fehler [ENOEXEC] entspricht, muss die Shell einen Befehl ausführen, der dem Aufrufen einer Shell mit dem aus der Suche resultierenden Pfadnamen entspricht als erster Operand mit allen verbleibenden Argumenten, die an die neue Shell übergeben werden, mit der Ausnahme, dass der Wert von "$ 0" in der neuen Shell auf den Befehlsnamen gesetzt werden kann. Wenn die ausführbare Datei keine Textdatei ist, kann die Shell diese Befehlsausführung umgehen. In diesem Fall wird eine Fehlermeldung geschrieben und ein Exit-Status von 126 zurückgegeben.

in Ihrem spawner.shAdd echo "$@", um weitere Hinweise zu erhalten.

OK, die Antwort ist komplizierter, aber das sollte helfen. In spawner.shhinzufügen , um diese eine der Top-:

if [[ $1 == -c ]]; then exec bash "$@"
fi