Domanda

Attualmente utilizzo Vista e vorrei completare manualmente le stesse operazioni del mio servizio Windows.Poiché il servizio Windows è in esecuzione con l'account di sistema locale, vorrei emulare lo stesso comportamento.Fondamentalmente, vorrei eseguire CMD.EXE con l'account di sistema locale.

Ho trovato informazioni online che suggeriscono lavando il cmd.exe utilizzando lo scheduler di attività DOS al comando, ma ho ricevuto un avviso di vista che "a causa di miglioramenti della sicurezza, questa attività verrà eseguita al momento, ma non in modo interattivo". Ecco un comando di esempio:

AT 12:00 /interactive cmd.exe

Un'altra soluzione suggeriva di creare un servizio Windows secondario tramite Service Control (sc.exe) che avvia semplicemente CMD.exe.

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

In questo caso il servizio non si avvia e restituisce il seguente messaggio di errore:

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

Il terzo suggerimento era di avviare CMD.exe tramite un'attività pianificata.Sebbene sia possibile eseguire attività pianificate con vari account, non credo che l'account di sistema locale sia uno di questi.

Ho provato anche a utilizzare Runas, ma penso di riscontrare la stessa restrizione riscontrata durante l'esecuzione di un'attività pianificata.

Finora, ciascuno dei miei tentativi si è concluso con un fallimento.Eventuali suggerimenti?

È stato utile?

Soluzione

Sebbene non l'abbia testato personalmente, ho buone ragioni per credere che la soluzione AT COMMAND sopra indicata funzionerà per XP, 2000 e Server 2003.Secondo i test miei e di Bryant, abbiamo identificato che lo stesso approccio non funziona con Vista o Windows Server 2008, molto probabilmente a causa della maggiore sicurezza e dell'obsolezione dell'opzione /interactive.

Tuttavia, mi sono imbattuto in questo articolo che dimostra l'uso di PSTools da SysInternals (che è stato acquisito da Microsoft nel luglio 2006.) Ho lanciato la riga di comando tramite quanto segue e all'improvviso stavo funzionando con l'account amministratore locale come per magia:

psexec -i -s cmd.exe

PSTools funziona bene.È un set di strumenti leggero e ben documentato che fornisce una soluzione adeguata al mio problema.

Molte grazie a coloro che hanno offerto aiuto.

Altri suggerimenti

  1. Scarica psexec.exe da Sysinternals.
  2. Inseriscilo nell'unità C:\.
  3. Accedi come utente standard o amministratore e utilizza il seguente comando: cd \.Questo ti posiziona nella directory principale del tuo disco, dove si trova psexec.
  4. Utilizzare il seguente comando: psexec -i -s cmd.exe dove -i sta per interattivo e -s è per l'account di sistema.
  5. Al termine del comando, verrà avviata una shell cmd.Tipo whoami;dirà "sistema"
  6. Apri il task manager.Uccidi explorer.exe.
  7. Da un tipo di shell dei comandi con privilegi elevati start explorer.exe.
  8. Quando viene avviato Explorer, notare il nome "system" nella barra del menu Start.Ora puoi eliminare alcuni file nella directory system32 che come amministratore non puoi eliminare o come amministratore dovresti sforzarti di modificare le autorizzazioni per eliminare quei file.

Gli utenti che tentano di rinominare o eliminare file di sistema in qualsiasi directory protetta di Windows dovrebbero sapere che tutti i file di Windows sono protetti da DACLS mentre per rinominare un file è necessario modificare il proprietario e sostituire TrustedInstaller che possiede il file e rendere qualsiasi utente come un utente che appartiene al gruppo di amministratori come proprietario del file, quindi prova a rinominarlo dopo aver modificato l'autorizzazione, funzionerà e mentre esegui Windows Explorer con privilegi del kernel sei in qualche modo limitato in termini di accesso alla rete per motivi di sicurezza ed è ancora un argomento di ricerca per poter ottenere nuovamente l'accesso

Ho trovato una risposta Qui che sembra risolvere il problema aggiungendo /k start al parametro binPath.Quindi questo ti darebbe:

sc create testsvc binpath= "cmd /K start" type= own type= interact

Tuttavia, Ben ha detto che per lui non funzionava e quando l'ho provato su Windows Server 2008 ha creato il processo cmd.exe nel sistema locale, ma non era interattivo (non riuscivo a vedere la finestra).

Non penso che ci sia un modo semplice per fare quello che chiedi, ma mi chiedo perché lo stai facendo?Stai solo cercando di vedere cosa succede quando esegui il tuo servizio?Sembra che potresti semplicemente usare la registrazione per determinare cosa sta succedendo invece di dover eseguire l'exe come sistema locale...

