自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Yersinia:一款支持多協(xié)議的底層攻擊檢測工具

安全 數(shù)據(jù)安全
Yersinia是一款底層協(xié)議攻擊入侵檢測工具。它能實(shí)施針對多種協(xié)議的多種攻擊。

Yersinia是一款底層協(xié)議攻擊入侵檢測工具。它能實(shí)施針對多種協(xié)議的多種攻擊。例如奪取生成樹的根角色(生成樹協(xié)議:Spanning Tree Protocol),生成虛擬CDP(Cisco發(fā)現(xiàn)協(xié)議:Cisco Discovery Protocol)鄰居、在一個HSRP(熱等待路由協(xié)議:Hot Standby Router Protocol)環(huán)境中虛擬成一個活動的路由器、制造假DHCP反饋,以及其它底層攻擊。

下載鏈接:http://down.51cto.com/data/155576

>>去網(wǎng)絡(luò)安全工具百寶箱看看其它安全工具

支持的協(xié)議

* Spanning Tree Protocol (STP)       : 生成樹協(xié)議       : 該協(xié)議可應(yīng)用于環(huán)路網(wǎng)絡(luò),通過一定的算法實(shí)現(xiàn)路徑冗余,同時將環(huán)路網(wǎng)絡(luò)修剪成無環(huán)路的樹型網(wǎng)絡(luò),從而避免報(bào)文在環(huán)路網(wǎng)絡(luò)中的增生和無限循環(huán)

* Cisco Discovery Protocol (CDP)     : 思科發(fā)現(xiàn)協(xié)議     : 基本上是用來獲取相鄰設(shè)備的協(xié)議地址以及發(fā)現(xiàn)這些設(shè)備的平臺

* Dynamic Trunking Protocol (DTP)    : 動態(tài)中繼協(xié)議     : VLAN 協(xié)議組中思科專有協(xié)議,主要用于協(xié)商兩臺設(shè)備間鏈路上的中繼及中繼封裝(如 802.1Q)類型

* Dynamic Host Configuration Protocol (DHCP) : 動態(tài)主機(jī)分配協(xié)議 : 它分為兩個部份:一個是服務(wù)器端,而另一個是客戶端。所有的 IP 網(wǎng)絡(luò)設(shè)定數(shù)據(jù)都由 DHCP 服務(wù)器集中管理,并負(fù)責(zé)處理客戶端的 DHCP 要求;而客戶端則會使用從服務(wù)器分配下來的IP環(huán)境數(shù)據(jù)

* Hot Standby Router Protocol (HSRP) : 熱備份路由器協(xié)議 : HSRP 的設(shè)計(jì)目標(biāo)是支持特定情況下 IP 流量失敗轉(zhuǎn)移不會引起混亂、并允許主機(jī)使用單路由器,以及即使在實(shí)際第一跳路由器使用失敗的情形下仍能維護(hù)路由器間的連通性

* IEEE 802.1Q

* IEEE 802.1X

* Inter-Switch Link Protocol (ISL)   : 交換鏈路內(nèi)協(xié)議   : 是思科私有協(xié)議,主要用于維護(hù)交換機(jī)和路由器間的通信流量等 VLAN 信息

* VLAN Trunking Protocol (VTP)       : vlan干道協(xié)議     : VTP通過網(wǎng)絡(luò)(ISL幀或cisco私有DTP幀)保持VLAN配置統(tǒng)一性。VTP在系統(tǒng)級管理增加,刪除,調(diào)整的VLAN,自動地將信息向網(wǎng)絡(luò)中其它的交換機(jī)廣播

支持的操作系統(tǒng)

* OpenBSD 3.4 ( 注意 : 需要升級 pcap 庫 至少到 0.7.2)

* Linux 2.4.x and 2.6.x

* Solaris 5.8 64bits SPARC

* Mac OSX 10.4 Tiger (Intel)

HACKER YERSINIA

1.簡介 : 作者將引導(dǎo)我們一步步添加解析VRRP協(xié)議的代碼到 Yersinia 中

2.注冊協(xié)議 : 在創(chuàng)建vrrp.c和vrrp.h文件后第一件事就是注冊該協(xié)議,然后Yersinia就可以用我們提供的協(xié)議進(jìn)行攻擊,當(dāng)然也便于Yersinia提供給我們協(xié)議感興趣的數(shù)據(jù)

