Root > Documents > Web Güvenlik Açıkları > Paket Injection
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > Paket Injection
Madde
  Yazar : mcNEL
  Date : 03.12.2004 20:17:37
 
# Paket Injection
 

[Içindekiler]

1-Giris

2-genel bilgiler

3-paketler

4-injection yapisiz ve calismasi                        

5-paket enjekte etmek

 

1-Giris
Bu doküman ile özel teknik yardimiyla bütün ag trafigini ve yeni paketleri bulmak mümkündür. Basit C dili gereklidir.

 2-genel bilgiler
internetin çalisma katman esasina dayanarak   bilgisayarin ne zaman olduguna  ve birinci veri ile ikinci veri baglanti geçisinden önce diger protokol katmanlarinin  yapacagi kismin  çalismasi.

internetteki katmanlari üç tiptir:

a) tasima katmani
Bu katman gonderilen bir verileri alir ve birçok kücük katmana boler, TCP transfer kontrol protokolü ve UDP kullanici protokolleri kullanir.

b) internet katmani
Bu katman tum host a tek bir belirleyici verir ve tum paketleri kaynak hosttan duzenler. Tam bir guvenli veri aktarimi gerceklestiremez. Ve bu kataman protokol çesitlerinden IP ( Internet Protokolu ) yi kullanir.

 c) baglanti katmani
Bu katmana bagli olarak çesitli donanim ile çesitli baglanti tipleri:

BBE,IEEE 802,X.25,PPP,SLIP ve IP protokolleri.

 3-paketler
paket olusturmanin bir çok zor teknigi vardir.

 temel yapisiz bir paket ornegi :

+---------------------------------+

|      ethernet basligi    |  ana paket   |

+---------------------------------+

Ilk blok paket kaynagini tespit etmek için kullanilir; ilk blogun bitisi e (Ethernet basliginin bitisi) karakteri ile gosterilir.

TCP/IP ana paketinin basit yapisi asagidaki gibidir :

+----------------------------+

| IP datagram | TCP paketi |

+----------------------------+

 TCP paketi baska bloklarada bolunmustur.

Sonuc olarak TCP paketi asagidaki formdadir :

+--------------------------------------------------------------+

| Ethernet basligi | IP datagram | TCP basligi | TCP verisi |

+--------------------------------------------------------------+

Eger TCP paketi olusturmak istiyorsak, paket basligi ve ana TCP paketi lazimdir.

Diger paketler için, örnegin ARP, içinde aynidir ( sonra Ethernet basligi ve ana ARP paketi )

4-injection yapisiz ve calismasi
Paket injector ikiye bolunmustur;

[1]ag

[2]konsol

birinci kisim ag trafigini ve bütün yakalanan paketler ; Bu yüzden injector tum paketleri tanimayi dener ( tipini, kaynagini, hedefini, protokolünü) ve  ekrana yazar.

Ikinci kisim kullaniciya injector ile etkilesimi saglayabilir ve filtre listesini paket sniff için ayarlar

Paket injector bir cok yolla paketleri filtreleyebilir ;

[1]paketlerin tipleri

[2]paketlerin tipi birbirine etki eden IP Datagram

[3]kaynak IP

[4]hedef IP

[5]kaynak port

[6]heder port

5- paket injecting
Paket injecting ile paket yapimi ve ag uzerinden yollanmasi mumkun olmaktadir.

Paket injector bir dizi kolay kod kullanmaktadir, örnegin eger bizim paketimizin adi "test.pkt" ise, programin girisi soyle olmadir :

set infile test.pkt <-- hangi paketin inject olacanigi belirler
do inject <-- paketi inject etmek için emri verir

Bu sadece cok basit bir ornekti, fakat injector baska parametrelerede ihtiyaç duyar, örnegin kaynak ve hedef Ethernet adresi gibi .. :

setmyeth aa:aa:aa:aa:aa:aa      <- Kaynak ethernet adresini aa:aa:aa:aa:aa:aa olarak ayarlar
setethto bb:bb:bb:bb:bb:bb      <- Hedef ethernet adresini bb:bb:bb:bb:bb:bb larak ayarlar
set filleth x                   <- filleth i x olarak ayarlar( x bir sayi )
set fillethto x                 <- fillethto i x larak ayarlar( x bir sayi )
set infile test.pkt <-- hangi paketin inject olacanigi belirler
do inject <-- paketi inject etmek için emri verir

Bunlar haricinde baska fonksiyonlar vardir fakat bunlar kadar onemli degildir.

Paket injector 3 temel fonkisyona sahiptir :

+-----------------+      +------------------+          +------------------------+

| Packet sniffer   |    ->    | Packet injector  |      ->     | Packet siniflandirma |

+-----------------+       +------------------+          +------------------------+

asagidaki kod, paket injection için, Libnet kullanarak yazilmistir.

packetsinjector.c

