|
822
|
Seguridad Informática / Hacking Wireless / Re: Importancia de vulnerabilidades en redes LAN
|
en: 19 Octubre 2018, 01:40 am
|
Hola amigo como estás, absurdo es el que se queda con la duda sin preguntar, nadie nace sabiendo todas las cosas, hace mucho tiempo también me tocó hacer una infinidad de preguntas que por muy básicas que fueran me han servido mucho.
Hay dos maneras de hacer esto, utilizando procedimientos con un buen checklist o hacer todo según el criterio propio utilizando una buena base de conocimientos.
Ambas maneras son efectivas pero te llevan a caminos distintos. Una de las cosas importantes que consideraría en una revisión de seguridad dentro de una red wifi (entendiendo que ya estás conectado) es visualizar mentalmente cómo está conectado todo, por ejemplo... debe haber un punto de acceso que sirve el wifi, este a su ves puede estar repitiendo y llegar a un appliance (una caja de 1u que da wifi), por ejemplo un wifi controller el cual puede tener un portal cautivo, de ahi para tener acceso a la red o internet debe estar conectado a un firewall y este a su ves a switches y computadores o servidores.
Normalmente una red puede estar separada de manera física o lógica, esto quiere decir que un controlador wifi puede estar conectado al mismo equipo que le da acceso a la red de los computadores y servidores (o sea, todos conectados al mismo lugar por cables), pero internamente crea redes virtuales y a cada uno le asigna permisos de acceso, por ejemplo para que un pc no se pueda conectar a un servidor o alguien desde el wifi no se conecte a los pc de la red (zonas DMZ, etc).
En este caso lo más lógico es buscar credenciales por defecto y vulnerabilidades a los puntos críticos de la red y estos son los puntos de acceso o controladores de wifi, accediendo a ellos será mas facil acceder a todos los demás equipos y revisar si alguno tiene carpetas compartidas, existe un controlador ldap, etc.
Las herramientas como nmap y msf son solo herramientas, la mayor parte del buen trabajo lo hará tu cerebro, asi que mientra más información tengas de lo que quieras revisar, más efectivo va a ser tu resultado.
Te recomiendo que le des un vistazo a temas sobre como funcionan las redes y servicios, infraestructura, etc, así como le has dedicado tiempo para aprender a usar nmap, de esta manera podrás tener mejores resultados y saber por ejemplo si tu escaneo está siendo bloqueado o necesitas evadir algunas reglas de red.
saludos.
Que bueno es leer a un verdadero genio
Añadiendo también que las versiones de dichos puntos de acceso es importante, si accede por ejemplo al AirOS de un ubiquiti con contraseñas por defecto, pues podria tener mas informacion, varias veces me paso jeejj saludos muchachones
por ejemplo el exploit ubitiqui_airos_file_upload recuerda usar ética y no dañar ni desconfigurar nada
|
|
|
824
|
Programación / Java / Re: Una ayudita
|
en: 18 Octubre 2018, 16:54 pm
|
Hola, La descripción de tu post no es adecuada "Una ayudita" , y usa Código GeSHI Este es tu código algo modificado para que funcione pero se hacia largo y aun faltaba comparar
import java.util.Scanner; public class ProfeAdmin { public static void main (String[] args ) { Scanner leer = new Scanner (System. in); System. out. println("1)Profesor"); System. out. println("2)Administrador"); int Opcion = leer.nextInt(); int count = 1; // uso de contador para contrar la oportunidades que son 3 switch (Opcion) { case 1: System. out. println("Ingrese su nombre de usuario: "); System. out. println("Ingrese su contraseña: "); String contraseña = leer. next(); // establecer 3 oportunidades si se equivoca en el nombre o la contraseña if (nom.equals(nombre) && contra.equals(contraseña)) { mostrar("Correcto access granted"); } else { if (!nom.equals(nombre)) { // se lee, "si nom no es igual a nombre" , dara true System. out. println("Nombre incorrecto"); int countO = 3; while (count <= 3) { ShowData.showLn("Oportunidad " + (countO--)); ShowData.showLn("Ingrese Nombre"); final String newName = leer. next(); if (newName.equals(nom)) { ShowData.showLn("Nombre Correcto"); break; } else { count++; continue; } } count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado // xq no entrara mas en el while } else if (!contra.equals(contraseña)) { //si la contra no es igual a contraseña, dara true System. out. println("Contraseña incorrecta"); int countO = 3; while (count <= 3) { mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1 mostrar("Ingrese contraseña"); final String newPass = leer. next(); if (newPass.equals(contra)) { mostrar("Contraseña correcta"); /* Aqui introducir siguente menu */ break; } else { count++; continue; } } count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado // xq no entrara mas en el while } } break; case 2: System. out. println("Ingrese su nombre de usuario: "); System. out. println("Ingrese su contraseña: "); String contraseña2 = leer. next(); if (nom2.equals(nombre2) && contra2.equals(contraseña2)) { mostrar("Correcto access granted"); } else { if (!nom2.equals(nombre2)) { // se lee, "si nom no es igual a nombre" , dara true System. out. println("Nombre incorrecto"); int countO = 3; while (count <= 3) { mostrar("Oportunidad " + (countO--)); mostrar("Ingrese Nombre"); final String newName = leer. next(); if (newName.equals(nom2)) { mostrar("Nombre Correcto"); break; } else { count++; continue; } } count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado // xq no entrara mas en el while } else if (!contra2.equals(contraseña2)) { //se lee, la contra no es igual a contraseña, dara true System. out. println("Contraseña incorrecta"); int countO = 3; while (count <= 3) { mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1 mostrar("Ingrese contraseña"); final String newPass = leer. next(); if (newPass.equals(contra2)) { mostrar("Contraseña correcta"); /* Aqui introducir siguente menu */ break; } else { count++; continue; } } count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado // xq no entrara mas en el while } } break; } } private static void mostrar (final String s ) { } //establecer oportunidades, son 3, creamos un metodo private void filtrar() { } }
tu código original carece de métodos, uso de contructor, de variables de instancia, variables de clase, es bueno que le des un vistazo y refactorises tu código con eso., y ahora con este codigo se nota algo de diferencia con respecto a la reducción de líneas, solo que usamos tipos enum aquí
para las sentencias switch puedes usar enum ver linea 50 el método getUsersByID()
package foro; import javax.swing.*; import java.util.EnumSet; import java.util.NoSuchElementException; import java.util.Scanner; enum Users { DOCENTE(1), ADMINISTRADOR(2); this.id = id; } return id; } //buscando los usarios public static Users getUsersByID (final Integer id ) { return EnumSet.allOf(Users.class) .stream() .filter(object -> id.equals(object.id)) .findFirst() //detienela busqueda de las lista con la primera conincidencia .get(); // retorna un NoSuchElementException en caso que no exista dicho id } } public class ProfeAdmin2 { private static final Scanner LEER = new Scanner (System. in); private static final String ACCESS_GRANTED = "Access Granted."; private static final String DATOS_INCORRECTOS = "Datos incorrectos."; public ProfeAdmin2() { System. out. println("1)Profesor"); System. out. println("2)Administrador"); final int opcion = LEER.nextInt(); try { final Users users = Users.getUsersByID(opcion); switch (users) { case DOCENTE: process(nom,contra); // pasando parametros correspondientes al metodo process para reutilizarlo break; case ADMINISTRADOR: process(nom2,contra2); // pasando parametros correspondientes al metodo process para reutilizarlo break; } JOptionPane. showMessageDialog(null, "No se encuentra el usuario " + opcion ); mostrar("Saliendo de la aplicacion"); } } private void process (final String paramNom, final String paramPass ) { System. out. println("Ingrese su nombre de usuario: "); final String nombre = LEER. next(); System. out. println("Ingrese su contraseña: "); final String contraseña = LEER. next(); // establecer 3 oportunidades si se equivoca en el nombre o la contraseña int count = 0; if (nombre.equals(paramNom) && contraseña.equals(paramPass)) { mostrar(ACCESS_GRANTED); /* Pasar a otro menu aqui */ } else { if(!nombre.equals(paramNom) && !contraseña.equals(paramPass)) { mostrar(DATOS_INCORRECTOS); ingresarNombre("", paramNom); ingresarPass("", paramPass); mostrar(ACCESS_GRANTED); } else if (!nombre.equals(paramNom)) { // se lee, "si nom no es igual a paramNom" , dara true ingresarNombre("Nombre incorrecto",paramNom); } else if (!contraseña.equals(paramPass)) { //si la contra no es igual a paramPass, dara true ingresarPass("Contraseña incorrecta",paramPass); } } } private void ingresarNombre (final String msg, final String paramNom ) { int countO = 3; int count = 0; while (count <= 3) { mostrar("Oportunidad " + (countO--)); mostrar("Ingrese Nombre"); final String newName = LEER. next(); if (newName.equals(paramNom)) { mostrar("Nombre Correcto"); break; } else { count++; continue; } } count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado // xq no entrara mas en el while } private void ingresarPass (final String msg, final String paramPass ) { int countO = 3; int count = 0; while (count <= 3) { mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1 mostrar("Ingrese contraseña"); final String newPass = LEER. next(); if (newPass.equals(paramPass)) { mostrar("Contraseña correcta"); break; } else { count++; continue; } } count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado // xq no entrara mas en el while } private <T> void mostrar(final T s) { } public static void main (String ..._0x52 ) { new ProfeAdmin2(); } }
|
|
|
826
|
Programación / Java / Re: Envío de correo programado en otra fecha en Java
|
en: 9 Octubre 2018, 01:56 am
|
Buenas rub'n , estoy conociendo ahora Structs 2, y la verdad es que me está gustando como framework, Springframework no lo he trabajado aun. En cuanto a tus indicaciones, muchas gracias, lo intentaré así. En cualquier caso, sabes como funciona exactamente Quartz internamente? Me refiero a como programa los trabajos. (Esto último es solo curiosidad ) Un saludo. Pues desde luego que no, guíate por su API
|
|
|
827
|
Programación / Java / Re: Envío de correo programado en otra fecha en Java
|
en: 5 Octubre 2018, 04:38 am
|
Hola, que tal, Structs 2 porque no Springframework ? pero bueno que mas da
bueno mira, usahttps://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.2</version> </dependency>
Esto te ayuda a crear la expresion de cron http://www.cronmaker.com/ creas una clase que implente a Job, en ese metodo execute manda el mailpublic class TimerClass implements Job { public TimerClass() { } @Override public void execute(JobExecutionContext jobExecutionContext) { //Logica del mail aqui try { }catch(JobExecutionException ex) { } } }
En tu clase que implementa el ServletContextListener dentro del método public void contextInitialized(ServletContextEvent param){ new ExecTimer(); }
public class ExecTimer { private JobDetail job; private Trigger trigger; private Scheduler scheduler; private static final String TWENTY_SEC = "0/20 * * * * ?"; //cada 20 segundos //seg,min,hora,dia,mes,diaSemana,Año(Opcional) //todos los viernes a las 6:30AM private static final String FECHA_FUTURA = "00 30 6 ? * FRI"; // http://www.cronmaker.com/ public ExecTimer() { initTask(); } private void initTask() { try { job = JobBuilder.newJob(TimerClass.class) .withIdentity("EnviarMail") .build(); trigger = TriggerBuilder .newTrigger() .withSchedule(CronScheduleBuilder.cronSchedule(FECHA_FUTURA)) .build(); scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); } catch (SchedulerException e) { e.printStackTrace(); } } }
Con Springboot seria mas facil aun, menos codigo y sin .xml import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling @SpringBootApplication public class Application { public static void main (String ... blabla) { SpringApplication.run(Application.class); } }
@Scheduled(cron= "00 30 6 ? * FRI") public void enviarMail() { }
Y otra cosa importante la operación de envío del mail puedes ejecutarla de manera asíncrona, hay mucha maneras de hacerlo con java, hará que tu aplicación no se bloquee, mas reactiva
|
|
|
828
|
Programación / Java / Re: Llamar objetos desde un switch
|
en: 5 Octubre 2018, 01:38 am
|
Conste que yo conteste primero, así que te quedas eternamente agradecido de mi, no del usurpador de respuestas "rub'n".. (dicen que el mastica con la boca abierta).
PD: rub'n, uno que se esfuerza por no ponerle el código completo y no hacerle la tarea... y tu llegas y lo arregas, hahahaha
Ni te creeas que quiero discutir
|
|
|
829
|
Programación / Java / Re: Llamar objetos desde un switch
|
en: 5 Octubre 2018, 01:17 am
|
tal cual como te dice 3n31ch , añadiendo tambien que uses modificadores de acceso como private por convencion también de esta manera puedes hacerlo
package foro; import java.util.Scanner; public class TestDelObligatorioV2 { private Scanner dato; private int num, list; private int datos[]; public TestDelObligatorioV2() { } public void iniciar() { int n; dato = new Scanner (System. in); System. out. println("Bienvenido!..."); System. out. println("1- Ingreso de datos"); System. out. println("2- Listado de datos"); System. out. println("3- Buscar por nombre"); System. out. println("4- Buscar por telefono"); do { n = dato.nextInt(); switch (n) { case 1: //Aca quiero llamar a op1 op1(); break; case 2 : op2(); break; } } while (n != 0 && n < 5); } //Aca se van a cargar los datos y crear los vectores public void op1() { System. out. print("Cuantos datos se ingresaran? "); num = dato.nextInt(); datos = new int[num]; dato.nextLine(); for (int i = 0; i < num; i++) { System. out. print("Ingrese nombre: "); nombre[i] = dato.nextLine(); System. out. print("Ingrese apellido: "); apellido[i] = dato.nextLine(); System. out. print("Ingrese telefono: "); telefono[i] = dato.nextLine(); } } //Aca se van a mostrar los datos de los vectores public void op2() { System. out. println("Cuantos datos quiere ver? "); list = dato.nextInt(); System. out. println("Listado de datos:"); System. out. println("--------------------------"); for (int i = 0; i < list; i++) { System. out. println(apellido [i ] + " " + nombre [i ] + " - " + telefono [i ]); } } public static void main (String[] args ) { TestDelObligatorioV2 prueba = new TestDelObligatorioV2(); prueba.iniciar(); prueba.op1(); prueba.op2(); } }
El metodo op2() usa el array que previamente has llenado linea 7 puedes ver la diferencia, con ese accedes a cada index de tu array
public void op2() { System. out. println("Cuantos datos quiere ver? "); list = dato.nextInt(); System. out. println("Listado de datos:"); System. out. println("--------------------------"); for (int i = 0; i < list; i++) { System. out. println(apellido [i ] + " " + nombre [i ] + " - " + telefono [i ]); } }
|
|
|
830
|
Programación / Java / Re: Colocar Boton de Modificar en celda de JTable
|
en: 3 Octubre 2018, 19:04 pm
|
Hola,
esto te puede servir Creamos una constante tipo String para el PreparedStatement nuestra sentencia precompilada private static final String UPDATE = "UPDATE customer SET first_name=?, last_name=? WHERE id=?";
Añadimos una columna que contendrá nuestro botóndefaultTableModel.addColumn("Update item");
Obtenemos el nombre de la columna y le seteamos los 2 objetos de las clases que permitiran el updatejTable.getColumn("Update item").setCellEditor(new UpdateItem()); jTable.getColumn("Update item").setCellRenderer(new BotonRenderizado());
Añadimos un mouseListener a la tabla para setear los valores en el form con el click , tu debes hacer el ajuste con tu código @Override int seletedRow = jTable.getSelectedRow(); jTextFieldID.setText(defaultTableModel.getValueAt(seletedRow, 0).toString()); jTextFirsName.setText(defaultTableModel.getValueAt(seletedRow, 1).toString()); jTextLastName.setText(defaultTableModel.getValueAt(seletedRow, 2).toString()); } });
Creamos una clase que extiende de JButton @Override public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ) { if (value != null) { setText(""); } else { setText("update"); } if (isSelected) { setForeground(table.getSelectionForeground()); setBackground(table.getSelectionBackground()); } else { setForeground(table.getForeground()); setBackground (UIManager. getColor("Button.background")); } return this; } }
Aquí es donde esta la verdadera lógica del botón en la tabla desde la linea 21 a 38 es un ejemplo que te pongo, tu debes de programarlo acorde a tu códigoen la linea 33 puedes usar también DbUtils para ahorrarte mas lineas de código, sirve para refrescar la tabla private int fila; public UpdateItem() { updateItem(); } private void updateItem() { editor.addActionListener(e -> { if (table != null) { fireEditingStopped(); try { int getrow = table.getSelectedRow(); final Long id = Long. valueOf(jTextFieldID. getText()); final String firstName = jTextFirsName. getText(); final String lastName = jTextLastName. getText(); ps.setString(1, firstName); ps.setString(2, lastName); ps.setLong(3, id); ps.executeUpdate(); //DbUtils model.setValueAt(id, getrow, 0); model.setValueAt(firstName, getrow, 1); model.setValueAt(lastName, getrow, 2); ex.printStackTrace(); } } } }); } @Override return true; } @Override public Object getCellEditorValue () { return value; } @Override public Component getTableCellEditorComponent (JTable table, Object value, boolean isSelected, int row, int column ) { this.table = table; this.fila = row; this.value = value; if (value != null) { editor.setText(""); } else { editor.setText("update"); } if (isSelected) { editor.setForeground(table.getSelectionForeground()); editor.setBackground(table.getSelectionBackground()); } else { editor.setForeground(table.getForeground()); editor. setBackground(UIManager. getColor("Button.background")); } return editor; } }
package foro; import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.sql.*; import java.util.EventObject; public class ConnectJDBCTest extends JFrame { private static final String URL = "jdbc:mysql://localhost:3306/demo?useSSL=false"; private static final String USERNAME = "root"; //mala practica private static final String PASSWORD = "password"; // mala practica private static final String SELECT = "SELECT id, first_name, last_name FROM customer"; private static final String UPDATE = "UPDATE customer SET first_name=?, last_name=? WHERE id=?"; private static final String DELETE = "DELETE FROM customer where id = "; public ConnectJDBCTest() { initLayout(); initConnection(); } private void initLayout() { defaultTableModel.addColumn("Id"); defaultTableModel.addColumn("First Name"); defaultTableModel.addColumn("Last Name"); defaultTableModel.addColumn("Update item"); @Override int seletedRow = jTable.getSelectedRow(); jTextFieldID.setText(defaultTableModel.getValueAt(seletedRow, 0).toString()); jTextFirsName.setText(defaultTableModel.getValueAt(seletedRow, 1).toString()); jTextLastName.setText(defaultTableModel.getValueAt(seletedRow, 2).toString()); } }); jTable.getColumn("Update item").setCellEditor(new UpdateItem()); jTable.getColumn("Update item").setCellRenderer(new BotonRenderizado()); jPanelSur. add(new JLabel("ID")); jPanelSur.add(jTextFieldID); jPanelSur. add(new JLabel("First Name")); jPanelSur.add(jTextFirsName); jPanelSur. add(new JLabel("Last Name")); jPanelSur.add(jTextLastName); add(jPanel); setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE); setLocationRelativeTo(null); pack(); setVisible(true); } private void initConnection() { try { final Statement statement = connection. createStatement(); final ResultSet resultSet = statement. executeQuery(SELECT ); while (resultSet.next()) { id = resultSet.getLong("id"); firstName = resultSet.getString("first_name"); lastName = resultSet.getString("last_name"); defaultTableModel. addRow(new Object[]{id, firstName, lastName }); } e.printStackTrace(); } } private int fila; public UpdateItem() { updateItem(); } private void updateItem() { editor.addActionListener(e -> { if (table != null) { fireEditingStopped(); try { int getrow = table.getSelectedRow(); final Long id = Long. valueOf(jTextFieldID. getText()); final String firstName = jTextFirsName. getText(); final String lastName = jTextLastName. getText(); ps.setString(1, firstName); ps.setString(2, lastName); ps.setLong(3, id); ps.executeUpdate(); //DbUtils model.setValueAt(id, getrow, 0); model.setValueAt(firstName, getrow, 1); model.setValueAt(lastName, getrow, 2); ex.printStackTrace(); } } } }); } @Override return true; } @Override public Object getCellEditorValue () { return value; } @Override public Component getTableCellEditorComponent (JTable table, Object value, boolean isSelected, int row, int column ) { this.table = table; this.fila = row; this.value = value; if (value != null) { editor.setText(""); } else { editor.setText("update"); } if (isSelected) { editor.setForeground(table.getSelectionForeground()); editor.setBackground(table.getSelectionBackground()); } else { editor.setForeground(table.getForeground()); editor. setBackground(UIManager. getColor("Button.background")); } return editor; } } public static void main (String... blabla) { try { if (osType.contains("Win")) { UIManager. setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } else if (osType.contains("Linux")) { UIManager. setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); } //do nothing } new ConnectJDBCTest(); }).start(); } }
Selecciona primero un item, editalo , luego actualiza
|
|
|
|
|
|
|