È possibile eseguire il codice shell dal linguaggio di programmazione A in uno script programmato nella lingua B? [chiuso]

1

Mi dispiace per il titolo confuso, ma quello che sto chiedendo è questo: potresti eseguire il codice shell da C (o qualsiasi altro linguaggio di programmazione) in uno script di buffer overflow programmato in Java (o in qualsiasi altro linguaggio di programmazione )?

    
posta Jon .C 30.10.2016 - 21:13
fonte

1 risposta

2

La risposta rapida alla tua domanda confusa è "sì".

Gli attacchi di overflow del buffer richiedono alcuni passaggi. C'è la fase di consegna (consegna della vulnerabilità), exploit injection (ottenendo il controllo del puntatore delle istruzioni), esecuzione dell'exploit (ottenendo il puntatore delle istruzioni per eseguire il codice dell'attacker) e il codice shell (il payload che l'utente malintenzionato vuole eseguire.)

Fornire l'exploit è assolutamente banale. Gli attaccanti scrivono il codice di consegna in qualsiasi lingua siano competenti. Non importa in quale lingua è scritto il codice di consegna, perché la lingua deve semplicemente essere in grado di fornire valori di byte specifici nel buffer nel punto dell'overflow. Lingue diverse hanno diversi modi di esprimere valori di byte. Molti attacchi in questi giorni vengono consegnati in URL, che sono stringhe di testo perfettamente in grado di specificare valori di byte esatti. Ho visto un attacco consegnato all'interno di un codice a barre, che è intelligente, ma ancora banale.

Il passaggio di input di exploit utilizza quasi sempre il linguaggio della macchina binaria della macchina vittima per sfruttare la vulnerabilità. L'autore dell'attacco trova un modo per ottenere specifici byte caricati nel buffer al punto giusto, in modo che quando la funzione che contiene il buffer ritorni, carica i byte dell'attaccante nel puntatore di istruzioni invece dei byte che dovrebbero essere presenti.

Una volta che l'attaccante ha il controllo del puntatore delle istruzioni, l'IP deve essere impostato in modo da puntare al codice di sfruttamento ed eseguirlo. Questo può essere facile, questo può essere difficile, o questo può essere praticamente impossibile. Fa tutto parte dell'analisi delle vulnerabilità per creare un exploit di successo. L'obiettivo qui è quello di ottenere il computer della vittima per avviare il codice della shell.

Una volta che l'exploit lancia il codice shell dell'attaccante, il resto è cronologia. Il codice shell è specifico per la macchina su cui viene eseguito. Molto spesso, è anche nelle istruzioni della macchina binaria che sono scritte a mano in assembler, perché il buffer originale che viene attaccato di solito ha vincoli di dimensione. Una vulnerabilità di buffer overflow non significa automaticamente che sia disponibile un buffer di dimensioni infinitesime per consentire all'utente malintenzionato di consegnare tutto un carico di codice shell in una sola volta.

Una volta che il codice shell è in esecuzione, l'utente malintenzionato ha bloccato la macchina e può controllarla come desidera. Per iniziare, spesso il codice shell espone una shell di comandi nativa presente sulla macchina vittima. Potrebbe essere bash, una shell di comandi di Windows, PowerShell. Altre possibilità includono il download e l'esecuzione di un agente malware; consentendo operazioni gestite da remoto. I nomi comuni per queste macchine infette sono "bot" o "zombi". Questi vengono eseguiti in un linguaggio di comando e controllo personalizzato progettato per gestire migliaia di macchine in una botnet. Una volta che il codice shell è in esecuzione, l'autore dell'attacco è libero di scaricare altro codice per eseguire i suoi comandi dannosi.

Si noti che tutte le lingue di exploit non sono completamente correlate alla lingua in cui l'attacco è stato originariamente pubblicato.

    
risposta data 30.10.2016 - 22:13
fonte

Leggi altre domande sui tag