[Tool] XML-RPC Packet Generator
Hoy os queremos presentar una nueva herramienta desarrollada por uno de los componentes del blog. La herramienta en cuestión se llama RPC-client (http://code.google.com/p/rpc-client). Está desarrollada con mono y la podemos correr tanto en Windows como en Linux o MAC.
La herramienta ha sido concebida para crear, en línea de comandos, y de forma sencilla paquetes XML-RPC contra un servidor remoto.
Unas cuantas preguntas y respuestas rápidas:
- P: ¿En concreto que es el XML-RPC y para qué sirve?
- R: Es una forma de comunicarse con sistemas remotos y pedirles que hagan algo y nos envíen los resultados. Por ejemplo: le podríamos pedir al servidor 'X' que calculara la suma de dos números muy grandes y nos devolviera el resultado.
- P: ¿Quién lo usa?
- R: WordPress o Drupal, son dos claros ejemplos.
- P: ¿Para qué lo usan?
- R: Para ofrecer cierta funcionalidad como puede ser: Consulta de estadísticas remotas, acceder mediante el teléfono móvil, configuración remota…
- P: ¿Para qué me puede servir a mí la herramienta que comentas?
- R: Depende del uso que se le de. Nos podría servir para ejecutar ciertos exploits, extraer información del servicio o, si eres desarrollador, probar tu servicio web.
Si ejecutamos el programa nos aparece la siguiente pantalla:
Tenemos varias opciones útiles, como usuario y password, si el servidor web los requiere. Tiene un modo verbose que nos mostrará el paquete que enviará antes de hacerlo.
El parámetro "-M" indica el método, o función remota que queremos invocar. Siguiendo el ejemplo expuesto arriba (el de la suma de dos números) el valor de este parámetro podría ser "SumTwoBigNumbers".
El target debe de ser una URL donde se encuentre el servicio XML-RPC. En WordPress, por ejemplo, suele estar en: http://www.sitio.com/xmlrpc.php.
El parámetro -P indica los parámetros que le queremos pasar al método. Según el tipo que sean han de indicarse en un formato u otro. Los tipos disponibles los podemos encontrar en: http://en.wikipedia.org/wiki/XML-RPC.
Si queremos enviar dos parámetros. Unos tipo entero y otro tipo string tendríamos que escribir: -P integer@12!string@cadena.
Si es del tipo array, con tres parámetros: array@integer#23%integer#9%integer#12; y si es tipo struct: struct@ParamName#integer#2%ParamName2#string#value.
Existe un último tipo, llamado custom, que como su nombre indica nos permite crear parámetros a nuestro gusto. Su sintaxis es parecida a la anterior: custom@NonExistType1#value1% NonExistType2#value2. Esto nos produciría el siguiente código XML:
<NonExistType1>value1</NonExistType1><NonExistType2>value2</NonExistType2>
A pesar de que pueda parecer una sintaxis liosa es bastante ordenada y es muy fácil acostumbrarse a ella.
Vamos a explicar rápidamente cómo se usa con un ejemplo: Trataremos de ejecutar un exploit. Éste en concreto: http://www.securityfocus.com/bid/14088/exploit.
Vemos que este código no corresponde con ninguno de los predeterminados (integer, string…), por lo tanto es custom. Para generarlo escribimos lo siguiente:
Windows:
RPCClient.exe -t http://www.sitiovulnerable.com/xmlrpc.php -v -M test.method -P "custom@value#',")); phpinfo(); exit;/*"
Linux/MAC/*NIX:
Mono RPCClient.exe -t http://www.sitiovulnerable.com/xmlrpc.php -v -M test.method -P "custom@value#',")); phpinfo(); exit;/*"
Es muy importante recalcar la importancia de las comillas que están en color rojo, puesto que sin ellas la línea de comandos interpretaría lo que encierran y no las pasaría de forma íntegra como parámetro a rpc-client.
Comprobamos que hemos generado el código igual que el exploit exigía:
Una vez comprobado ya solo necesitamos un sitio web vulnerable J
Tunelizando con tsocks (I): Nmap
En el transcurso del día a día muchas veces se nos plantea la necesidad de acceder a un dispositivo que no se encuentra en nuestra red o al que nuestra red tiene restringido el acceso. Ante esta situación tenemos varias posibles soluciones:
-
Conectarnos directamente al dispositivo o a la red a la que se encuentre conectado.
-
Usar una pasarela intermedia para llegar a él.
-
Intentar eludir las reglas del firewall de nuestra red mediante un túnel.
La solución más sencilla sin duda es la primera opción. Pero muchas veces no tenemos esa posibilidad, bien porque el dispositivo está en otra ciudad o, incluso, en otro país. O sencillamente no se nos permite el acceso físico donde se encuentra el dispositivo o la red.
Las opciones más viables son la segunda, la tercera, o una combinación de ambas. En este post solo hablaremos de la segunda. En posteriores post explicaremos la tercera opción y como se pueden combinar.
[tool] Slowloris
- Nombre Slowloris
- Lenguaje Perl
- Última versión 17-06-2009
- Licencia N/D
- Enlace http://ha.ckers.org/slowloris/
- Descripción
Robert Hansen >RSnake< ha liberado un pequeño script, slowloris.pl, sencilla de utilizar y muy funcional. Al iniciar el script se puede leer:
Welcome to Slowloris - the low bandwidth, yet greedy and poisonous HTTP client
Usage:perl slowloris.pl -dns [www.example.com] -optioUsage perl slowloris.pl -dns [www.example.com] -optionsUsage: perl slowloris.pl -dns [www.example.com] -options
En la web podemos leer:
Slowloris holds connections open by sending partial HTTP requests. It continues to send subsequent headers at regular intervals to keep the sockets from closing. In this way webservers can be quickly tied up. In particular, servers that have threading will tend to be vulnerable, by virtue of the fact that they attempt to limit the amount of threading they'll allow.
Lo más importante es primero que funciona y segundo que no afecta a los demás servicios del servidor. Además como indican en la web no es un ataque de TCP, es un ataque sobre el protocolo HTTP.
Una denegación de servicio al alcance de todos que integrada en una botnet puede llegar a ser devastadora.
PD: Si alguien prueba la herramienta contra esta web, por favor, que deje un comentario antes de hacerlo... para que por lo menos sepamos que está pasando :-p