Para los que lo estabais esperando, aquí está la versión compilada para win32 de Fscan 1.0 (FHScan), orientado a automatizar las tareas de revisión de routers y otros dispositivos HTTP.
FHscan Core api es una librería de HTTP/1.1 que fue desarrollada a raíz del proyecto «Fast HTTP Vulnerability Scanner«, hasta llegar a convertirse en el núcleo del mismo. Esta librería debía cumplir una serie de requisitos, velocidad, sencillez y flexibilidad, y por supuesto, dado que su objetivo principal era ser utilizada para ataques de fuerza bruta, soporte de varios mecanismos de autenticación (basic, digest y NTLM) así como soporte de compresión gzip/deflate, callbacks y SSL. El resultado es prometedor y dado que es portable y que me gustaría que la gente pudiese colaborar en su desarrollo, voy a dejar el rollo de exploits por una vez y os voy a contar algún ejemplo de como realizar aplicaciones mas o menos sencillas usando esta API.
Lo único que debéis incluir en vuestra aplicación es el fichero «HTTP.h» y una vez hecho esto, inicializar el motor de HTTP con InitHTTPApi(). Esta función se encarga de manter en memoria varias tablas que gestionan las conexiones activas, aunque eso es totalmente transparente para nosotros.
Antes de establecer una conexión es necesario generar un pseudoHandle al sistema remoto. Esto se consigue con la llamada InitHTTPConnectionHandle() cuyos parámetros son el host remoto, el puerto, y si la conexión usa o no SSL.
HTTPHANDLE HTTPHandle=InitHTTPConnectionHandle("blog.48bits.com",80,0);
Una vez generado el Handle, podemos empezar a generar peticiones. Todas estas peticiones se almacenan en una estructura PREQUEST que comentaremos más adelante. Véase un ejemplo de como realizar una peticion a la web de 48bits.
#include "HTTP.h"
void main(int argc, char *argv[]) {
InitHTTPApi(); //Inicialización del motor HTTP
HTTPHANDLE HTTPHandle = InitHTTPConnectionHandle("blog.48bits.com",80,0);
PREQUEST DATA=SendHttpRequest(HTTPHandle,NULL,"GET","/",NULL,NULL,NULL,NO_AUTH);
//do stuff with the data….
if (DATA) FreeRequest(DATA); //liberamos la memoria de la petición
CloseHTTPConnectionHandle(HTTPHandle); //Liberamos el Handle
CloseHTTPApi(); //Paramos el motor HTTP
}
(más…)