1. PHP / Говнокод #25431

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    public function comments()
        {
            $a = new common_articles($this);
    
            switch ($this->prms[3]) {
                case 'search':
                    {
                        break;
                    }
                default:
                    {
                        $where = array();
                        $itemid = 0;
     // и еще полторы сотни строк кода
                    }
            }
        }

    Параход такой параход...

    Запостил: Arris, 06 Марта 2019

    Комментарии (107) RSS

    • Ответить
    • >in my research and found ability to execute OS commands through imap_open function
      https://bugs.php.net/bug.php?id=76428

      кто соснул?
      пыхеры сосунли
      как соснули?
      феерично!
      https://unix.stackexchange.com/questions/504770/someone-remote-executing-a-script-on-my-server
      Ответить
      • Какой баг )))
        Ответить
      • >argument injection
        Кто-то так и не осилил сделать передачу параметров массивом?
        Ответить
        • перлобекграунд мож?
          Ответить
          • Што? Я про авторов языка. У пыхомакак вообще можно массив юзать?
            Ответить
            • При чём здесь массив?

              Здесь говно в том, что пэхапэшный модуль imap использует дерьмовую библиотеку imap-2007f, которая за каким-то хреном для установления соединения вызывает бинарник rsh или ssh. Это примерно как system("pause"); в сишной лабе.

              Вот тут всё по-русски расписано:
              https://antichat.com/threads/463395/#post-4254681
              Ответить
              • И вызывает его именно одной строкой через system() а не массивом аргументов?
                Ответить
                • А пыхари вообще могут массив передавать?
                  Ответить
                  • Нет, в «PHP» вообще массивов нет, поэтому приходится создавать переменные $x1, $x2, $x3, $x100500...

                    А если серьёзно, то почему нет? Передавать можно всё, что поддерживается языком: целых питухов, плавающих питухов, булевых питухов, строки, ассоциативные массивы, объекты, ресурсы, NULL и даже замыкания (колбек-функции). Причём язык принципиально динамический и даже существуют функции, которые могут принять аргумент любого типа, а на входе узнать тип и решить, что с ним делать.
                    Ответить
                    • В вызов программы, довен.
                      Ответить
                      • Ну так в данном примере вызов происходит не в «PHP», а в сторонней сишной библиотеке imap-2007f. Именно в ней и всё говно.

                        Что же касается самого «PHP», то system, exec, popen, proc_open принимают строку, а pcntl_exec принимает массив аргументов.
                        Ответить
                        • Она сишная?

                          >pcntl_exec
                          Ну хоть что-то, но название хуй запомнишь. Я так понимаю, что большинство ее не пользует?
                          Ответить
                          • Да, UW IMAP –— сишная библиотека:
                            https://en.wikipedia.org/wiki/UW_IMAP

                            Одна из трёх самых популярных (другие две –— Cyrus IMAP и Courier IMAP).

                            В 2008-м году её перестали разрабатывать и Debian её задепрекейтил.

                            Однако, один из авторов злополучной библиотеки UW IMAP выпустил форк под названием Panda IMAP.

                            >> Я так понимаю, что большинство ее не пользует?

                            Ага, обычно используют другие функции, которые тупо принимают строку. Но из пэхапэшных скриптов вообще редко вызывают внешние программы. Хотя sendmail, например, вызывают, чтобы отправить письмо со ссылкой для активации профиля на форуме.
                            Ответить
                          • Оказывается, в университете Вашингтона помимо библиотеки «UW IMAP» выпустили одноимённый сервер. Гуглёжкой обнаруживается много нехорошего:
                            https://www.google.com/search?q=UW+IMAP+vulnerability
                            Ответить
                • Под капотом той самой imap-2007f вызов execv (path,argv). Находится он внутри функции tcp_aopen (NETMBX *mb,char *service,char *usrbuf), которая парсит строковый аргумент service с помощью strtok_r в массив argv.
                  Ответить
                  • >> Аргументы парсятся по пробелам, а флаги по слешам. Нам нужно обойти оба.
                    >> Пробелы обходим с помощью $IFS$(), а слеши с помощью echo base64decodedstring==|base64 -d| bash

                    Это как раз, чтобы обмануть самодельный парсинг внутри imap-2007f.
                    Ответить
                    • Кстати, про библиотеку:
                      /* ========================================================================
                       * Copyright 1988-2007 University of Washington
                       *
                       * Licensed under the Apache License, Version 2.0 (the "License");
                       * you may not use this file except in compliance with the License.
                       * You may obtain a copy of the License at
                       *
                       *     http://www.apache.org/licenses/LICENSE-2.0
                       *
                       * 
                       * ========================================================================
                       */
                      
                      			   IMAP Toolkit Environment
                      			         4 April 2007
                      				 Mark Crispin


                      Открываем произвольный makefile, а там:
                      # Program:	IMAP Toolkit Makefile
                      #
                      # Author:	Mark Crispin
                      #		UW Technology
                      #		Seattle, WA  98195
                      #		Internet: [email protected]
                      #
                      # Date:		7 December 1989
                      # Last Edited:	12 May 2008


                      Верните мне мой 1987-й!
                      Ответить
                      • Имап в 87 был?
                        Ответить
                        • IMAP4 появился в 1994:
                          https://tools.ietf.org/html/rfc1730

                          IMAP2 –— в 1988:
                          https://tools.ietf.org/html/rfc1064

                          Именно поэтому я за 1987.
                          Ответить
                  • >argv
                    Ну! И где они обосрались?
                    Ответить
                    • Возможно, ответ в Античате где-то после строчки «Сломаем-ка PrestaShop для примера».
                      Ответить
                      • Я чот нихуя не понял кто обосрался, ковырять дальше лень.
                        Ответить
                        • обосрались имап и пхп
                          Ответить
                          • Имап-то в чем? И в чем рнр? Там таки есть возможность при вызове передавать массив?

                            А обосралось по-моему прыщеговно, которое нельзя запустить и быть уверенным что тебя не сломают.
                            Ответить
                            • Написал выше: пэхапэшная функция pcntl_exec принимает массив аргументов.

                              Только кокококонкретно в этом примере пэхапэшные функции вообще никак не используются. Всё говно полностью в сишной библиотеке imap. Если ты её подключишь из другого ЯП, то получишь точно такой же багор.
                              Ответить
                              • В других ЯП такого говна нету. Питоновские встроенные сетевые библиотеки хоть и говнище ебаное, но хоть без уязвимостей.
                                Ответить
                                • >> В других ЯП такого говна нету.

                                  https://en.wikipedia.org/wiki/UW_IMAP

                                  As of 2003, UW IMAP was among the three most popular free software IMAP server packages, the other two being Cyrus IMAP and Courier IMAP.[11][12][13] As of 2005, by which point its codebase had undergone extensive rewriting,[6] it was among the top two, the other being Cyrus IMAP.[14][15]

                                  In May 2008, the University of Washington terminated development of UW IMAP.[2]

                                  On 4 August 2008, staff at the University of Washington who had been involved in developing UW IMAP, Pine, and Alpine,[citation needed] announced that they would "shift our effort from direct development into more of a consultation and coordination role to help integrate contributions from the community,"[16] in the wake of layoffs at the University of Washington's technology division.[17]

                                  c. January - August 2009, the maintainers of Debian GNU/Linux, a major downstream distributor of UW IMAP, began to retire their UW IMAP packages.[18][19]

                                  In September 2009,[citation needed] Mark Crispin, the principal author of UW IMAP, announced a fork called Panda IMAP.[2] Crispin passed away in late 2012.[20]

                                  At least one UW IMAP enthusiast maintains a public source code repository containing the UW IMAP and Panda IMAP commit history from the start of the project until Crispin's final release.[21]
                                  Ответить
                                • Кстати, посмотрел питоновский imaplib.py.

                                  Угадайте, что делает код:
                                  self.process = subprocess.Popen(self.command,
                                              bufsize=DEFAULT_BUFFER_SIZE,
                                              stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                              shell=True, close_fds=True)
                                  Ответить
                                  • В общем, у питоновской библиотеки два варианта использования:
                                    if stream_command:
                                                M = IMAP4_stream(stream_command)
                                            else:
                                                M = IMAP4(host)


                                    IMAP4(host) устанавливает соединение через сокет, а IMAP4_stream(stream_command) –— через запуск внешней программы.
                                    Ответить
                                  • Popen хоть список параметров умеет. А зачем shell=True?
                                    Ответить
                                    • Чтобы оставить бэкдор. Ну чтобы можно было подсунуть $IFS$(), как в примере для пыха.

                                      The shell argument (which defaults to False) specifies whether to use the shell as the program to execute. If shell is True, it is recommended to pass args as a string rather than as a sequence.

                                      On Unix with shell=True, the shell defaults to /bin/sh. If args is a string, the string specifies the command to execute through the shell. This means that the string must be formatted exactly as it would be when typed at the shell prompt. This includes, for example, quoting or backslash escaping filenames with spaces in them. If args is a sequence, the first item specifies the command string, and any additional items will be treated as additional arguments to the shell itself. That is to say, Popen does the equivalent of:

                                      Popen(['/bin/sh', '-c', args[0], args[1], ...])

                                      On Windows with shell=True, the COMSPEC environment variable specifies the default shell. The only time you need to specify shell=True on Windows is when the command you wish to execute is built into the shell (e.g. dir or copy). You do not need shell=True to run a batch file or console-based executable.

                                      Warning

                                      Passing shell=True can be a security hazard if combined with untrusted input.

                                      https://docs.python.org/2/library/subprocess.html#subprocess.Popen
                                      https://docs.python.org/3/library/subprocess.html#subprocess.Popen
                                      Ответить
                                      • >COMSPEC environment variable specifies the default shell.

                                        можно подумать есть мастдайка у которой комсек не равен cmd.exe
                                        Ответить
                                        • Раньше в DOS некоторые использовали 4dos или ndos (клон 4dos из Norton Utilities).

                                          https://ru.wikipedia.org/wiki/4DOS

                                          Ну и на всякий случай, чтобы путь узнать, вдруг у тебя мастдайка на диск D: установлена.
                                          Ответить
                                          • хочу чтобы меня тоже звали Лучезар Георгиев
                                            Ответить
                                            • Я видел книжку, одним из соавторов которой был Светозар Разбойников.
                                              Ответить
                                              • Болгары смешные:)

                                                Но они изобрели шрифт Terminus!
                                                Ответить
                                                • Я надеялся, что такое сочетание более распространено:
                                                  https://www.google.com/search?tbm=isch&q="светозар+разбойников"
                                                  Ответить
                                          • это ты:
                                            https://ic.pics.livejournal.com/protyv_vsih/25757819/38942/38942_600.jpg
                                            Ответить
                                            • Мне очень нравятся русские парни.
                                              Ответить
                                              • а сдохнеш ты от разрыва прямой кишки после ебли с камерунцем
                                                Ответить
                                                • Я не буду ебаться с камерунцами.

                                                  1. С моей зарплатой (а точнее с ее полным отсутствием!) я никогда не накоплю на билет;

                                                  2. В медшараге учатся камерунцы - живут в общаге, но я с ними не буду, ибо в общагу посторонних не пускают;
                                                  3. мне не нравятся чернокожие (скорее даже отвращение вызывают). Я конечно не ку-клукс-клан, но бля. Зачем ебаться с теми, кто тебе не по душе, когда можно выбрать любого другого? Что за принуждение?
                                                  Ответить
                                                  • >в общагу посторонних не пускают;
                                                    Рашкапроблемки
                                                    Ответить
                              • Замечу, что в "уязвимостях" нету "уязвимостей". Именно поэтому я за " уязвимости".
                                Ответить
                              • Кстати, есть смешное.

                                в позиксе execve получает char *const argv[]
                                так что понятие "аргументы" там как-бы встроенное

                                А CreateProcess в винде получает command line:)
                                Ответить
                                • >command line
                                  Который потом функцией winapi преобразовывается в массив.
                                  Ответить
                                  • нет
                                    Ответить
                                    • Есть функция винапи которая преоьразовает строку в массив, если уж приебаться захотелось.
                                      Ответить
                        • Обосрался тот, кто использует сторонние библиотеки, не разбираясь в них.

                          Говно в том, что библиотека imap для установления соединения вызывает внешнюю программу, а у неё есть ключик -oProxyCommand, который в свою очередь может запустить произвольную внешнюю программу.

                          Чтобы запудрить мозги библиотеке imap (чтобы она сразу не смогла разделить параметры по пробелам), вместо пробела воткнули $IFS$(). Оболочка (sh/bash) эту конструкцию заменит на пробел и цель злоумышленника будет достигнута.

                          Кстати, нужно искать, в каком ещё ПО используется эта самая библиотека imap-2007. Может ещё где-то бомбануть.
                          Ответить
                          • >Говно в том, что библиотека imap для установления соединения вызывает внешнюю программу,

                            Все. Вот это и есть говно, треш, пиздец, хуйня и отстой.
                            Ответить
                            • Unix-way
                              Ответить
                              • юниксвей это если ты из скрипта запускаешь внешнюю утилиту

                                а из бинаря надо запускаться через либу
                                Ответить
                                • ЯННП
                                  Ответить
                                  • /bin/pituh
                                    /include/pituh.h
                                    /lib/libpituh.so
                                    
                                    ## petushok.sh:
                                    #!/bin/sh
                                    /bin/pituh --pitushok # ok
                                    
                                    ## petushok.c
                                    #include <pituh.c>
                                    ptx_pituh(PETUSHOK); //ok
                                    // но никак не system("petuh") !!


                                    так понятнее?
                                    Ответить
                          • >а у неё есть ключик -oProxyCommand, который в свою очередь может запустить произвольную внешнюю программу.
                            Прыщеговно невозможно безопасно запустить.
                            Ответить
                            • Прыщи не безопасны, именно потому я за "OpenBSD".

                              Water chicken stealing maps
                              Mistaken us for foes
                              Ответить
                              • А разве это не сорта прыщеговна?
                                Ответить
                                • Конечно же нет.

                                  Сёма говорит что прыщи это Линукс
                                  Ответить
                                  • Так ведь в обоих случаях трико: консоль, конфиги, компиляция.

                                    В чём тогда разница?
                                    Ответить
                                    • В винде тоже есть консоль (кстати, в OpenBSD можно вообще консоль не трогать в отличие от виндопрогарммирования потому что в *nix можно сидеть в псевдотерминале, а в винде это всё равно будет консоль)
                                      И конечно же в винде есть конфиги
                                      Ответить
                                      • Тогда получается, что в винде компиляции нет. Именно поэтому я за винду.
                                        Ответить
                                        • а что делает вижал си?
                                          Ответить
                                          • Не знаю. Я просто запускаю «Сапёра» и теку.
                                            Ответить
                                            • в дебиановых прыщах тоже есть самер
                                              g: apt debian play minesweeper
                                              Ответить
                                              • Тогда получается, что между системами вообще разницы нет?
                                                Ответить
                                                • есть

                                                  в MS-DOS нету майнсвиппера
                                                  Ответить
                                                  • У меня был майнсвиппер для DOS на каком-то диске. Но вообще да, из коробки нет.

                                                    А если серьёзно, то как нубу объяснить разницу между системами? Или вообще как объяснить, зачем нужна ОС?
                                                    Ответить
                                                    • ОС это самая важная программа которая представляет платформу для запуска других программ.

                                                      Программы обращаются к ОС, а уже та управляет компьютером
                                                      Ответить
                                  • Прыщи это и весь бесплатный опенсорс.
                                    Ответить
                                    • в таком случае макос это тоже полупрыщи
                                      там дарвин внутри
                                      Ответить
                                      • Но ведь Макось любят за проприетарную часть и за гуй, а не за опенсорсную чёрную консоль.
                                        Ответить
                                        • терминал, ты хотел сказать?
                                          в сосноли там только сообщения обо шипках
                                          Ответить
                                          • пошёл нахуй отсюда со своей консалью, сука
                                            заебал!
                                            Ответить
                                          • Какая разница? Чёрное окошко –— это прыщи!
                                            Ответить
                                            • у xterm по-умолчанию белое окошко
                                              Ответить
                                              • Придётся всё-таки дождаться Сёму, чтобы узнать, что такое прыщи и прыщеговно.
                                                Ответить
                                • Верно
                                  Ответить
              • Я собрал небольшую статистику по серверам, и вот что вышло (по баннерам web-сервера):
                Ubuntu - 2743
                Windows Server - 1254
                Debian - 909
                CentOS - 821
                UNIX - 306
                Gentoo - 150
                FreeBSD - 103
                ---
                Кто соснул?
                Ответить

    Добавить комментарий