Strano comportamento dello script di accesso Bash

Oct 06 2020

Attualmente sto creando un honeypot che registrerà tutti gli input degli utenti una volta che accedono con successo tramite SSH.

Ecco come funziona: la adminshell predefinita del mio utente honeypot è impostata su uno script bash:

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

Lo spawner.shscript andrà avanti e avvierà uno exceptscript e registrerà l'output usando 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"

Ecco le prime righe di 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

Quando eseguo lo script usando ./template.shas adminusing bash, lo script funziona perfettamente. Tuttavia, quando accedo utilizzando su, questo accade:

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
...

Perché il mio script bash non funziona con la shell dell'utente impostata su di esso? Non ci sono chiamate ricorsive all'interno del mio script e il scriptcomando dovrebbe bloccarsi!

E nel caso qualcuno sia preoccupato, questa macchina non ha connettività di rete in uscita. Può ricevere solo connessioni SSH. Sì, lo so che un utente può uscirne. Questo viene eseguito in una VM.

Risposte

1 laktak Oct 06 2020 at 01:35

Penso che tu stia usando una sceneggiatura senza uno shebang da qualche parte.

Vedi questa risposta :

Se la funzione execl () fallisce a causa di un errore equivalente all'errore [ENOEXEC] definito nel volume System Interfaces di POSIX.1-2008, la shell eseguirà un comando equivalente ad avere una shell invocata con il percorso risultante dalla ricerca come primo operando, con tutti gli argomenti rimanenti passati alla nuova shell, tranne per il fatto che il valore di "$ 0" nella nuova shell può essere impostato sul nome del comando. Se il file eseguibile non è un file di testo, la shell potrebbe ignorare l'esecuzione di questo comando. In questo caso, scrive un messaggio di errore e restituisce uno stato di uscita 126.

nella tua spawner.shaggiunta echo "$@"per ottenere ulteriori suggerimenti.

OK, quindi la risposta è più complicata, ma dovrebbe aiutare. In spawner.shaggiunta questo in alto:

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