#include <libnet.h>
int main(void) {
int network;                    /* ’’ag dönüsümü’’tarafindan     ve kullanilan paketleri ne zaman yazacagi ve ne zman kapatacagi */
int packet_size;                /* ’’paket boyutu’’kullanilan bellek yigini  ve paketi ne zaman yazacagi tartisilir. */
int n;                          /* gonderilen byte */
u_char *packet;                 /* paket */
u_long src_ip, dst_ip;         
u_short src_port, dst_port; 
src_ip = libnet_name_resolve("192.168.9.17", LIBNET_RESOLVE);   /* Adresleme duzenleniyor */   

if (!src_ip)
libnet_error(LIBNET_ERR_FATAL, "Bad destination IP ");
src_port = 5000;
dst_ip = libnet_name_resolve("213.93.39.87", LIBNET_RESOLVE);

if (!dst_ip)
libnet_error(LIBNET_ERR_FATAL, "Bad src IP ");
dst_port = 80;

packet_size = LIBNET_IPV4_H + LIBNET_TCP_H;                    /* paket boyutunu yanlizca tanimlayarak  TCP ve IP  basligini..kullanarak */
libnet_init_packet (packet_size, &packet);                     /* Ayri bellek */

if (!packet)
libnet_error(LIBNET_ERR_FATAL, "libnet_init_packet failed ");
network = libnet_open_raw_sock (IPPROTO_RAW);                  /* açik ag arabirimi */

if (network == -1)
libnet_error(LIBNET_ERR_FATAL, "Cannot open network interface ");  /* paket yapi arabirim  */

libnet_build_ip (LIBNET_TCP_H,            /* boyut */
IPTOS_LOWDELAY,

242,                                                         /* IPID */
0,                                                             /* Ayrilmama */
48,                                                           /* Bulunma zamni */
IPPROTO_TCP,                                     /* Protokol */

src_ip,                                                        /* Kaynak IP address */
dst_ip,                                                        /* Hedef IP address */

NULL,                                                     /* Payload */
0,                                                             /* payload uzunlugu */
packet);                                                   /*  paket hafiza basligi */

/* paket yapisi */
libnet_build_tcp (src_port,                                    /* kaynak TCP port */
dst_port,                                                      /* hedef TCP Port */
0xa1d95,                                                       /* islem numarasi */
0x53,                                                          /* Ack numarasi */
TH_SYN,                                                        /* SYN flag inin ayarlanmasi */
1024,                                                          /* Pencere boyutu */
0,                                                             /* Acil kapali */
NULL,                                                         /* Payload */
0,                                                               /* Payload uzunlugu */
packet + LIBNET_IPV4_H);                     /* packet hafiza basligi */

if (libnet_do_checksum(packet, IPPROTO_TCP, LIBNET_TCP_H) == -1)                  /* Checksum */

libnet_error(LIBNET_ERR_FATAL, "libnet_do_checksum failed ");
n = libnet_write_ip (network, packet, packet_size);                               /* INJECTION */

if (n < packet_size)
libnet_error(LN_ERR_WARNING, "libnet_write_ip only wrote %d bytes ", n);
else

printf("Construction and injection completed, wrote all %d bytes ", n);

if (libnet_close_raw_sock(network) == -1)                                         /* Temizlik */                libnet_error(LN_ERR_WARNING, "libnet_close_raw_sock couldn’t close interface ");

libnet_destroy_packet(&packet);                                                   /* Bos paket maddesi */

return (n == -1 ? EXIT_FAILURE : EXIT_SUCCESS);

}

Bir baska ornek, buda Perl un Net modulu ile kodlanmistir ;


#!/usr/bin/perl

use Net::RawIP;
use Net::PcapUtils;
use NetPacket::Ethernet qw(:strip);
use NetPacket::TCP;
use NetPacket::IP qw(:strip);

printf " [ Simple Packets Injector ] ";
printf "Functions : ";
printf "[1] - Promiscuous packets sniffer ";
printf "[2] - Packets injector ";
printf "Input function’s number : ";

$funct = <STDIN>;
chomp $funct;

if ($funct eq "1") {
sniffer();
}

elsif ($funct eq "2") {
injector();
}

else {
printf " Unknown function ... ";
exit(1);
}

sub sniffer {
if($> != 0)
{die ’’ag trafigini sniff lemek için EUID SIFIR olmali ... ";}

Net::PcapUtils::loop(&sniffit,
Promisc => 1,
FILTER => ’tcp’,
DEV => ’eth0’);

sub sniffit{
my ($args,$header,$packet) = @_;
$ip = NetPacket::IP->decode(eth_strip($packet));
$tcp = NetPacket::TCP->decode($ip->{data});
print "$ip->{src_ip}:$tcp->{src_port} --> $ip->{dest_ip}:$tcp->{dest_port} ";}}

sub injector{
$packet = new Net::RawIP;
$packet->set({

ip => { saddr => ’192.168.1.1’,
daddr => ’192.168.1.2’},

tcp => { source => 2323,
dest => 23,
ack => 1,
seq => 10000000,
ack_seq => 10000000,
data => ’Testing Net::RawIP’}});

$packet->send(0,1);}

Bu basit kodlar ile bu dokumanin sonuna geldik. Bu dokumani okudugunuz için tesekkurler.

Yazan : sedn4
Ceviren : mcNEL
Düzenleyen & Ekleyen : Grup Yöneticisi

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©