Foros del Web » Programación para mayores de 30 ;) » Java »

Dichosos puertos

Estas en el tema de Dichosos puertos en el foro de Java en Foros del Web. Buenas, Os comento un poco la problematica, tengo que acabar un dichosa practica de seguridad de redes, para ello nos han habilitado dos salas, la ...
  #1 (permalink)  
Antiguo 29/08/2005, 13:01
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Dichosos puertos

Buenas,

Os comento un poco la problematica, tengo que acabar un dichosa practica de seguridad de redes, para ello nos han habilitado dos salas, la practica en si consta de dos partes:

1º Encontrar una maquina receptiva y hacerle un escaneo de puertos
2º Guardar un fichero en dicha maquina(tipo texto, diciendo por el puerto de conexion qu hemos podido conectarnos).

Pues bien la 1º parte ya la tengo, lo q he hecho a sido hacer un programilla "escaneo", primero hago un ping a las ip's de las maquinas y si me devuelve pues utilizo el programilla ese, en el que le paso la ip de la maquina y el rango de puertos(tipo int), para hacerlo algo mas "eficiente" si por el puerto que conecto es inferior al 1024 me devuelve el servicio asociado que tiene, y en los superiores al 1024 miro si tiene un servicio 'www.'

Y ahora necisito algo de ayuda(me gustaria que fueran indicaciones, no la solucion ya que la tengo q hacer yo), de escaneado como hago para poner mi txt en el directorio que tengo asigando para ello.

Ya que se supone que si me devuelve un servicio o me dice que conecta por ese puerto puedo intentar conectar por alli no?¿, es q he mirado librerias y no encuentro nada, y claro nos dicen que las maquinas no tienen permisos(rollo telnet) pero na, q no tengo ni idea de como empezar establecer la conexion y poder moverme(rollo msdos) por los directorios de la maquinita

Si quereis os cuelgo el codigo q tengo de la primera parte a ver que os parece.

Gracias
  #2 (permalink)  
Antiguo 29/08/2005, 17:27
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Interesante, pero lo que quieres hacer es poner el archivo en la maquina a la que estas scaneando, o en tu propia maquina??

no me quedo muy claro eso......... bueno, si pones el codigo, seria grandioso

have funnnn
  #3 (permalink)  
Antiguo 30/08/2005, 00:40
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Hola,

Me parece un tema interesantísimo, por lo que te agradecería muchísimo que una vez encontraras la solución, la pusieras por aquí.

Si el fichero lo quieres poner en la máquina que estás escaneando, deberías saber con qué protocolo vas a "hablar" en el puerto que consigas abrir, porque entiendo que detrás de un puerto abierto, debe haber un proceso escuchando. Por lo tanto la solución depende del protocolo con el que te vayas a enfrentar.

Por otro lado, ¿como has hecho el rastreador de puertos?. Yo he escrito uno que usa multitarea para rastrear los 65535 posibles puertos. Al ser multitarea, puedo mirar todos los puertos abiertos de una máquina en poco más de 3 minutos (claro que depende de la velocidad de la red...). Bueno, lo mío está hecho por pura curiosidad, así que si quieres verlo me lo dices....

Saludos.
  #4 (permalink)  
Antiguo 30/08/2005, 08:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Pues os comento, el codigo es una chapuza, ya que no es multitarea, sino que va a pico y pala, es decir: comienza por el puerto que le indicas en el rango mas pequeño, y sube hasta el final(tarda lo suyo :) ),pero aun no me he puesto en la eficiencia del programa, pues el protocolo a utilizar como no es TCP/IP, y segun el "jefe" es como si nos "infiltramos" en la red de la empresa(universidad en nuestro caso) y colocamos nuestro fichero en un carpeta(en la unidad c: ) que nosotros creamos una vez podamos conectarnos.

Lo del codigo os lo pongo a las 18:00 horas (españa) que ahora no estoy en casa, pero ya os lo digo que es una tonteria pq es la 1ª vez que programo en java, asi que ni mucho menos sera como el tuyo WebStorm, aunque estaria muy entusiasmado de poder ver tu codigo.

Y como tu bien has dicho Stock el fichero tiene que ir en la otra maquina
Pues con lo que os comentado aver si podeis decirme algo, ahora stoy mirando algo sobre tcp/ip pero na....
  #5 (permalink)  
Antiguo 30/08/2005, 09:51
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Lo prometido es deuda :)

Asi que aqui va el codigo:

Este es del programa principal:

import java.io.*;
import java.lang.*;
import java.net.*;

