Run as sin tener que escribir password

Iniciado por krizalidk, 26 Mayo 2015, 01:47 AM

0 Miembros y 1 Visitante están viendo este tema.

krizalidk

Hola amigo gracias por su apoyo por anticipado

el detalle que tengo es que quiero aplicar un bat pero solo funciona si este se ejecuta por admin pero no quiero que escriba la contraseña. alguien que me pueda apoyar




tengo algo asi

runas /user:usuariolocal D:\install.bat oakshu2

saludos

Eleкtro

#1
Buenas.

krizalidk,
1. Está prohibido hacer doble post.
2. Es obligatorio utilizar las etiquetas de código para insertar código.
3. Lee las normas del foro.

Para automatizar la autentificación del usuario especificado, puedes añadir la opción /savecred para guardar las credenciales de autentificación cómo su nombre indica,
esto quiere decir que necesitarás introducir la contraseña una única vez, pero las siguientes veces no será necesario:
runas.exe /noprofile /user:"domain\user" /savecred "file"

En su defecto, puedes utilizar la efectiva aplicación de terceros psexec:
psexec.exe \\computername -u "domain\user" -p "password" "file"

O tambien puedes probar esta alternativa, que consiste en aplicar un cambio de política de usuario para permitir contraseñas en blanco, crear la cuenta de usuario oculta "Administrator" ("Administrador" si windows está en Español), asignarle una contraseña en blanco a la cuenta, y utilizar el comando runas de manera corriente:
Using RunAs With a Password

Saludos.








Kaxperday

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

krizalidk

muchas gracias por el tema pero se puede hacer algo para que no pida el password es que aquí mencionas que lo requiere una vez pero como lo voy empaquetar y se realizara de forma silenciosa requiero esa parte

Kaxperday

#4
Elektro a ver si he entendido bien, si corro ese comando con mi aplicacion cuando la ejecuto la primera vez con permisos de administrador, entonces ya no me pediría más veces las credenciales?

He implementado esto, debería funcionar?

Código (csharp) [Seleccionar]
public Boolean elevacionUAC()
       {
           // Launch itself as administrator
           ProcessStartInfo proc = new ProcessStartInfo();
           proc.UseShellExecute = true;
           proc.WorkingDirectory = Environment.CurrentDirectory;
           proc.FileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; //Application.ExecutablePath;
           proc.Verb = "runas";
           proc.Arguments="/noprofile /user:\""+Dns.GetHostName()+" /savecred \""+System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase+"\"";
           try
           {
               Process.Start(proc);
               return true;
           }
           catch
           {
               return false;
           }
       }


Tras ejecutar eso se supone que ya no me pediría mas a elevacion de UAC (mientras mantenga la misma pass se supone) y se podría lanzar siempre con el UAC?

Código (csharp) [Seleccionar]
public void EjecutarComando(String _Command)
        {
            System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + _Command);
            // Indicamos que la salida del proceso se redireccione en un Stream
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            try { proc.Start(); Console.WriteLine("acieeerto"); }
            catch { Console.WriteLine("errorr"); }
           
            //Consigue la salida de la Consola(Stream) y devuelve una cadena de texto
            string result = proc.StandardOutput.ReadToEnd();
            //Muestra en pantalla la salida del Comando
            Console.WriteLine(result);
        }


Mejor este codigo y pasarle como cadena el comando siguiente:

runas.exe /noprofile /user:"domain\user" /savecred "file"

En domain/user nuestro nombre de usuario y en file el path del archivo.

¿con eso funcionaría? También me gustaría saber como crear otro usuario en runas con permisos de admin y sin contraseña creo que era, gracias.

Gracias y saludos socio.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eleкtro

Cita de: Kaxperday en 26 Mayo 2015, 18:02 PMTras ejecutar eso se supone que ya no me pediría mas a elevacion de UAC (mientras mantenga la misma pass se supone) y se podría lanzar siempre con el UAC?

Así es, teoricamente no debería darte problemas, pero por otro lado las credenciales podrían "expirar" en ciertas circunstancias si se ejecuta runas de forma remota o si la cuenta tiene una contraseña que expira al pasar "X" días, o si simplemente se cambia la contraseña cómo tu has dicho, claro está.

PD: No llenes el foro de scripting con códigos de C#  :¬¬

Saludos








Kaxperday

Sorry XD, espero que sea el último de todas formas ejecuto batch desde c sharp  ;D ;D

Código (csharp) [Seleccionar]
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + "runas.exe /noprofile /user:\""+Dns.GetHostName()+" /savecred \""+Directory.GetCurrentDirectory()+"\\Nighthawk.exe");
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            try { proc.Start(); MessageBox.Show("acieeerto"); }
            catch { MessageBox.Show("errorr"); }


He ejecutado eso me sale "acierto" luego el comando parece ejecutarse sin problemas, pero sin embargo vuelvo a ejecutar la aplicación y me vuelve a pedir permisos :silbar: :silbar: :silbar: :-X :o
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

krizalidk

alguna sugerencia con mi pregunta???

Eleкtro

#8
Cita de: krizalidk en 26 Mayo 2015, 18:45 PMalguna sugerencia con mi pregunta???

A menos que desactives UAC... no lo creo, pero tampoco soy un gurú sobre vulnerabilidades de seguridad en Windows, quizás se pueda con alguna manera rebuscada.

Puedes deshabilitar UAC de manera automatizada, pero requiere permisos ...claro está, y la desactivación requiere un reinicio de sesión para aplicar el cambio, así que no te sirve para lo que quieres hacer.




Cita de: Kaxperday en 26 Mayo 2015, 18:36 PMHe ejecutado eso me sale "acierto" luego el comando parece ejecutarse sin problemas, pero sin embargo vuelvo a ejecutar la aplicación y me vuelve a pedir permisos :silbar: :silbar: :silbar: :-X :o

Reinicia el PC o reinicia la sesión de usuario para aplicar y testear el cambio correctamente, ¿te sigue pidiendo contraseña?, en caso afirmativo, ¿si lo haces desde la CMD (no desde tu app), te pasa lo mismo?.

De todas formas, ¿has probado a combinarlo con la utilización de un archivo de manifiesto?, en especial modificando los elementos requestedExecutionLevel y autoElevate

Application Manifests - MSDN

En VisualStudio, 'Add' > 'New File' > 'Application Manifest'...

Prueba algo parecido a esto:

app.manifest
Código (xml,8,15) [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
   <security>
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
     </requestedPrivileges>
   </security>
 </trustInfo>

 <asmv1:application>
    <asmv1:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
         <autoElevate>true</autoElevate>
    </asmv1:windowsSettings>
 </asmv1:application>
 
 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
   <application>
   </application>
 </compatibility>

</asmv1:assembly>


Saludos








Kaxperday

Buenas socio, gracias por la respuesta.

He probado esto:

runas.exe /noprofile /user:%username% /savecred "C:\Users\Usuario\Desktop\Night.exe"

En la cmd, me pedía la contraseña la ingresé y luego me dijo que la elevación requería privilegios WTF!.

Lo del xml ya lo tenía al compilar la app la tengo con "requireAdministrator" y me sale el icono del UAC, y al clickar me pide permisos y corre con permisos, pero eso es lo que busco crear las runas en la primera ejecución y que no las vuelva a pedir más, pero no se si funcionará porque mientras siga el icono.. no sé.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.