跳到 protocols.c::protocol_register_al() 的函數(shù)

  1. void 
  2.         protocol_register_all(void)  
  3.         {  
  4.             { extern void xstp_register(void); xstp_register(); }  
  5.             { extern void cdp_register(void);   cdp_register();   }  
  6.             { extern void dtp_register(void);   dtp_register();   }  
  7.             { extern void dhcp_register(void); dhcp_register(); }  
  8.             { extern void hsrp_register(void); hsrp_register(); }  
  9.             { extern void dot1q_register(void); dot1q_register(); }  
  10.             { extern void isl_register(void);   isl_register();   }  
  11.             { extern void vtp_register(void);   vtp_register();   }  
  12.             { extern void arp_register(void);   arp_register();   }  
  13.             { extern void dot1x_register(void); dot1x_register(); }  
  14.             { extern void vrrp_register(void); vrrp_register(); }  
  15.         }  
  16.         由此推測我們也需要自己的注冊函數(shù),在vrrp.c中定義下列函數(shù)  
  17.         void vrrp_register(void)  
  18.         {  
  19.            protocol_register(PROTO_VRRP, "VRRP""Virtual Router Redundancy Protocol",   
  20.                  "vrrp"sizeof(struct vrrp_data), vrrp_init_attribs, NULL,  
  21.                  vrrp_get_printable_packet, vrrp_get_printable_store,  
  22.                  vrrp_load_values, vrrp_attack,   
  23.                  vrrp_update_field,   
  24.                  vrrp_features, vrrp_comm_params, SIZE_ARRAY(vrrp_comm_params),   
  25.                  NULL, 0, NULL, vrrp_init_comms_struct, PROTO_VISIBLE, vrrp_end);  
  26.         }  

它又調(diào)用了 protocols.c::protocol_register()函數(shù)

  1. int8_t protocol_register(  
  2.               u_int8_t proto,                  : 協(xié)議標(biāo)識 我們把它定義到 protocol.h 中 #define PROTO_VRRP 10  
  3.               const char *name,                : 協(xié)議字符串名稱  
  4.               const char *desc,                : 協(xié)議的簡單描述  
  5.               const char *name_comm,           : 通俗點(diǎn)的名稱  
  6.               u_int16_t size,                  : vrrp_data 結(jié)構(gòu)體 的大小  
  7.               init_attribs_t init,             : 初始化協(xié)議的回調(diào)函數(shù),函數(shù)聲明:int8_t vrrp_init_attribs(struct term_node *node);  
  8.               learn_packet_t learn,            : 得到數(shù)據(jù)包時調(diào)用該函數(shù),我們需要把數(shù)據(jù)復(fù)制到 vrrp_data 結(jié)構(gòu)中,函數(shù)聲明:vrrp_learn_packet(struct attacks *attacks, char *iface, u_int8_t *stop, void *data, struct pcap_pkthdr *header, struct pcap_data *pcap_aux);  
  9.               get_printable_packet_t packet,   : 把數(shù)據(jù)包解釋成可讀的一個字符串  
  10.               get_printable_store_t store,     :   
  11.               load_values_t load,              : 解析接收到的數(shù)據(jù)包( 作者不太明白 vrrp_learn_packet()與vrrp_load_values()的區(qū)別 )  
  12.               struct attack *attacks,          : 該協(xié)議中所有可用的攻擊類型  
  13.               update_field_t update_field,     : 看起來這個回調(diào)函數(shù)是用來在用戶輸入一個命令行參數(shù)(比如源IP或目錄MAC...)時更新這個數(shù)據(jù)包中的某些字段  
  14.               struct proto_features *features, : 作者也不太明白,在 protcols.h 中定義  
  15.               struct commands_param *param,    : 存放需要提供給用戶的命令行及默認(rèn)值  
  16.               u_int8_t nparams,                : 同上  
  17.               struct commands_param_extra *extra_parameters,    : 置空之  
  18.               u_int8_t extra_nparams, get_extra_field_t extra, : 置空之  
  19.               init_commands_struct_t init_commands,             :   
  20.               u_int8_t visible,                : 設(shè)置為 PROTO_VISIBLE  
  21.               end_t end)                       : 翻譯資源的回調(diào)函數(shù)  
  22.         {  
  23.                 .....code.....  
  24.         }  

3.填充協(xié)議 : 注冊協(xié)議時我們填充了許多回調(diào)函數(shù)和結(jié)構(gòu)體,現(xiàn)在開始詳細(xì)填充之

