Sfruttare il percorso del servizio non quotato non funzionante

1

Ho trovato un servizio sul mio computer Windows 10 che utilizza un percorso di servizio non quotato. Poiché il percorso contiene e non sono citati, Windows cerca il file .exe nel seguente modo:

C:\Program.exe

C:\Program Files (x86)\Donald.exe

C:\Program Files (x86)\Donald Duck\Donald_Duck.exe <original path>

Il mio problema attuale è che se inserisco un altro file exe in C: \ Programmi (x86) \ Donald.exe che voglio che venga eseguito, ottengo questo messaggio di errore:

"A timeout (30000 milliseconds) was reached while waiting for a transaction response from the Donald Duck service".

Il servizio che avvia questo processo durante l'avvio è NT AUTHORITY \ SYSTEM e ha accesso completo a entrambi i file. Appena ottengo questo errore sono abbastanza sicuro che il file sia nel percorso corretto ma non so come sfruttare ulteriormente questa vulnerabilità poiché il Visualizzatore eventi non mi fornisce informazioni più dettagliate.

Potrebbe esserci qualche forma di hashcheck prima dell'esecuzione del file?

    
posta user3316995 16.12.2016 - 11:08
fonte

3 risposte

1

Il tuo servizio dovrebbe sempre tornare a Windows Service Manger (SIM) entro un lasso di tempo adeguato ... se il tuo file .exe è una back door ovviamente non tornerà al gestore di Windows ... Puoi fare il tuo donald .exe per avviare un altro processo e tornare in sicurezza a Windows .. l'altro proc può essere la tua backdoor.Check esempio di creazione di un processo in msn per questo.

    
risposta data 14.07.2017 - 07:54
fonte
1

Vinod ha le informazioni giuste, ma per approfondire un po ':

La Gestione controllo servizi (SCM, vedi anche MSDN ) è il processo genitore di tutti i servizi di Windows, ed è anche un Richoto Procedura chiamata (RPC) server. Quando viene avviato un servizio (e supponendo che il servizio non sia in un file binario condiviso, in genere svchost.exe , che è una configurazione utilizzata principalmente per i servizi scritti da Microsoft), SCM lancia il comando di servizio (nell'esempio, C:\Program Files (x86)\Donald Duck\Donald_Duck.exe e quindi attende che il servizio si riconnetta a SCM tramite RPC e segnala che è in fase di avvio . Se il servizio non riesce a segnalare allo SCM (o segnala che non è stato possibile avviare per qualche motivo, o non riesce a passare dallo stato di avvio a quello di esecuzione) entro un limite di tempo (30000 ms o 30 secondi) allora lo SCM ucciderà il processo .

A scopo di sfruttamento, ci sono tre modi per aggirare questo.

  • Esegui il tuo lavoro all'interno della finestra dei 30 secondi (idealmente bene all'interno di esso, poiché su una macchina sufficientemente carica puoi spendere un sacco di quella finestra in attesa del tempo della CPU o dell'I / O). Se tutto quello che devi fare è, ad esempio, cambiare una chiave di registro o accedere a un file, o forse qualcosa come iniettare una DLL in un altro processo privilegiato, questo di solito va bene.
  • Avvia un processo figlio che esegue il lavoro effettivo. Lo SCM ucciderà il processo che ha avviato, ma i figli di quel processo possono continuare l'esecuzione.
  • Riferisci all'SCM che sei, di fatto, il servizio dirottato e stai facendo la cosa giusta. Questo non è banale, ma in realtà non è così difficile se si conosce una programmazione C o, in particolare, Win32 (in particolare, non è necessario sapere nulla di RPC, poiché è tutto racchiuso in API ServiceDoThing() Win32). Potrebbe essere necessario farlo se, ad esempio, è importante per il tuo scenario di exploit che il servizio sembra essere in esecuzione (forse qualche altro componente si preoccupa se l'avvio del servizio è riuscito, o qualche processo di monitoraggio si lamenterà con qualcuno se il lancio fallisce) . La documentazione sulla segnalazione di un programma di servizio si trova in MSDN .

Indipendentemente da tutto ciò, c'è qualcos'altro da considerare. A meno che qualcuno non abbia modificato le autorizzazioni NTFS dai loro valori predefiniti, non puoi effettivamente creare nessuno di quei file senza già essere un amministratore! Per impostazione predefinita, gli utenti non amministratori possono creare (o modifica) directory ma non file nella directory principale di un'unità e, naturalmente, la directory Program Files (x86) esiste già, quindi non è possibile crearne una nuova copia. Né puoi rinominarlo, per sostituirlo con un'altra directory che controlli. Inoltre, non puoi creare, modificare o rinominare i contenuti di Program Files o Program Files (x86) , senza i privilegi di amministratore.

Poiché avere i privilegi di amministratore equivale ad avere i privilegi di SISTEMA (cioè, un amministratore può prendere il controllo e modificare l'ACL su qualsiasi cosa a cui desidera accedere anche se normalmente è di solo SISTEMA, o può semplicemente lanciare un programma come SISTEMA) , se hai abbastanza privilegi per sfruttare questo errore di codifica, hai già tutti i privilegi che ti darebbe. In altre parole, non c'è Escalation of Privilege qui . È è ancora un errore di codifica e potrebbe avere un impatto sulla sicurezza su un sistema configurato in modo errato, ma a quel punto l'errore si riduce a chiunque abbia modificato gli ACL nella directory principale dell'unità o in Program Files (x86) directory.

    
risposta data 12.12.2017 - 02:36
fonte
0

È possibile che una correzione, come ad esempio - link - sia stata implementato?

    
risposta data 13.02.2017 - 23:53
fonte

Leggi altre domande sui tag