Помощь с SQL-Inj

Discussion in 'Веб-уязвимости' started by Leendesst, 3 Feb 2019.

  1. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    Всем привет, есть такой скрипт, записывает логи. Недавно у знакомого слили через него сайт, но как обошли фильтр, мы не поняли(Оба знаем sql как прикладной язык).

    PHP:
    $crash clear($_POST['crash']);
    $db->insert("INSERT INTO `crashlogs` (id,name,crash,time) VALUES  (NULL,'$user','$crash','".time()."')");
    function 
    clear($s1){
             
    $s1 str_replace("\\",'/',$s1);
            return 
    str_replace(array("'",'"','\\','<','>','$','%'),'',$s1);
        }
    Функция insert в себе фильтрации не несёт


    Если кто сможет подсказать, буду очень благодарен.
    ps: $user ограничен по длине в 20 символов.
     
    #1 Leendesst, 3 Feb 2019
    Last edited: 3 Feb 2019
  2. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    560
    Likes Received:
    1,063
    Reputations:
    357
    Почему решили, что именно этот код поспсобствовал сливу? Кто и для чего читает эти логи? Не видно что есть $user и т.д. Если не брать кучу неизвестных в расчёт, то возможно как-то так:

    Code:
    user=vasyans\
    crash=,version(),1549180652)#
    
    Code:
    INSERT INTO `crashlogs` (id,name,crash,time) VALUES  (NULL,'vasyans\',',version(),1549180652)#','1549180652')
    
     
    Leendesst likes this.
  3. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    Злоумышленники дропнули таблицу crashlogs. Тестировал sqlmap'ом дыру - он крутит как error based, stacked query, но потом говорит, что это ложноположительное срабатывание..
    По логам было всё примерно так:
    00:00 - Отправленно ~4000 запросов на данный скрипт.
    0:15 - Зашли уже в pma, через pma залили шелл.
    0:18 -Дропнули таблицу crashlogs.
    Сам сайт на dle(10.0), с pma и mysql понятно всё. Знакомый не обновляется, а база от root'а работала.
    Весь скрипт:

    PHP:
    <?php
    define
    ('INCLUDE_CHECK',true);
    include 
    'connect.php';
    if(!isset(
    $_GET['user']) or !isset($_POST['crash'])) die();
    $user clear($_GET['user']);
    if(
    strlen($user) >20) die();

    if(
    c($crash,"Pixel format not accelerated")){
        echo 
    "Игра не запустилась.\r\nОшибка при поиске видеокарты!\r\nПожалуйста, переустановите драйвера видеокарты!";
    }
    if(
    c($crash,"Cant load library")){
        echo 
    "Попробуйте отключить антивирус!";
    }
    if(
    c($crash,"Cant find dependent libraries")){
        echo 
    "Установите компоненты VisualC++.";
    }
    if(
    c($crash,"OutOfMemory")){
        echo 
    "Не хватает ОЗУ для игры!\r\nПожалуйста, выберите больше 768мб.";
    }
    if(
    strlen($crash)>100000) die();
    $db->insert("INSERT INTO `crashlogs` (id,name,crash,time) VALUES  (NULL,'$user','$crash','".time()."')");
        function 
    clear($s1){
             
    $s1 str_replace("\\",'/',$s1);
            return 
    str_replace(array("'",'"','\\','<','>','$','%'),'',$s1);
        }
        function 
    c($s1,$s2){
            if (
    strpos($s1,$s2) !== false) {
                return 
    true;
            }
            return 
    false;
        }
    ?>
     
  4. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    560
    Likes Received:
    1,063
    Reputations:
    357
    А где $crash = clear($_POST['crash']); ?

    В общем, если обе переменные проходят через clear, инъекции нет.
     
    Leendesst likes this.
  5. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    Что-то пропустил. Тоже через clear идёт оно) Ладно, спасибо за помощь, будем копать логи дальше)
     
  6. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    логи выкладывай, разберёмся как захекали тебя
     
  7. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    К сожалению у него не логируются ip, всё localhost, но видно отчётливо, что гоняли сайт acunetix'ом..
    Было дело ещё в ноябре, но он там что-то сам пытался найти, но не вышло.
    PS: База у него от рута работала ещё, был pma, шелл точно через mysql влили.
    Логи за тот день: https://yadi.sk/d/KKBu4uj3y0fl6A
    Сам сайт на dle, 10 версия. Форум bullet energy, модули чистые, всё смотрели, всё экранируется..
     
  8. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
  9. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    А он разве не помер?) 2015 год - самая свежая тема)
     
  10. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    У меня блокнот зависает от такого лога. сарян
     
  11. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    notepad?)
     
  12. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    Точно
     
  13. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    560
    Likes Received:
    1,063
    Reputations:
    357
    Логи очень сильно засраны акунетиксом, сходу сказать сложно. По хорошему, нужно проводить аудит проекта. Если сервис профитный, наймите специалиста (пр. @winstrool), т.к. незванный гость мог оставить подарочков себе на будущее :)

    Я бы небыл так уверен, беглый осмотр логов показал наличие Directory Traversal в некоторых скриптах:
    Code:
    /viewskin.php?skin=../../../../../../../../../../../etc/hosts // true
    /viewskin.php?skin=../../../../../../../../../../../etc/hostsx // false
    /viewcloak.php?skin=../../../../../../../../../../../etc/hosts // true
    /viewcloak.php?skin=../../../../../../../../../../../etc/hostsx // false
    
    Так же phpmyadmin лежит не по старндартному пути, нафазить такое сложно, поэтому не факт что именно скуля послужила точкой проникновения.
     
  14. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    Да. Вот меня тоже удивило.. В pma зашли и всё... Вот как знали прям)
    По поводу аудита, предложил ему, он возможно возьмёт)
    Там всё старое как дерьмо мамонта, pma - старый, mysql - старый.. Тем более база у него от рута работает
     
    #14 Leendesst, 4 Feb 2019
    Last edited: 4 Feb 2019
  15. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    Старое не значит плохое.
     
  16. Leendesst

    Leendesst New Member

    Joined:
    20 Nov 2016
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    Про MySQL это не скажешь, в 16 году там нашли большую бреш))
     
Loading...