Inyección de DLL con permisos administrador

Iniciado por Kaxperday, 4 Noviembre 2015, 20:20 PM

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

Kaxperday

Buenas, tengo una duda y es la siguiente:

Si creo una dll que muestra un mensaje, y la inyecto a un proceso ¿necesito solo el pid del proceso no?, en plan creo una dll que dice "hola mundo", la inyecto en svchost.exe ¿y listo?, ¿o tengo que hacer ingeniería inversa de svchost.exe?.

Si svchost.exe corre como system, el programa que ejecuto en mi dll correría como system?, puedo conseguir que lo haga a través del token de svchost.exe? ya que se supone lo ejecuta ese proceso si la inyecto a el.

La idea es saber si con este proceso podré tener permisos de administrador (o system que son como los de administrador pero con más opciones aún  si no me equivoco) siempre para mi dll, pues mi dll necesita permisos de administrador siempre.

¿Con inyección de dll puedo conseguir permisos de administrador sin que salga el uac para siempre?, es decir windows se reiniciaría y el programa de mi dll correría en system sin mensajes ni nada, ¿no?.

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

Miseryk

Cita de: Kaxperday en  4 Noviembre 2015, 20:20 PM
Buenas, tengo una duda y es la siguiente:

Si creo una dll que muestra un mensaje, y la inyecto a un proceso ¿necesito solo el pid del proceso no?, en plan creo una dll que dice "hola mundo", la inyecto en svchost.exe ¿y listo?, ¿o tengo que hacer ingeniería inversa de svchost.exe?.

Si svchost.exe corre como system, el programa que ejecuto en mi dll correría como system?, puedo conseguir que lo haga a través del token de svchost.exe? ya que se supone lo ejecuta ese proceso si la inyecto a el.

La idea es saber si con este proceso podré tener permisos de administrador (o system que son como los de administrador pero con más opciones aún  si no me equivoco) siempre para mi dll, pues mi dll necesita permisos de administrador siempre.

¿Con inyección de dll puedo conseguir permisos de administrador sin que salga el uac para siempre?, es decir windows se reiniciaría y el programa de mi dll correría en system sin mensajes ni nada, ¿no?.

Un saludo.

Lo que hacés cuando inyectás es escribir memoria (openprocess, necesitás el handle del proceso) en el proceso target y luego con CreateRemoteThread "ejecutás" desde esa posición de memoria que escribiste, para poder inyectar una dll a un proceso system hay que hacer algunas cosas bastante complicadas, la dll no necesita permisos, el inyector necesita esos permisos, una vez que estás adentro podés tomar el control de todo el proceso con el nivel que quieras.
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

Kaxperday

Una pregunta, ¿cuantas veces necesito inyectar mi DLL en la memoria?, ¿una vez solo, la primera vez?... ¿o todas las veces que vaya a ejecutar mi programa?.

Ejemplo me infecto un proceso con mi dll, reinicio el ordenador, ese proceso ya no está infectado ¿no?, necesitaria anclar al registro un ejecutable que se inyecte en el proceso cada vez que se reinicia, ¿no?.

De ser así, se podría hacer, pero me preocupa eso de los procesos. Pensaba que una vez inyectado en un proceso, podías coger su "token" y obtener los privilegios de este, ¿no es así?.

Bueno, de todas formas gracias por la respuesta. Un saludo.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

MCKSys Argentina

Cita de: Kaxperday en 24 Noviembre 2015, 16:17 PM
Una pregunta, ¿cuantas veces necesito inyectar mi DLL en la memoria?, ¿una vez solo, la primera vez?... ¿o todas las veces que vaya a ejecutar mi programa?.

Ejemplo me infecto un proceso con mi dll, reinicio el ordenador, ese proceso ya no está infectado ¿no?, necesitaria anclar al registro un ejecutable que se inyecte en el proceso cada vez que se reinicia, ¿no?.

De ser así, se podría hacer, pero me preocupa eso de los procesos. Pensaba que una vez inyectado en un proceso, podías coger su "token" y obtener los privilegios de este, ¿no es así?.

Bueno, de todas formas gracias por la respuesta. Un saludo.

Por definición, la inyección es hasta reiniciar el PC (o hasta que muera el proceso en el que te has inyectado). Si quieres lograr persistencia, vas a tener que buscar un método de hacerlo (de los muchos que hay). Por ej., usando el registro (método que puede ocultarse muy bien).

Normalmente, el mejor lugar para inyectarse es el lsass.exe. El tema es que las nuevas versiones de Windows no permiten hacerlo "directamente". Un ejemplo: CreateRemoteThread no te funcionará muy bien en lsass a partir de win8 (aún teniendo permisos de debug); pero sí te funionará RtlCreateUserThread, una API no documentada.

Los AV son tema aparte, pero interfieren en éstos temas...  :)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."