Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 15 Julio 2015, 01:05 am



Título: Descomprimiendo gzip en C++
Publicado por: Kaxperday en 15 Julio 2015, 01:05 am
Ey heavy weys, resulta que me ha venido un problemilla en el sniffer llamado "Accept-Encoding" y bueno hay 2 maneras descomprimir la cadena que nos dan, o algo que haré más adelante que será eliminarla de la respuesta del servidor una vez hecho el MITM, pero ahora quiero probar una cosa y necesito descomprimir la peticion.

Os paso un login en una web una vez ya pasado a cadena:

Código:
POST /user/login HTTP/1.1
Host: pag.com
Connection: keep-alive
Content-Length: 56
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0
.8
Origin: http://pag.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/43.0.2357.132 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://pag.com/user/login
Accept-Encoding: gzip, deflate
Accept-Language: es-ES,es;q=0.8
Cookie: a_c=yes; qaapo=a957d5ce95865c588f8388194b38653bd148935f%7E1; show_popi=b
f9d8e780daa75b620bfc484a5740acf03b595b0%7E1; __insp_wid=422975268; __insp_nv=tru
e;

  ▄öÑU┼V♫ n   n   ¶   dh♀\÷np↑ï├' E  `!¡@ Ç♠oÁ¼→ o^↨

La ultima linea muestra las variables del login (usuario y contraseña), comprimidas en gzip, he visto que se puede descomprimir archivos en gzip, pero la idea es descomprimir directamente la cadena para obtener otra cadena, con zlib, ¿se podrá hacer?

Saludos.


Título: Re: Descomprimiendo gzip en C++
Publicado por: x64core en 15 Julio 2015, 01:23 am
Seguro gzip es Open Source: http://www.gzip.org/ y es extremandamente facil de usar. Igual si es una respuesta no es mejor modificar la solicitud y eliminar el campo de codificacion para que a la respuesta no venga comprimida.


Título: Re: Descomprimiendo gzip en C++
Publicado por: Kaxperday en 15 Julio 2015, 01:35 am
No entiendo, pero yo lo que quiero no es descomprimir archivos gzip, sino coger la cadena y obtener la cadena descomprimida, pues la mayoría de las funciones de estas bibliotecas trabajan sobre archivos.

De todas formas no se será buena idea, hacer que el programa descomprima una cosa distinta en función de lo que me devuelva el server, hay varios accept encoding como se puede observar aqui:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Y visto que no puedo hacer frente a uno de ellos, creo que lo mejor será modificar la respuesta del servidor y pedirle al cliente los datos sin coding, lo que hará que los envie en texto plano y los pueda capturar.

Pero aún así sigo intrigado en intentar descomprimir esa cadena en gzip.

Los links de la página que pasastes que llevan a el código están rotos.

Saludos

Edito:

http://windrealm.org/tutorials/decompress-gzip-stream.php
https://panthema.net/2007/0328-ZLibString.html
http://www.codeproject.com/Articles/3202/CGZip-a-C-wrapper-for-gzip-methods

Creo que añadiendo la librería zlib puedo solucionar el problema, aunque no quería llegar a este punto.

Visto el ultimo link, veo que hay que escribir los datos en gzip en un archivo y luego abrirlo para descomprimirlo :o :o :o :o :o :o :-X :-X :-*

Vale he estado mirando con más detalle el primer link y creo que eso puede funcionar. Necesitare zlib y zconf.

Saludos.


Título: Re: Descomprimiendo gzip en C++
Publicado por: x64core en 15 Julio 2015, 01:47 am
No entiendo, pero yo lo que quiero no es descomprimir archivos gzip, sino coger la cadena y obtener la cadena descomprimida, pues la mayoría de las funciones de estas bibliotecas trabajan sobre archivos.

De todas formas no se será buena idea, hacer que el programa descomprima una cosa distinta en función de lo que me devuelva el server, hay varios accept encoding como se puede observar aqui:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Por eso tenes que validar bien el campo, simplemente verificar por que sea gzip o el tipo de compresion.

Y visto que no puedo hacer frente a uno de ellos, creo que lo mejor será modificar la respuesta del servidor y pedirle al cliente los datos sin coding, lo que hará que los envie en texto plano y los pueda capturar.

Pero aún así sigo intrigado en intentar descomprimir esa cadena en gzip.

Los links de la página que pasastes que llevan a el código están rotos.

Saludos

Edito:

https://panthema.net/2007/0328-ZLibString.html
http://www.codeproject.com/Articles/3202/CGZip-a-C-wrapper-for-gzip-methods

Creo que añadiendo la librería zlib puedo solucionar el problema, aunque no quería llegar a este punto.

Visto el ultimo link, veo que hay que escribir los datos en gzip en un archivo y luego abrirlo para descomprimirlo :o :o :o :o :o :o :-X :-X :-*

Saludos.
Innecesario, simplemente lo tengas en memoria y lo pasas el puntero al buffer, esa libreria contiene varias interfaces para pasar archivos, punteros a memoria, etc.

¿Por cierto cual es el dump del cuerpo de la solicitud? Me refiero a los 56 bytes.


Título: Re: Descomprimiendo gzip en C++
Publicado por: Kaxperday en 15 Julio 2015, 10:45 am
La verdad que cansa, paso de instalar una librería en el proyecto por cada ** de encoding que me pongan en la respuesta de los server definitivamente, la única que voy a aceptar es la de text plain.

Para inflate/deflate necesito zlib, para gzip necesito gzip, para sdch no se cual, y así hasta el infinito  :-X :-X :-X

Por cierto no recuerdo el body, pero era el típico de un post user y pass.

Saludos.