public class Escaneo{


public static void main(String[] arg)

{
int i;
int n;
for (i = 0; i < arg.length; i++)
{
}
if (i!= 4){

System.out.println(" El programa debe recibir 4 argumentos");
System.out.println(" 1er Argumento-> Equipo destino, mediante IP xxx.xxx.xxx.xxx o www.xxx.x");
System.out.println(" 2n Argumento->Puerto inicial");
System.out.println(" 3er Argumento-> Puerto final");
System.out.println(" 4to Argumento-> Modo escaneo debe de ser un 0");

System.out.println (" EJEMPLO: Escaneo www.google.es 2 56 0");
System.exit(0);
} //if//

int puertoini;
int puertofin;
int modo;
puertoini=Integer.parseInt(arg[1]);
puertofin=Integer.parseInt(arg[2]);
modo=Integer.parseInt(arg[3]);
error_puertos(puertoini, puertofin);
error_puertos2(puertoini, puertofin);
error_modo(modo);

System.out.println("Intentando conectar al servidor: "+arg[0].toString());
while (puertoini<=puertofin){
Cliente cliente=new Cliente(arg[0],puertoini);
puertoini++;
}
}//main//

public static void error_puertos(int pi, int pf)
{
if (pi < 1 || pi>65535) {
System.out.println("El puerto inicial/final debe estar entre los valores 1 y 65535");
System.exit(0);
}//if
if (pf < 1 || pf>65535){
System.out.println("El puerto inicial/final debe estar entre los valores 1 y 65535");
System.exit(0);
}//if
}//error_puertos

public static void error_puertos2(int pi, int pf)
{

if (pi > pf) {
System.out.println("El puerto inicial debe ser menor que el puerto final");
System.exit(0);
}
}//error_puertos2

public static void error_modo(int m){
if (m!=0 ){
System.out.println(" Modo escaneo debe de ser un 0");
System.exit(0);
}//if
}//error_modo

}//class//

Ahora el de la clase cliente:

import java.io.*;
import java.net.*;
import java.sql.*;

class Cliente {
Socket Cliente=null;
DataInputStream recibo=null;
DataOutputStream envio=null;

public Cliente(String host,int puerto){

try{
Cliente=new Socket(host,puerto);
envio=new DataOutputStream(Cliente.getOutputStream());
recibo=new DataInputStream(Cliente.getInputStream());
}//try
catch (UnknownHostException e){

System.out.println("No se ha podido conectar con el servidor: " +host.toString());
System.exit(0);
}//cath

catch (IOException e1){

System.out.println("Puerto: " +puerto+ " Cerrado");
}//catch

if(Cliente !=null && envio !=null && recibo !=null){
try{
if(puerto<=1023){
consulta(puerto);
}//if
else {servidor_http(host,puerto);}

envio.close();
recibo.close();
Cliente.close();
}//try
catch (UnknownHostException e){

System.out.println("No se ha podido conectar con el servidor: " +host.toString());
}//catch

catch (IOException e1){

System.out.println("Error en entrada/salida datos");
}//catch
}//if
}//cliente

public void consulta(int puerto){
try{
File fichero=new File("Puertos.mdb");
String ruta=null;
if(fichero.exists()){
ruta=fichero.getAbsolutePath();
}//if
// la información para conectar la BD: http://www.gamarod.com.ar/articulos/...y_access.asp//
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //llamada al Driver JDBC-ODBC para cargarlo
Connection conexion=DriverManager.getConnection("jdbc:odbc:Dr iver={Microsoft Access Driver (*.mdb)};DBQ=" + ruta, "", "");//hacemos la conexion a la BD pasandole el patch
Statement stat=conexion.createStatement();
ResultSet rs=stat.executeQuery("SELECT * FROM Ports WHERE Port="+puerto+"");
while (rs.next())
{
System.out.println("Puerto: "+rs.getString(1)+ " Servicio: "+rs.getString(2));
}
rs.close();
stat.close();
conexion.close();
}//try
catch(Exception e){ System.out.println("No se ha podido cargar el Driver JDBC-ODBC"); }

}//consulta
public void servidor_http(String host, int puerto){

String servicio=null;
try{
URL url = new URL("http://" + host + ":" + puerto + "/");//constructor url//
HttpURLConnection conexion=(HttpURLConnection)url.openConnection(); //abrimos una conexion//
conexion.connect();
if (conexion.getResponseCode() !=-1){
System.out.println("Puerto: "+puerto+ " Servicio: http");
}//if
conexion.disconnect();//la cerramos//
}//try

catch (MalformedURLException e) {
System.out.println("MalformedURLException: " + e);
}//catch
catch (IOException e1){
System.out.println("Error");
}
}// servidor_http

}//class