vrrp_data : 該結(jié)構(gòu)體用來存放該協(xié)議的頭和以太網(wǎng)頭

void vrrp_init_attribs(struct term_node *node) : 該回調(diào)函數(shù)接收一個 term_node 類型的數(shù)據(jù),因?yàn)樵摵瘮?shù)是回調(diào)函數(shù),所以

應(yīng)該是被調(diào)用的,term_node數(shù)據(jù)也已經(jīng)填充好,我們需要取出其中數(shù)據(jù)去填充 vrrp_data ,比如版本號,源/目的端口號

char **hsrp_get_printable_packet(struct pcap_data *data) : 該回調(diào)函數(shù)用來把數(shù)據(jù)包解析成可閱讀形式的字符串 data 是捕獲

的數(shù)據(jù)包,我們從這個函數(shù)中分配一塊內(nèi)存用來存放字符串#p#

int8_t vrrp_load_values(struct pcap_data *data, void *values) : 該函數(shù)每次捕獲到數(shù)據(jù)包時都被調(diào)用,data指向數(shù)據(jù)包,

可以被我們用來填充 vrrp_data , 也就是說我們應(yīng)該從這解析該協(xié)議

struct attack { ... } : 這就是我們模塊的核心

  1. struct attack {  
  2.                        int16_t v;                        : 記錄攻擊的次數(shù)  
  3.                        char *s;                          : 對該攻擊的一些描述  
  4.                        int8_t type;                      : 是否為 (DOS) 攻擊  
  5.                        int8_t single;                    : 我們是一次發(fā)一個還是洪水般發(fā)送  
  6.                        void (*attack_th_launch)(void *); : 我們發(fā)動攻擊的回調(diào)函數(shù)  
  7.                        const struct attack_param *param; : 上邊函數(shù)的參數(shù)  
  8.                        u_int8_t nparams;                 : 上邊函數(shù)的參數(shù)個數(shù)  
  9.                }; 

這就是我們一開始等待的東西,這就是我們的攻擊功能的模塊的核心,在 fot1q.h 中有詳細(xì)的介紹 :

  1. -----------------------------------------------------------------------------------------  
  2.         #define DOT1Q_ATTACK_SEND   0  
  3.         #define DOT1Q_ATTACK_DOUBLE 1  
  4.         #define DOT1Q_ATTACK_POISON 2  
  5.         static struct attack dot1q_attack[] = {  
  6.             { DOT1Q_ATTACK_SEND,   "sending 802.1Q packet",             NONDOS, SINGLE,    dot1q_th_send,        NULL, 0 },  
  7.             { DOT1Q_ATTACK_DOUBLE, "sending 802.1Q double enc. packet", NONDOS, SINGLE,    dot1q_double_th_send, NULL, 0 },  
  8.             { DOT1Q_ATTACK_POISON, "sending 802.1Q arp poisoning",      DOS,    CONTINOUS, dot1q_th_poison,       
  9.               dot1q_arp_params, SIZE_ARRAY(dot1q_arp_params) },  
  10.             { 0,                   NULL,                                0,      0,         NULL,                 NULL, 0 }  
  11.         };  
  12.         void dot1q_th_send(void *);  
  13.         void dot1q_th_send_exit(struct attacks *);  
  14.         void dot1q_double_th_send(void *);  
  15.         void dot1q_double_th_send_exit(struct attacks *);  
  16.         void dot1q_th_poison(void *);  
  17.         void dot1q_th_poison_exit(struct attacks *);  
  18.         -----------------------------------------------------------------------------------------  
  19.         從上可以看出傳遞到registration函數(shù)的是一個attack結(jié)構(gòu)體數(shù)組,xxxxx,下面介紹結(jié)構(gòu)體中的各字段  
  20.         - v:                 好像是每個 attack 的ID : 0,1,2 ...   
  21.         - s:                一些 attack 的描述   
  22.         - type:             是否為拒絕服務(wù)式的攻擊(DOS)  
  23.         - single:           我們是發(fā)送一個數(shù)據(jù)包(SINGLE) 還是發(fā)送洪水?dāng)?shù)據(jù)包(CONTINUOUS)  
  24.         - attack_th_launch: 我們將要調(diào)用的函數(shù),比如在這個函數(shù)中完成這次攻擊  
  25.         - param, nparams:   傳遞給上述函數(shù)的參數(shù)和參數(shù)個數(shù)  
  26.         下面看下 dot1q.c 和 terminal-defs.h 文件  
  27.         -----------------------------------------------------------------------------------------  
  28.         struct attacks   
  29.    {  
  30.                u_int8_t up;        /* active or not */ 
  31.                THREAD    attack_th;  
  32.                THREAD    helper_th;  
  33.                u_int16_t attack;    /* attack number */ 
  34.                list_t   *used_ints; /* interfaces used */ 
  35.                u_int8_t mac_spoofing;  
  36.                void     *data;      /* packet */ 
  37.                void     *params;    /* Parameters */ 
  38.                u_int8_t nparams;   /* How many params */ 
  39.         };  
  40.         void dot1q_th_send(void *arg)  
  41.         {  
  42.                 struct attacks *attacks=NULL;  
  43.                 sigset_t mask;  
  44.                 struct dot1q_data *dot1q_data;  
  45.                 attacks = arg;   
  46.                 pthread_mutex_lock(&attacks->attack_th.finished);  
  47.                 pthread_detach(pthread_self());  
  48.                 sigfillset(&mask);  
  49.                 if (pthread_sigmask(SIG_BLOCK, &mask, NULL))  
  50.                 {  
  51.                         thread_error("dot1q_th_send pthread_sigmask()",errno);  
  52.                         dot1q_th_send_exit(attacks);  
  53.                 }  
  54.                 dot1q_data = attacks->data;  
  55.                 dot1q_data->tpi1 = ETHERTYPE_VLAN;  
  56.                 dot1q_data->tpi2 = ETHERTYPE_IP;  
  57.                 dot1q_send_icmp(attacks,0);  
  58.                 dot1q_th_send_exit(attacks);  
  59.         }  
  60.  
  61.         void dot1q_th_send_exit(struct attacks *attacks)  
  62.         {  
  63.                 if (attacks) attack_th_exit(attacks);  
  64.                 pthread_mutex_unlock(&attacks->attack_th.finished);  
  65.                 pthread_exit(NULL);  
  66.         }  
  67.         int8_t dot1q_send_icmp(struct attacks *attacks, u_int8_t double_encap)  
  68.         {  
  69.                 .....code.....  
  70.         }  
  71.         -----------------------------------------------------------------------------------------  

