[//] Networking Center(R),
1999.
[//] Centro de Informacion
de Redes Informaticas y Telematicas.
[//] Web: http://networking.home.dhs.org
[//] Lista de Correo: Networking-Center@eGroups.com
[//] Titulo Documento: OCULTACION DE IPs
[//] Autor: Aule <aule@mixmail.com>
[//] Fecha: Septiembre 1999
[//] Parte: I
[//] Documento Autorizado bajo los Estatutos de Networking Center(R), Estatutos de Instruccion y Documentos, segun los cuales el autor cede los derechos intelectuales a Networking Center(R). Prohibida su reproduccion sin la aparicion de los logotipos de Networking y Networking Center(R), ademas del autor del documento y las URLs correspondientes.
[//] Networking Center(R)
no se hace responsable del mal uso y/o interpretacion de los contenidos
de este documento. Su autor tambien queda libre de toda responsabilidad.
Networking Center(R) no tiene porque estar de acuerdo con las opiniones
de sus instructores.
OCULTACION DE IPs (por Aule)
Este texto es una explicacion
para novatos(abstenerse gurus) de diversos terminos y tecnicas que nos
sirven para ocultar nuestra direccion ip
1. Introduccion
2. Proxys
3. Wingates
4. Bouncer
5. IP-Spoofing
1- Introduccion
Seguro que habeis oido hablar
o leido en algun texto cosas como un Bouncer un Wingate o un Proxy pero
es facil que no lo tengais muy claro o que tengais alguna duda, porque
estos terminos se confunden bastante amenudo Antes de empezar quiero que
entendais lo que realmente significa ocultar vuestra IP. Pues bien en internet
vuestra IP es lo mismo que en la vida real pueden ser tus huellas dactilares,
tu DNI o codigo genetico, sin estos datos podrias hacer "todo" lo que quisieras.
Si lo piensas podrias decir que eres "invisible", pues en internet lo mismo,
si "no tienes IP" eres un ordenador fantasma
2- Proxys
Bien voy explicar lo que
es un Proxy solo para los mas novatos porque cualquiera que lea esto creo
que ya lo tendria que saber :-P Cuando hablamos de una red siempre pensamos
en un grupo mas o menos grande de ordenadores conectados entre si, pero
esto no funciona solamente asi tiene que tener una determinada estructura,
necesita lo que se llama un servidor, que no es otra cosa que una maquina
con unas mejores prestaciones(aunque no siempre sea asi) y que usa un sistema
operativo con distintos usuarios
Bien pues cuando nuestra red necesita tener salida al exterior, ya sea a otra red local o a internet, decimos que es un servidor Proxy, todos los datos que lleguen de fuera de nuestra red tienen que pasar por esta maquina su funcion entonces seria la de un router(esto no es asi exactamente, que no me mate nadie xD), es entonces cuando tienen utilidad palabras como wingate o bouncer. Existen muchos tipos de servidores proxy, sin ir mas lejos vuestro proveedor de internet funciona como un server proxy y vosotros formais parte de su red, solo que a diferencia de una pequeña red local, el server de vuestro ISP tiene que asignar una ip distinta cada vez que accedeis a el(entre otras diferencias).En una red local (LAN) las ips suelen estar predefinidas.
3- Wingates
Wingate es un programa que
funciona en Win 95/98 y NT. Este programa lo usan los servers proxys para
dirigir el trafico circula por una red local es lo que hace que realice
funciones similares a un router. Realmente todo el software que hace estas
funciones es conocido con el nombre de wingate pero existen muchos programas
que realizan esta funcion cada uno con su propio nombre pero el mas comun
es el que realmente se llama wingate (mas adelante explicare como diferenciar
los distintos wingates) Bien pues estos programas no es que sean muy dificiles
de configurar pero amenudo los admis se dejan muchas puertas abiertas que
el programa trae por defecto, sobre todo las versiones mas antiguas y sin
parchear, las cuales permiten acceso telnet al puerto 23 sin pedir pass
(jejeje :)) Con estos datos podemos usar el wingate para muchas cosas...
cada uno... Podemos acceder al IRC para lo que solo necesitamos algunos
comandos del mIRC
1 /server wiley231h038.roadrunner.nf.net
23
-
ÿû_ÿûÿýWinGate>NICK
Aule
Connecting to host NICK...Host
name lookup for 'NICK' failed
USER aule "pss" "wiley231h038.roadrunner.nf.net"
The truth is out
there...
Connecting to host USER
aule "pss" "wiley231h038.roadrunner.nf.net"
...Host name lookup for
'USER aule "pss"
"wiley231h038.roadrunner.nf.net"
' failed
-
2 /raw dubhe.irc-hispano.org
6667
-
-> Server: dubhe.irc-hispano.org
6667
-
Connecting to host dubhe.irc-hispano.org...Connected
-
3 /raw nick Aule
-
-> Server: nick Aule
-
PING? PONG!
-
4 /raw user taigual kemasda
el@mio.com ikepasa
-
-> Server: user taigual
kemasda el@mio.com ikepasa
-
Welcome to the Internet
Relay Network Aule
Your host is dubhe.irc-hispano.org[dubhe.acn.es],
running version
u2.10.06.24.(nullchan)
This server was created
Mon Aug 16 1999 at 00:57:47 EDT
dubhe.irc-hispano.org u2.10.06.24.(nullchan)
dioswkg biklmnopstv
Bueno y ya tamos dentro del
irc usando un wingate :) tambien se puede usar el comando QUOTE en lugar
de RAW y los puntos 3 y 4 pueden ir en orden contrario. Si te sientes intrigado
por que es lo que has hecho hazte un whois y seguro que lo comprenderas.
Tambien existen lo que son
los socks que permiten el acceso al IRC atraves de la maquina Wingate pero
por el puerto 1080. Con del mIRC su uso es de lo mas sencillo no tienes
mas que indicarle al mIRC que usas a la maquina con el Wingate como un
firewall y el puerto que usas para acceder a el, el 1080. Esto se hace
en la ventana del setup del mIRC en la pestaña que pone firewall,
hay distintas casillas, en la del host ponemos la direccion del Wingate,
puerto 1080 que ya viene por defecto, y pulsamos los socks,bueno... y conectar
con el server de IRC como haces siempre. La diferencia de hacerlo asi es
que si realizamos un DCC con otro usuario este va conocer nuestra autentica
IP
Si eres un poco inteligente
entenderas que con esto te puedes saltar cosas como un G-LINE y un KILL
o bans en canales donde no te has portado bien :P Ademas si alguien te
esta intentando nukear lo tiene mucho mas dificil porque intentara nukear
al server del wingate no tu ordenador. Decir por ultimo del wingate en
el IRC, que en la red hispano.org el uso de wingates esta en vias de extincion
:(( pero esto no es el tema de este txt Bueno sigamos con nuestro amigo
Wingate como dije antes el programa habre el puerto 23 y permite acceder
a el sin pedirnos pass, con lo cual lo podemos usar para saltar a otras
maquinas. Esto es lo que seria hacer Bouncing pero lo explico en este apartado
por que es atraves de un wingate. Como dije antes no todos los Proxys usan
el mismo software, existen distintos programas que usan estos servers cada
uno tiene sus propios fallos de seguridad, pero vamos a diferenciar que
tipo de soft se trata:
- Winproxy
realizamos un telnet al
server
---------------------------------------------------
Trying 195.76.206.157...
Connected to 195.76.206.157.
Escape character is '^]'.
Enter : <host> [port]
:
----------------------------------------------------
para estar seguros conectamos al ftp (puerto 21)
------------------------------------------------------
Connected to 195.76.206.157.
220 WinProxy FTP Gateway
ready, enter username@host[:port]
-----------------------------------------------------
esta claro que es un winproxy
- Wingate
Esta claro el conocido Wingate
:)
Las ultimas versiones vienen
parcheadas para que no se pueda
acceder desde el exterior
Realizamos un telnet y vemos
clarito el prompt
---------------------------------------------------
Trying 195.76.206.62...
Connected to 195.76.206.62.
Escape character is '^]'.
WinGate>
---------------------------------------------------
FTP
------------------------------------------------------
Connected to 195.76.206.62.
220 WinGate V1.3 FTP Gateway
ready, enter user@host[:port]
------------------------------------------------------
sed buenos.... si podeis :P
- S-Proxy
Este es soft español!
Telnet
----------------------------------------------------
Trying 194.75.196.77...
Connected to 194.75.196.77.
Escape character is '^]'.
Host:
----------------------------------------------------
Para reconocerlo correctamente FTP
-------------------------------------------------------
Connected to 194.75.196.77.
220 S-Proxy preparado para
recibir.
-------------------------------------------------------
cuando realizamos telnet solo nos deja hacerlo al puerto 23 lo que aumenta su seguridad pero nos permite Bouncear igualmente :)
Creo que ya sabeis que es lo que se puede hacer con esto.. al hacer un telnet al wingate podemos saltar a cualquier otra maquina
wingate> telnet mi.vecino.es 23
La ventaja es clara... no nos conectamos a la maquina de mi.vecino.es desde nuestro ordenador si no desde el del wingate quedando en la maquina de mi.vecino.es la IP del wingate y no la nuestra :P Pero no todo es tan facil :( en la maquina del wingate pueden quedar los logs asi que andar con cuidado.
4- Bouncer
Como la tecnica explicada
en el apartado anterior existe alguna otra manera de hacer bouncing. Creo
que ya entendeis lo que es bouncing pero bueno....
mi maquina Bouncer objetivo
A ----------> B ----------->
C
El bouncer puede ser como
el caso anterior un wingate mal configurado o un programa colocado en la
maquina B por una mano un tanto "inocente" Bouncing se puede hacer en maquinas
Unix haciendo correr un daemond que nosotros hallamos colocado (ojo con
el root!) solo le indicaremos el puerto por el que nosotros entraremos
y la maquina y puerto al que "saltamos" Esto se puede usar para conectarse
al IRC de forma mas segura o para otros menesteres ;>
Aqui os dejo un Bouncer para acceder al IRC:
--------------cut-------------
/* Distribution: Public
*/
/* Copyright: Held by the
respective contributors */
/* Posted to USENET September
'93 by Mark mark@cairo.anu.edu.au */
/* This file was telserv.c,
part of the Telnet Server package v. 1.0,
written by "Hal-9000". Much
of that package was developed by Richard
Stephens and his thanks
go to "Xanadude" for providing him with that
section. Performance fix
by Darren Reed. */
/* Reworked to add concurrency,
password checking and destination selection
on the fly. - Mark 31st
Aug 93
Now its a IRC bouncer - riley Nov 93.
Compiled and tested on:
HPUX 9.01 9000/700 series
NeXTStep 3.1 NeXT 68040
OSx Pyramid 90x BSD universe
SunOS 5.2 sun4c
Ultrix 4.3 DEC RISC
To compile, type "cc -O -s
ts2.c -o ts2".
*/
/*+ IRC Bouncer hacks +*/
#define IRCSERV "irc.lleida.net"
#define IRCPORT 6667
#define IRCBNC 9999
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <errno.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#define QLEN 5
char sbuf[2048], cbuf[2048];
extern int errno;
extern char *sys_errlist[];
void reaper();
int main();
void telcli();
int main(argc, argv)
int argc;
char *argv[];
{
int srv_fd, rem_fd, rem_len,
opt = 1;
struct sockaddr_in rem_addr,
srv_addr;
#if !defined(SVR4) &&
!defined(POSIX) && !defined(linux) && !defined(__386BSD__)
&& !defined(hpux)
union wait status;
#else
int status;
#endif /* !defined(SVR4)
*/
bzero((char *) &rem_addr,
sizeof(rem_addr));
bzero((char *) &srv_addr,
sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr
= htonl(INADDR_ANY);
srv_addr.sin_port = htons(IRCBNC);
/*+ IRC Bouncer hack +*/
srv_fd = socket(PF_INET,
SOCK_STREAM, 0);
if (bind(srv_fd, (struct
sockaddr *) &srv_addr, sizeof(srv_addr)) == -1) {
perror("bind");
exit(-1);
}
listen(srv_fd, QLEN);
close(0); close(1); close(2);
#ifdef TIOCNOTTY
if ((rem_fd = open("/dev/tty",
O_RDWR)) >= 0) {
ioctl(rem_fd, TIOCNOTTY,
(char *)0);
close(rem_fd);
}
#endif
if (fork()) exit(0);
while (1) {
rem_len = sizeof(rem_addr);
rem_fd=accept(srv_fd, (struct
sockaddr *) &rem_addr, &rem_len);
if (rem_fd < 0) {
if (errno == EINTR) continue;
exit(-1);
}
switch(fork()) {
case 0: /* child process
*/
close(srv_fd); /* close
original socket */
telcli(rem_fd); /* process
the request */
close(rem_fd);
exit(0);
break;
default:
close(rem_fd); /* parent
process */
if (fork()) exit(0); /*
let init worry about children */
break;
case -1:
fprintf(stderr, "\n\rfork:
%s\n\r", sys_errlist[errno]);
break;
}
}
}
void telcli(source)
int source;
{
int dest;
int found;
struct sockaddr_in sa;
struct hostent *hp;
struct servent *sp;
char gethost[100];
char getport[100];
char string[100];
hp = gethostbyname(IRCSERV);
if (hp) {
found++;
#if !defined(h_addr) /*
In 4.3, this is a #define */
#if defined(hpux) || defined(NeXT)
|| defined(ultrix) || defined(POSIX)
memcpy((caddr_t)&sa.sin_addr,
hp->h_addr_list[0], hp->h_length);
#else
bcopy(hp->h_addr_list[0],
&sa.sin_addr, hp->h_length);
#endif
#else /* defined(h_addr)
*/
#if defined(hpux) || defined(NeXT)
|| defined(ultrix) || defined(POSIX)
memcpy((caddr_t)&sa.sin_addr,
hp->h_addr, hp->h_length);
#else
bcopy(hp->h_addr, &sa.sin_addr,
hp->h_length);
#endif
#endif /* defined(h_addr)
*/
} else {
if (inet_addr(gethost) ==
-1) {
found = 0;
sprintf(string, "Didnt find
address for %s\r\n", gethost);
write(source, string, strlen(string));
} else {
found++;
sa.sin_addr.s_addr = inet_addr(gethost);
}
}
sa.sin_family = AF_INET;
sa.sin_port = htons((unsigned)
IRCPORT);
if (sa.sin_port == 0) {
sp = getservbyname(getport,
"tcp");
if (sp)
sa.sin_port = sp->s_port;
else {
sprintf(string, "%s: bad
port number\r\n", getport);
write(source, string, strlen(string));
return;
}
}
if ((dest = socket(AF_INET,
SOCK_STREAM, 0)) < 0) {
perror("telcli: socket");
exit(1);
}
connect(dest, (struct sockaddr
*) &sa, sizeof(sa));
#ifdef FNDELAY
fcntl(source,F_SETFL,fcntl(source,F_GETFL,0)|FNDELAY);
fcntl(dest,F_SETFL,fcntl(dest,F_GETFL,0)|FNDELAY);
#else
fcntl(source,F_SETFL,O_NDELAY);
fcntl(dest,F_SETFL,O_NDELAY);
#endif
communicate(dest,source);
close(dest);
exit(0);
}
communicate(sfd,cfd) {
char *chead, *ctail, *shead,
*stail;
int num, nfd, spos, cpos;
extern int errno;
fd_set rd, wr;
chead = ctail = cbuf;
cpos = 0;
shead = stail = sbuf;
spos = 0;
while (1) {
FD_ZERO(&rd);
FD_ZERO(&wr);
if (spos < sizeof(sbuf)-1)
FD_SET(sfd, &rd);
if (ctail > chead) FD_SET(sfd,
&wr);
if (cpos < sizeof(cbuf)-1)
FD_SET(cfd, &rd);
if (stail > shead) FD_SET(cfd,
&wr);
nfd = select(256, &rd,
&wr, 0, 0);
if (nfd <= 0) continue;
if (FD_ISSET(sfd, &rd))
{
num=read(sfd,stail,sizeof(sbuf)-spos);
if ((num==-1) &&
(errno != EWOULDBLOCK)) return;
if (num==0) return;
if (num>0) {
spos += num;
stail += num;
if (!--nfd) continue;
}
}
if (FD_ISSET(cfd, &rd))
{
num=read(cfd,ctail,sizeof(cbuf)-cpos);
if ((num==-1) &&
(errno != EWOULDBLOCK)) return;
if (num==0) return;
if (num>0) {
cpos += num;
ctail += num;
if (!--nfd) continue;
}
}
if (FD_ISSET(sfd, &wr))
{
num=write(sfd,chead,ctail-chead);
if ((num==-1) &&
(errno != EWOULDBLOCK)) return;
if (num>0) {
chead += num;
if (chead == ctail) {
chead = ctail = cbuf;
cpos = 0;
}
if (!--nfd) continue;
}
}
if (FD_ISSET(cfd, &wr))
{
num=write(cfd,shead,stail-shead);
if ((num==-1) &&
(errno != EWOULDBLOCK)) return;
if (num>0) {
shead += num;
if (shead == stail) {
shead = stail = sbuf;
spos = 0;
}
if (!--nfd) continue;
}
}
}
}
--------------cut-------------
tambien os dejo otro Bouncer con acceso atraves de una pass, para que ningun listillo se aproveche de vuestro trabajo colocando un Bouncer y usandolo el.
--------------cut-------------
/* Virtual Hostname/Machine
IRC Bouncer
*** Includes:
-choose any irc server after
connect!
-virtual hostnames...duh!
-password protected after
connnect.
*** Future Plans: To make
it so it allows more than one connect.
*/
/* INSTRUCTIONS FOR USE:
First, type export IRC_HOST=your.irc.host
Next, Type ./vhost <port
num> eg. ./vhost 9090 */
/* DEFINES */
#define password "darkk"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netdb.h>
extern h_errno;
/* SunOS 4.1.4 is really lame and doesn't define this */
#ifndef INADDR_NONE
#define INADDR_NONE -1
#endif
struct in_addr LocalHostAddr;
/* m_strdup stolen from ircII
epic */
/* changed to default malloc
instead of ircII epic's new_malloc routine */
/* Hope it doesn't create
any adverse affects */
char *m_strdup (const char
*str)
{
char *ptr;
char empty_string[] = "";
if (!str)
str = empty_string;
ptr = (char *)malloc(strlen(str)
+ 1);
return strcpy(ptr, str);
}
int do_connect(char *hostname,
u_short port)
{
int s = -1;
struct hostent *he;
struct sockaddr_in sin;
struct sockaddr_in localaddr;
s = socket(AF_INET, SOCK_STREAM,
0);
if(s < 0)
return -2;
/* bind to the local address, this was a pain in the ass to understand */
memset(&localaddr, 0,
sizeof(struct sockaddr_in));
localaddr.sin_family = AF_INET;
localaddr.sin_addr = LocalHostAddr;
localaddr.sin_port = 0;
if (bind(s, (struct sockaddr
*)&localaddr, sizeof(localaddr)))
return close(s), -2;
/* now connect from the address.. fun for the entire family. */
memset(&sin, 0, sizeof(struct
sockaddr_in));
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(hostname);
if(sin.sin_addr.s_addr ==
INADDR_NONE)
{
he = gethostbyname(hostname);
if(!he)
return -1;
memcpy(&sin.sin_addr,
he->h_addr, he->h_length);
}
if(connect(s, (struct sockaddr
*)&sin, sizeof(sin)) < 0)
{
close(s);
return -2;
}
return s;
}
void server(int s)
{
int sock_c=-1;
int maxfd = s+1;
char buffer[1024];
char user[1024];
char nick[1024];
fd_set rset;
u_short myport;
char *cmd, *server, *port,
*passwd;
char myserver[1024];
memset(buffer, 0, 1023);
if(read(s, buffer, 1024)
<= 0)
{
close(s);
return;
}
if(!strncmp(buffer, "USER",
4))
strcpy(user, buffer);
else
strcpy(nick, buffer);
memset(buffer, 0, 1024);
if(read(s, buffer, 1023)
<= 0)
{
close(s);
return;
}
if(!strncmp(buffer, "USER",
4))
strcpy(user, buffer);
else
strcpy(nick, buffer);
sprintf(buffer, "NOTICE
usr :****************************************\n");
sprintf(buffer, "NOTICE
usr :* Welcome To Virtual IRC GateWay *\n");
sprintf(buffer, "NOTICE
usr :****************************************\n");
sprintf(buffer, "NOTICE
usr : Enter your password....\n");
sprintf(buffer, "NOTICE
usr : e.g. /quote connect mypasswd irc.nwlink.com\n");
write(s, buffer, strlen(buffer));
while(1)
{
FD_ZERO(&rset);
FD_SET(s, &rset);
if(sock_c >= 0)
FD_SET(sock_c, &rset);
if(sock_c > s)
maxfd = sock_c + 1;
else
maxfd = s + 1;
select(maxfd, &rset,
NULL, NULL, NULL);
memset(buffer, 0, 1024);
if(FD_ISSET(s, &rset))
{
if(read(s, buffer, 1023)
<= 0)
{
close(s);
close(sock_c);
return;
}
if(sock_c >= 0)
{
write(sock_c, buffer, strlen(buffer));
}
else
{
cmd = NULL;
server = NULL;
port = NULL;
passwd = NULL;
cmd = strtok(buffer, " ");
if(!cmd)
continue;
if(strcmp(cmd, "connect"))
continue;
passwd = strtok(NULL, "
\n\r");
if(!passwd)
continue;
if((strcmp(passwd, password)
!= 0))
{
sprintf(buffer, "NOTICE
usr :*** Password Invalid. UNAUTHORIZED ACCESS IS PROHIBITED \n");
write(s, buffer, strlen(buffer));
continue;
}
server = strtok(NULL, " \n\r");
if(!server)
continue;
strcpy(myserver, server);
port = strtok(NULL, " \n\r");
if(!port)
port = "6667";
myport = atoi(port);
sock_c = do_connect(myserver,
myport);
if(sock_c < 0)
sock_c = -1;
write(sock_c, user, strlen(user));
write(sock_c, nick, strlen(nick));
memset(buffer, 0, 1024);
read(sock_c, buffer, 1023);
if(strlen(buffer) > 0)
{
write(s, buffer, strlen(buffer));
}
continue;
}
}
if(sock_c >= 0)
{
if(FD_ISSET(sock_c, &rset))
{
memset(buffer, 0, 1024);
if(read(sock_c, buffer,
1023) <= 0)
{
close(s);
close(sock_c);
return;
}
write(s, buffer, strlen(buffer));
}
}
}
}
int
main(int argc, char *argv[])
{
int a_sock = 0;
int s_sock = 0;
char *LocalHostName = NULL;
char *ptr = NULL;
char hostname[81];
struct hostent * hp;
int dport;
struct sockaddr_in sin;
int sinlen;
int xx;
int mypid;
if(argc >= 2) dport=atoi(argv[1]);
else dport=9090;
if ((ptr = getenv("IRC_HOST"))
|| (ptr = getenv("IRCHOST")))
LocalHostName = m_strdup(ptr);
if ((gethostname(hostname,
sizeof(hostname))))
if (!LocalHostName)
exit(1);
printf("Virtual host ircgate,
*hop* Hold on..\n");
printf("Attempting to bind
on port: %d\n",dport);
if (LocalHostName)
{
printf("Attempting to bind
on host: %s\n", LocalHostName);
memset((void *)&LocalHostAddr,
0, sizeof(LocalHostAddr));
if ((hp = gethostbyname(LocalHostName)))
memcpy((void *)&LocalHostAddr,
hp->h_addr, sizeof(LocalHostAddr));
}
else
{
if ((hp = gethostbyname(hostname)))
memcpy((char *) &LocalHostAddr,
hp->h_addr, sizeof(LocalHostAddr));
}
s_sock = socket(AF_INET,
SOCK_STREAM, 0);
if(s_sock < 0)
{
perror("socket");
exit(0);
}
memset(&sin, 0, sizeof(struct
sockaddr_in));
sin.sin_family = AF_INET;
sin.sin_port = htons(dport);
sin.sin_addr.s_addr = INADDR_ANY;
if(bind(s_sock, (struct
sockaddr *)&sin, sizeof(struct sockaddr_in)) < 0)
{
perror("bind");
exit(0);
}
if(listen(s_sock, 10) <
0)
{
perror("listen");
exit(0);
}
{
xx = fork(); /* Fork the
process */
if (xx == -1) {
printf("FATAL ERROR: UNABLE
TO FORK PROCESS!\n");
exit(1);
}
if (xx!=0) {
printf("Launched into the
background [pid: %d]\n\n",xx);
setpgid(xx,xx);
exit(0);
}
setpgid(0,0);
/* No more TTY i/o for us!
*/
freopen("/dev/null","r",stdin);
freopen("/dev/null","w",stdout);
freopen("/dev/null","w",stderr);
while(1)
{
sinlen = sizeof(sin);
close(a_sock);
a_sock = accept(s_sock,
(struct sockaddr *)&sin, &sinlen);
if(a_sock < 0)
{
perror("accept");
continue;
}
#ifdef MULTIPLE_OCCURANCES
switch(fork())
{
case -1:
continue;
case 0:
#endif
server(a_sock);
#ifdef MULTIPLE_OCCURANCES
exit(0);
}
/* Might want to set the
last param to WNOHANG if it
hangs here... Careful, creates
zombies if you do. */
while(waitpid(-1, NULL,
NULL) > 0) ;
#endif
}
}
}
--------------cut-------------
Para los usuarios Win y que
no tengan una maquina Unix donde colocar estos programas deciros que existen
distintos programas Win para hacer Bouncer, muchos de ellos los traen los
scripts de IRC como el WANIRC del 7th sphere explicado por Qva$aR en su
txt "como saltarse una k-line" en http://www.undersec.com o el famoso y
conocido IRCap de GSi que incorpora un bouncer hecho por el (los que sepais
algo de scripting podeis mirar y haceros uno a vuestro gusto). Existen
mas programas de este tipo como el WinBouncer muy faciles de configurar
y que podeis usar para cualquier cosa solo teneis que indicar los puertos
y el host Muchos direis que como utilizo yo un Bouncer si no tengo ninguna
shell y solo el PC de mi habitacion... pues para saltarse bans o jugar
en el IRC podeis hacerlo con algun inconsciente amiguete que os deje usar
su ip :)
Si sois algo mas avispados
o quereis hacer cosas mas interesantes en el hacking podeis colocarlo en
ordenatas de vuestro instituto, en la academia donde estudiais, a ese pardillo
que el otro dia a la noche estaba infectado con el netbus etc etc ...
5- IP-Spoofing
Bueno llegamos a la parte
mas dificil del texto seguro que la mayoria de vosotros habeis oido hablar
de esta tecnica o teneis idea de en que consiste pero no lo teneis muy
claro. Veamos el IP-Spoofing es una tecnica bastante dificil y compleja
que requiere bastantes conocimientos sobre todo del protocolo TCP-IP
Explicandolo a la ligera
podria decir que el IP-Spoofing consiste en engañar a una maquina
(host A) haciendole creer que somos otra maquina (host B) que en realidad
no somos
acceso
host B -------> host A
sin pass
Esta tecnica se basa en el
procedimiento usado (mal usado) en algunos sistemas de permitir el acceso
sin una comprobacion atraves de contraseña y utilizando la confianza
en las direcciones IP El server A tiene depositada confianza en el server
B (trust host), conoce la IP de este y no pide contraseña de entrada
a su sistema desde esa maquina Supongo que ya ireis cogiendo la idea no???
Para realizar esta tecnica es necesario tener privilegios de Root desde
la maquina que se realiza el ataque. Ademas hay que tener encuenta una
cosa que os puede pasar y que es muy importante, cuando vosotros realizais
el ataque modificais los paquetes de datos cambiando en estos vuestra direccion
IP y usando la del Trust host (esto no se hace "a mano" lo realiza un software
especifico para esta tarea, seguid leyendo) debido a esto las respuestas
que la maquina objetivo mande a esa transmision TCP-IP no las recibireis
vosotros sino el trust host pero no os preocupeis por esto porque seran
ignoradas al no haber el realizado la conexion. El problema viene de que
teneis que intuir las respuestas que manda y tb el tiempo para realizar
el siguiente envio de datos esto dependera de la pericia de cada uno de
vosotros :(
Habia pensado incluir el
codigo de un programa de IP-spoofing pero os lo dejo para vosotros porque
la mayoria son mas grandes que todo este txt, de todas maneras en http://www.rootshell.org/
podeis encontrar cientos y para multitud de sistemas operativos, solo buscad
por la palabra "spoof" XD Otro de los problemas con lo que os encontrareis
es localizar el Trust host de la maquina que quereis atacar (si es que
lo tiene!) y el momento de realizar el ataque porque si entre las dos maquinas
estan realizando una comunicacion es imposible que vosotros os coleis en
medio. Lo que debeis de hacer es cortar el trafico del trust host y asi
poder realizar vosotros la conexion, esto se puede hacer de distintas maneras,
procurad que no cante mucho, mirar cosas del protocolo TCP-IP,(TCP SYN
flooding puede ser buena manera)
Una vez que tengais controlado
todo el proceso es decir tengais la maquina objetivo el trust host y os
hallais asegurado que esta no reciba trafico TCP-IP
Procedeis al ataque IP-Spoofing
pero recordar que no recibireis respuestas por parte de la maquina objetivo.
Bueno comentaros tambien
la existencia de algun programa para Win 95/98 que utilizan su propio conjunto
de instrucciones TCP (no el paquete de Win) realizan Ip-Spoofing uno de
estos programas es el Aggressor Exploid, lo podeis encontrar en http://www.aggressor.net
con este programa ademas de spoofear vuestra Ip tambien podreis realizar
otros ataques :P pero sin tener relacion con lo que explique del Trust
host que es la principal aplicacion del IP-Spoofing
Existen otros programas
que tambien spoofea la IP pero de dudosa efectividad y casi todos orientados
al IRC "cambian" vuestra IP y hasta el nombre de vuestro host (similar
al DNS-inject) estos programas son como un Bouncer pero sin la necesidad
de usar una maquina puente con el server de IRC (dificil de realizar no??
al menos el cambio de IP desde Win)
Con el DNS-inject conseguis que en vez de conectaros asi:
*** LuKaS (~lukas@ctv21225137015.ctv.es) has joined #sexo
saldria esto otro
*** LuKaS (~lukas@mi.polla.es.la.mas.grande) has joined #sexo
mola??? :) algunos programas consiguen esto ultimo solo sin spoofear vuestra IP, otros hacen las dos cosas, hay muchas posibilidades, estos programas orientados al spoof en el IRC suelen venir en scripts asi que ya sabeis, si quereis provar si de verdad funcionan..... downdload RLz!
-------------------------------------------------------------------------
Todo lo explicado en este
texto es con fines educativos, el autor no es responsable del mal uso de
lo que aqui se cuenta.
Este txt es de libre distribucion
siempre que no se altere su contenido ni formato asi como el nombre de
su autor
Agradecimientos a M|Gel,Craig,aptc,y
los que me dejo, por aguantarme :)
Para cualquier duda, sugerencia,
critica......
Buscame en el IRC-Hispano.org
(www.irc-hispano.org) mi nick es Aule tb por mail a aule@mixmail.com
-------------------------------------------------------------------------
Open your eyes! Open your
mind!!
By Aule © 1999