Lo q habia pensado en el principal era una vez conectado poner una opcion de establecer una conexion asi como en visual basic con el winsock, pero no veo como se aceptan sugerencias :)
  #6 (permalink)  
Antiguo 31/08/2005, 00:38
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
/******************
int i;
for (i = 0; i < arg.length; i++)
{
}
if (i!= 4){
**********************/
No es mas corto hacer simplemente

if(arg.length!=4)

??

Respecto al resto de código, no lo he mirado pero deberias ir orientando tu codigo a objetos, creando clases etc. El modo de programación estilo C de todo funciones estáticas llamadas desde el main se te quedará corto en cuanto el programa crezca. Ademas, las librerías de Java estan hechas estilo OO y te serán más facil de entender si te familiarizas con ese estilo.

Saludos
  #7 (permalink)  
Antiguo 31/08/2005, 01:30
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Hola,

Lo que en Visual Basic se hace con el objeto winsock, aquí se hace con la clase Socket, como veo que ya estás haciendo.

Desde luego, yo no conozco (no digo que no exista) una forma de "colarte" en una máquina sin saber con qué protocolo vas a hablar (entiendo aquí TCP/IP como familia de protocolos y no como el protocolo en si mismo). Es decir, yo creo que te tendría que decir, qué servicio vas a usar para infiltrarte en la máquina.

Saludos.
  #8 (permalink)  
Antiguo 31/08/2005, 05:41
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Ahi esta la gracia WebStorm q tengo que decidir cual de ellos tengo que utilizar, y seguire mirando por internet a ver si encuentro algo...
GreenEyed pues tb tienes razon, pero esto solo es una prueba de como va el programa, luego lo de las funciones de control de errores las pondre en un clase creada con ese proposito, pero na q la segunda parte se resiste....
  #9 (permalink)  
Antiguo 31/08/2005, 06:50
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Pues es un pedazo de ejercicio que me parece bastante dificil, pues tendrás que buscar un servicio determinado por un puerto determinado y aprovechar alguna vulnerabilidad conocida para acceder al sistema remoto, casi nada....

¿No os han dado ninguna pista?
  #10 (permalink)  
Antiguo 31/08/2005, 08:31
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
hombre segun el "jefe" lo de buscar si tiene un servicio www., podria servir para entrar por ahi, como?¿, npi, luego tb me ha comentado algo del servicio asociado al puerto 25 aun estoy asimilando... :)

A ver si entre todos...
  #11 (permalink)  
Antiguo 31/08/2005, 10:52
 
Fecha de Ingreso: agosto-2005
Mensajes: 95
Antigüedad: 18 años, 8 meses
Puntos: 0
La verdad es muy complicado lo que quieres hacer mas me suena a un hackeo, si tu quieres enviar un archivo a un terminal una de las formas es usar el protocolo para telnet o ftp ya que estos estan diseñados para la transmision de archivos pero para eso nesecitas un usuario y clave de accesso por que si no fuera haci seria muy facil hacker maquinas lo otro como dijo un usuario es aprovechar la vulnerabilidad de algun protocolo pero creo que eso no lo encontraras aqui mas bien en un sitio de hacker.
  #12 (permalink)  
Antiguo 31/08/2005, 11:48
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Ya pero es que 'hacker' es una palabra demasiado 'fea', y claro como he dicho la asignatura se llama Seguridad de redes, por lo que supongo q algo de razon tienes, de todas formas no se ma habia ocurrido mirarlo de esa forma, preguntaré si es legal dicha practica para exponerla en una asignatura docente....

Gracias por todo
  #13 (permalink)  
Antiguo 31/08/2005, 12:50
 
Fecha de Ingreso: agosto-2005
Mensajes: 95
Antigüedad: 18 años, 8 meses
Puntos: 0
Bueno el punto es como implementar lo que te piden creo que todo lo que se a dicho aqui debieras exponerlo a tu profesor para que te guié y buscar lo que se te pide.
  #14 (permalink)  
Antiguo 31/08/2005, 13:23
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Pues bueno no os pongo la respuesta del "profesor" pq vais a flipar, pero en resumen, que me busque la vida por internet que hay cosas de esas.

Por cierto me ha dicho que si q es legal, ya que si alguna vez aspiramos a administrador de redes o especializarnos en seguridad estas cosas tendriamos q saberlas

Asi q es lo q tendré que hacer.... de todos modos voy a seguir dando el coñazo por este hilo
  #15 (permalink)  
Antiguo 01/09/2005, 00:41
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Hola,

Pues yo creo que la mejor forma de defenderse, es conocer perfectamente el ataque para saber como atajarlo, así que me parece estupendo que se den asignaturas de este tipo y más todavía que la solución se comparta con otros que estamos interesados en el tema.

