Ir al contenido principal

[WINHTTP] Get/Post

“dando vueltas en circulos hasta que el sol no este”, se podria decir que ese es uno de los estados mas constantes en este momento de vida… Aun asi sigo perdiendome noche tras noche en algunos temas que me interesan. Entre estos temas esta la comunicacion por medio del protocolo de HTTP en C, Estuve probando con curl (una puta pasada… Muy genial a decir verdad) pude integrarlo a MinGW copiando los headers y las dependencias a sus respectivas carpetas y agregando el -lcurl a la hora de compilar pero tuve un pequeño problema con la implementacion que estaba tratando de realizar (requeria no tener mucho inconveniente con las dependencias de dlls) intente compilar el codigo haciendo una compilacion estatica de las dependencias pero aun asi no pude (debo aceptarlo aun me falta mucho camino por andar y esta parte esta un poco fuera de mis conocimientos). Luego intente hacerlo con socketRAW, fue una experiencia muy bonita a decir verdad pero cai en otra de mis falencias crear buffers dinamicos en tiempo de ejecucion entonces aunque era medianamente funcional tuve que pararlo para otra ocasion. Al final me decidi por WINHTTP (estuve casi 2 semanas enteras leyendo del winapi y como jugar con funciones propias del sistema operativo entonces era una buena razon para usarlo ya que aprendi ciertas cosas y queria ponerlas en practica).

DOC OFICIAL DE WINHTTP

A groso modo winhttp es una funcionabilidad que trae el sistema operativo windows para realizar conexion con el protocolo http, por medio de winhttp se manejan las sesiones http establecidas desde el sistema operativo con un servidor externo (inclusive se usa para desarrollar servidores en windows a nivel de http).

el modo de uso (o bueno mi modo de uso) fue primeramente cargar la dll directamente del System32 (una notamental y para los interesados en este tema : Si se usa esta dll para malware hay varios antivirus que realizan el hookeo de esta dll y monitorean las peticiones para verificar si usa para hacer evil $tuff). Luego de esto cargo varias funciones de winhttp.dll a unos punteros de funciones (esto toca realizar la declaracion bien del puntero, osea definir el valor que retorna la funcion y sus respetivos parametros) y despues de esto realizar la secuencia para inicializar una comunicacion HTTP.

Primero se usara la funcion WinHttpOpen que recibe como parametros el useragent en un string (wchar_t * ) y parametros de configuracion para definir el uso de proxy, esta funcion retornara un valor del tipo HINTERNET (que a la hora de la verdad es un LPVOID que es un puntero de tipo void), este valor se lo tendremos que pasar a la siguente funcion WinHttpConnect que recibe el HINTERNET retornado de la funcion anterior y su vez recibe el dominio (o IP) del servidor a donde nos conectaremos y el puerto donde se esta ejecutando el servicio HTTP, despues de esto nos retornar un HINTERNET. Para seguir con el proceso. (No me pondre a explicar todo el procedimiento a realizar por que le quitaria la gracia para los que estan iniciando con el uso de esta libreria… :* ). Dejare aqui un grafico de como seria el uso de esta funcionabilidad (Grafico sacado de la documentacion oficial de winhttp).


Un tip para el uso de esta libreria y de sus funciones es buscar la winhttp.h donde se describe cada uno de los tipos de datos usados, macros y definiciones.


Para verificar el nombre de las funciones que trae consigo la winhttp.dll se puede usar DependecyWalker Dll Export Viewer para obtener los nombres funciones.



FAIL STUFF

Dentro de todo esto se me ocurrio meter el contenido de la DLL en una variable interna del programa y poder usar las funciones de winhttp sin necesidad de cargarlo directamente del system32… escribi un script en php que me generaria la variable a partir del archivo. Fue bueno hacer esto por que me di cuenta que es un FAIL grande… si se usara alguna dll propia del sistema tiene que estar ubicada dentro de system32 (debe haber algun artilugio para poder realizar esto pero no lo encontre… la idea es poder usar una dll propia del sistema por ejemplo kernel32.dll en un path diferente al del system32). 



Aqui dejo el codigo de la aventurilla… no es codigo mas perfecto ni optimo pero funciona (como maximo puede reciber un buffer de respuesta de LPSTR data = (char*) calloc(10000000,sizeof(char)); , Debo mejorar mis skills de manejar buffers dinamicos en tiempo de ejecucion y escribire una funcion mas optima para sockets raw y winhttp.

Escribe la funciones GET y POST para cada una de estas se retonar una estructura en la cual ya esta “parseada” la respues del server (tanto header de respuesta como, “content” de respuesta… el body en otras palabras) y sus respectivos tamaños de buffer.

HEADERS

Comentarios

Entradas populares de este blog

Chillwave && The Mentor [off-topic]

==================================Phrack Inc.================================== The following was written shortly after my arrest... \/\The Conscience of a Hacker/\/ by +++The Mentor+++ Written on January 8, 1986 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Another one got caught today, it's all over the papers. "Teenager Arrested in Computer Crime Scandal", "Hacker Arrested after Bank Tampering"... Damn kids. They're all alike. But did you, in your three-piece psychology and 1950's technobrain, ever take a look behind the eyes of the hacker? Did you ever wonder what made him tick, what forces shaped him, what may have molded him? I am a hacker, enter my world... Mine is a world that begins with school... I'm smarter than most of the other kids, this crap they teach us bores me... Damn underachiever. They're all alike. I'm in junior high or high school. I've listened to teachers explain for

LinudecX

"Ninguna existencia puede ser válidamente realizada si se limita a si misma."-Simone de Beauvoir He estado en proceso de asimilar mi proceso de transición en la facultad, una de las formas que he encontrado en esta asimilación es dar la pelea, intentar de hacer las cosas un poco distintas, intentar hacer un pequeño cambio en mi entorno, en pocas palabras ir en contra de la corriente (y no por mero capricho mio, si no tratar de encontrar un diferente enfoque).  Gracias a una maestra que me ha apoyado (in)directamente en este proceso  he podido encontrar un pequeño lugar para mi y mis demonios dentro de la universidad. Este espacio es LinudecX, un espacio donde existe una libertad para poder investigar y profundizar dicha investigación hasta donde el limite indefinido exista. LinudexC es un semillero de investigación de la universidad, que empezó con el enfoque de investigar, usar y incentivar el uso del sistema operativo GNU y del kernel Linux. Este semestre después