注意 attacks 結(jié)構(gòu)體和 attack 結(jié)構(gòu)體是完全不一樣的,attacks 對象是傳遞給函數(shù) dot1q_th_send 的,還有參數(shù)(arg),每個attack都含很多有用的信息,比如 thread-id(每個attack都在一個單獨(dú)的線程中) , dot1q_data(數(shù)據(jù)) ,還有參數(shù)及參數(shù)的個數(shù)等 . 然后我們在 dot1q_th_send() 中創(chuàng)建一個互斥體 , 然后調(diào)用 pthread_detach() (與主線程分享) ,然后調(diào)用 dot1q_send_icmp(attacks,0) , 然后調(diào)用 dot1q_th_send_exit(attacks) 函數(shù)

責(zé)任編輯:佟健 來源: 網(wǎng)絡(luò)整理
相關(guān)推薦

2015-11-16 14:27:03

2011-01-11 13:38:21

CPU-Z系統(tǒng)檢測

2022-07-04 08:48:36

KubernetesDatreeLinux

2015-09-28 18:05:52

安全審計(jì)入侵檢測Tiger–UNIX

2022-06-20 08:58:25

Obsidian筆記工具

2021-06-27 07:26:45

Windows 11操作系統(tǒng)微軟

2015-04-29 07:49:48

2018-11-01 08:40:48

入侵檢測系統(tǒng)IDS網(wǎng)絡(luò)安全

2023-05-12 13:20:07

ChatGPTAIGC檢測工具

2010-12-01 11:14:46

snort嗅探器數(shù)據(jù)包記錄器

2021-01-27 13:16:39

ScreenLinux命令

2021-02-16 10:58:50

ScreenLinux命令

2022-05-09 09:11:36

AtuinShellLinux

2021-08-10 08:39:06

SSH協(xié)議密碼爆破安全工具

2014-04-15 17:03:00

2009-06-03 14:15:34

2021-07-09 10:14:05

IP工具命令

2013-10-15 09:26:12

2020-12-22 10:30:47

Nagios工具監(jiān)控

2015-03-13 09:10:29

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號