"PHP" / Говнокод #25431 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Arris, (Updated )

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

    • >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, например, вызывают, чтобы отправить письмо со ссылкой для активации профиля на форуме.
                          Ответить
                          • Догадываюсь я, чем занимаются студенты в общаге. Селить парней с парнями - плохая идея.
                            Ответить
              • Под капотом той самой 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: MRC@Washington.EDU
                    #
                    # Date:		7 December 1989
                    # Last Edited:	12 May 2008


                    Верните мне мой 1987-й!
                    Ответить
                  • Возможно, ответ в Античате где-то после строчки «Сломаем-ка 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: установлена.
                                        Ответить
                                        • хочу чтобы меня тоже звали Лучезар Георгиев
                                          Ответить
                                            • а сдохнеш ты от разрыва прямой кишки после ебли с камерунцем
                                              Ответить
                                              • Я не буду ебаться с камерунцами.

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

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

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

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

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

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

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

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

                              а из бинаря надо запускаться через либу
                              Ответить
                                • /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
                                            Ответить
                                                • У меня был майнсвиппер для DOS на каком-то диске. Но вообще да, из коробки нет.

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

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

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8