Ti consiglierei di elaborare il set minimo di autorizzazioni di cui il tuo servizio ha realmente bisogno e di utilizzarlo, piuttosto che il contesto di sistema locale troppo privilegiato.Per esempio, Servizio locale.

I servizi interattivi non funzionano più, o almeno non mostrano più l'interfaccia utente, su Windows Vista e Windows Server 2008 a causa di isolamento della sessione 0.

un'alternativa a questo è Process hacker se vai in run as...(Interattivo non funziona per le persone con i miglioramenti della sicurezza ma ciò non importa) e quando la scatola si apre inserisci il servizio nel tipo di scatola e inserisci il sistema nella casella utente e inserisci C: Users Windows System32 cmd.exe Lascia il resto Fare clic su OK OK E BOCH hai una finestra con cmd su di esso ed esegui come sistema ora fai gli altri passaggi per te stesso perché sto suggerendo di conoscerli

Utilizzo di Secure Desktop per l'esecuzione cmd.exe COME system

Possiamo ottenere l'accesso al kernel CMD in Windows XP/Vista/7/8.1 facilmente allegando un debugger:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. Correre CMD come amministratore

  2. Quindi usa questo comando in Elevated:

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. Allora corri osk (tastiera sullo schermo).Non funziona ancora con il livello di integrità del sistema se controlli tramite Process Explorer, ma se puoi utilizzare OSK nella sessione di servizio, verrà eseguito come NT Authority\SYSTEM

quindi ho avuto l'idea che dovessi eseguirlo su Secure Desktop.

Avvia qualsiasi file come amministratore.Quando vengono visualizzati i prompt UAC, basta premere Vincita+U e iniziare OSK e inizierà CMD Invece.Quindi, nel prompt con privilegi elevati, digitare whoami e otterrai NT Authority\System.Successivamente, puoi avviare Explorer dalla shell dei comandi di sistema e utilizzare il profilo di sistema, ma sei in qualche modo limitato su ciò che puoi fare sulla rete tramite i privilegi di SISTEMA per motivi di sicurezza.Aggiungerò ulteriori spiegazioni più tardi poiché l'ho scoperto un anno fa.

Una breve spiegazione di come ciò accade

Corsa Cmd.exe Nell'account di sistema locale senza utilizzare PsExec.Questo metodo esegue la tecnica Debugger Trap scoperta in precedenza, beh, questa tecnica ha i suoi vantaggi: può essere utilizzata per intrappolare alcuni worm o malware astuti/dannosi nel debugger ed eseguire invece altri exe per arrestarne la diffusione o danni temporanei.qui questa chiave di registro intrappola la tastiera su schermo nel debugger nativo di Windows ed esegue invece cmd.exe, ma cmd verrà comunque eseguito con i privilegi degli utenti registrati, tuttavia se eseguiamo cmd in session0 possiamo ottenere la shell di sistema.quindi aggiungiamo qui un'altra idea: espandiamo il cmd sul desktop sicuro, ricordiamo che il desktop sicuro viene eseguito nella sessione 0 con l'account di sistema e otteniamo la shell di sistema.Pertanto, ogni volta che esegui qualcosa con privilegi elevati, devi rispondere al prompt UAC e ai prompt UAC su un desktop scuro e non interattivo e una volta visualizzato devi premere Vincita+U e quindi selezionare OSK otterrete CMD.exe in esecuzione con privilegi di sistema locale.Esistono ancora più modi per ottenere l'accesso al sistema locale CMD

C'è un altro modo.Esiste un programma chiamato PowerRun che consente l'esecuzione di cmd con privilegi elevati.Anche con i diritti TrustedInstaller.Consente sia comandi da console che da GUI.

se puoi scrivere un file batch che non deve essere interattivo, prova a eseguire quel file batch come servizio, per fare ciò che deve essere fatto.

Io uso il RunAsTi utilità da eseguire come TrustedInstaller (alto privilegio).L'utility può essere utilizzata anche in modalità ripristino di Windows (la modalità a cui si accede facendo Shift+Restart), IL psexec l'utilità non funziona lì.Ma devi aggiungere il tuo C:\Windows E C:\Windows\System32 (non X:\Windows E X:\Windows\System32) percorsi per il PATH variabile d'ambiente, altrimenti RunAsTi non funzionerà in modalità di ripristino, stamperà semplicemente: Regolazione dei privilegi Token per SeImpersonateName:Non tutti i privilegi o i gruppi a cui si fa riferimento vengono assegnati al chiamante.

Utilizzando l'utilità di pianificazione, pianifica un'esecuzione di CMDKEY in esecuzione in SYSTEM con gli argomenti appropriati di /add:/utente:e /passa:

Non è necessario installare nulla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top