El servicio asociado al puerto 25 es el SMTP, es decir, servidor de correo saliente. Es el servicio al que nuestros clientes de correo electrónico se conectan cuando quieren enviar un e-mail. Hay un montón de servidores de distintos fabricantes y sobre estas cosas, siempre se están encontrado vulnerabilidades. También el Internet Information Server, si no está actualizado, es un auténtico colador (Servidor web,ftp y otras cosas...).

Cuando tenga un ratillo, buscaré información sobre esto. Me interesa mucho el tema. ¿Te sirvió del algo el scanner de puertos?.

Saludos.
  #16 (permalink)  
Antiguo 01/09/2005, 06:09
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
WebStorm la verdad que es una maravilla, pero yo no tengo ese nivel y se me escapa :), he visto que tienes msn, si quieres te agrego y de tanto en tanto hablamos sobre este tema, pq la practica tengo tiempo hasta diciembre asi si voy encontrando algo pues lo voy comunicando, y lo ire poniendo en este hilo por si interesa ha alguien mas
  #17 (permalink)  
Antiguo 02/09/2005, 00:47
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Hola,

Llegados a este punto de incertidumbre total, , se me ocurre que lo primero que debemos saber, es qué programas estan escuchando en los puertos comentados (80 y 25) para buscar entonces las posibles vulnerabilidades que puedan tener. Eso lo podrás saber recogiendo la salida que te dan al conectarte a ese puerto determinado del servidor.

Saludos.
  #18 (permalink)  
Antiguo 02/09/2005, 12:18
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
WebStorm , gracias por tu ayuda, eso creo que ya lo implemente, quiza no te he entendido, pero por ejemplo sabemos que el 25 es un cliente SMTP, y sino recuerdo mal estos se basan en protocolos TCP/IP, al igual que el www. por lo que el protocolo ya estaria no?¿
  #19 (permalink)  
Antiguo 02/09/2005, 12:38
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Si, ya sabes que puertos están abiertos, pero no sabes el software que hay escuchando detrás. Ahora la mecánica es al siguiente:

- Ya sabes que el puerto 25 está abierto. Ahora hay que saber que servidor SMTP está escuchando.... imaginate que encuentras uno de "Software Pepito S.A." por ejemplo (si alguna compañía se llama "Software Pepito", que me perdone). Pues ahora tienes que buscar vulnerabilidades conocidas de "Software Pepito".

-Una vez encontrada la vulnerabilidad, deberás hacer un programita que la explote y con eso habrás terminado.

Aquí, evidentemente, lo dificil es encontrar el agujero..... pero imagino que "el jefe" te habrá dado alguna pista. Te mando a tu email un documento muy interesante que he encontrado....

Saludos.
  #20 (permalink)  
Antiguo 03/09/2005, 04:11
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
WebStorm muchas gracias, y a ver si coincidimos en el msn, el "jefe" ha dicho que de momento tampoco nos compliquemos con puertos de servicicios asociados, que por ejemplo una idea seria hacer un barrido de los puertos que tiene el "emule" o algun cliente .torrent, para las descargas....
  #21 (permalink)  
Antiguo 03/09/2005, 05:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Pues el documento verdaderamente es muy bueno, lastima que mi ingles sea pesimo, lo de los puertos del emule lo estoy probando con mi propia maquina a ver si consigo algo, y al parecer veo los que tengo abiertos pero lo demas..., estoy por ir alguno foro "hacker" y preguntar algo a ver si me hechan una mano, asi te informo :)
  #22 (permalink)  
Antiguo 05/09/2005, 00:03
 
Fecha de Ingreso: enero-2005
Mensajes: 139
Antigüedad: 19 años, 3 meses
Puntos: 0
Yo me estoy empollando el documento y buscando por la red también. Ya te diré por aquí o por el MSN si tengo un rato y me puedo conectar si encuentro algo...

Saludos.
  #23 (permalink)  
Antiguo 05/09/2005, 11:50
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Ok gracias tio, pues yo la verdad que estoy algo jodidillo, ahora me estoy mirando la ampliacion de la practica que es algo así como enmascarar la ip, a ver si con un servidor publico...
  #24 (permalink)  
Antiguo 07/09/2005, 05:19
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Bueno como aun no me acaba de salir nada de nada :( voy a mirar la parte "opcional" que se trata de enmascarar la ip nuestra para cuando hagamos el "ataquerrrr", q va a ser q no, por lo visto se puede intentar hacer algo conectando a un servidor publico, pero el problema que tiene es q ellos pueden ver tu ip(los del servidor)...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:37.