В процессе реализации кое какого концепта и наличия свободного времени, появилась мысль немного поговнокодить доработать один из гуёвых олдскульных веб-шеллов. Цель, решение проблем с детектами различными WAF/IDS, как реквестов, так и респонсов. В большинстве случаев, такое обнаружение влечёт за собой ответные меры от атакуемой стороны, что при пентестах и редтиминге не всегда позволительно и допустимо. WSO2 морально устарел и требует значительных доработок. b374k какой-то ненашенский и, как мне показалось, с большим оверхедом по функционалу. А вот нашумевший в своё время P.A.S., по своей задумке и устройству, очень даже подошёл. Хотя автор и прекратил поддержку своего продукта, но выпускать модификацию с дальнейшим порядковым номером, я не решился (не по Сеньке шапка). Поэтому, выражаю глубочайшее уважение @profexer и надеюсь, что он когда-нибудь продолжит свою замечательную работу. Форкалась версия 4.1.1b, исходники были взяты из репозитория @winstrool, за что ему спасибо Spoiler: Что умеет оригинал General Works on PHP >= 4.1.0 Doesn't use PHP sessions or store any data on a server Uses asynchronous requests like a AJAX Can use POST or GET request method Can obfuscate requests Can work in custom environment (aka SUID mode) Supports 22 different charsets Encrypts the source code with your key (password) at download Resulting file doesn't contain encryption key (password) in any form Has stealth mode Working with different tasks without reload page and losing data Can be switched from fixed to flexible view Keyboard-only compatibility Has message log Shows server time File Manager Can upload several files at once Can create file, directory, symbolic and hard link Can change files properties (path, modified date, permission, owner, group) Can download files Can delete files Has files buffer: mark, unmark, show marked files; copy, move files from buffer to the current dir; download files from buffer; clear buffer; Can search files: in several paths; with limited depth; by name with wildcard and case-sensitive options; by type (file, directory); by mode (readable, writable, full access); with SUID attribute; by owner IDs with definition of intervals; by group IDs with definition of intervals; by created date with definition of intervals; by modified date with definition of intervals; by size with definition of intervals; by specified text with regex and case-sensitive options; Can save file with specified end of line Fast change properties, download and delete specified file Has breadcrumbs Click on extension cell to copy file name Press ESC to close current dialog Press Alt+T to switch between opened dialogs SQL Client DB support: MySQL (mysql, mysqli, PDO) MSSQL (mssql, sqlsrv, PDO, PDO SQLSRV, PDO DBLIB, PDO ODBC) PgSQL (pg, PDO) Tree view of database schema Shows column data types Can show only selected columns data Can show tables row count Can reload single base/scheme/table schema Can dump multiple tables/schemes/bases Can dump only selected schemes/tables/columns Can dump to SQL or CSV format Has pagination for some database types PHP Console Isolates the results HTML code from the main page Can be switched from vertical to horizontal composition Press Ctrl+Enter to evaluate code Terminal Can execute commands via specified command processor Can execute commands via specified function Type ? to show help Has command history: type history [N] to show command history, where optional parameter N is number of last commands; press Up & Down keys to navigate from command history; type ![N] to execute command, where N is: ! to execute the last command; N>0 to execute command #N from the command histroy; N<0 to execute command #N from the end of the previous command; Can create system report (type report ? to more info) Can run Socks5 server: throught Perl (type socks5.perl to more info); throught Python (type socks5.python to more info); Can bind port: throught Perl (type bindport.perl to more info); throught Python (type bindport.python to more info); Can back connect: throught Perl (type backconnect.perl to more info); throught Python (type backconnect.python to more info); Type cls or clear or press CTRL+L to clear output Information Shows main server information Shows PHP configuration without call phpinfo В P.A.S. Fork добавлено/изменено: Работа GET запросами (параметры в куках) Переход в POST с возможностью отказаться Обфускация ключей и значений запроса Обфускация загружаемых файлов Обфускация ответа от сервера Авторизация по паролю Авторизация по заголовку Фикс дампа MySQL в режиме PDO Переименованы "конструкторы в стиле PHP 4" Выпилен pcntl_exec opcache_invalidate после сохранения файла Тёмный цветовой режим Встроенный редактор кода Ace (загружается по запросу) Добавлены расширения в именах файлов Опция для отображения ctime Опция для инвертирования вывода в терминале Выпилены системные вызовы при старте скрипта Фикс краша JS в файловом менеджере (на редких окружениях) Фикс бага при перезагрузке файла XHR вместо IFRAME для коммуникации по умолчанию Клиентский реферер не отправляется Удален заголовок X-Content-Type-Options в ответах Clear output в PHP Console отмечен по умолчанию Возможность установить вкладку по умолчанию Встроенный скрипт safemode Сортировка файлов (имя, расширение, размер и т.д.) Чтение файлов .gz (без сохранения) Исправление Show as HTML в PHP Console Увеличение окна редактора файлов по двойному щелчку Восстановление положения окна при уменьшении Интервал перезагрузки файла (правый клик) Загружать favicon.ico, если он существует Выпилен expect Сортировка по имени файла по умолчанию Подсветка синтаксиса в консоли PHP Уменьшение промпта терминала, если слишком длинное Go! перемещена влево Фикс PDO_PGSQL DSN Поддерживаемые версии PHP: 5 >= 5.1.2, PHP 7, PHP 8 Spoiler: Скриншоты Spoiler: Пример запроса 'ls -la;cat /etc/passwd' Spoiler: Тёмный цветовой режим Spoiler: Редактор кода Spoiler: Решение проблем Скрипт не работает и продолжает возвращать один и тот же ответ. Возможно, на сервере включено кеширование GET запросов. Решение - отключить передачу параметров через куки и использовать POST запросы ($GLOBALS['COOKIE'] = false;). Повторяющиеся случайно запросы пароля. Скорее всего, ваш IP адрес меняется с той же периодичностью. Если это так, нужно изменить $GLOBALS['REMOTE_ADDR'] на false. Как убрать предупреждение о лимите запроса? Вы должны отключить передачу данных через куки в графическом интерфейсе. Или так: $GLOBALS['COOKIE'] = false;. Большие файлы не скачиваются. Операция заворачивания файлов происходит на лету, поэтому требуется много оперативной памяти. Решение - отключить обфускацию, установив флажок "Skip response encoding" в графическом интерфейсе. Как установить авторизацию по заголовку? $GLOBALS['SECHEAD'] = 'SECRET_9CA2100C44E50D81BB7E3EED84AF43F4'; и добавляйте его для каждого запроса в браузере (Secret-9ca2100c44e50d81bb7e3eed84af43f4: foobar). Без запроса пароля - $GLOBALS['PASSHASH'] = ''; Переключение цветовой темы раздражает. $GLOBALS['DARK'] = true; Как настроить редактор кода? Вы можете разместить исходный код редактора на своем хосте и указать URL. MODE и THEME используются для установки значений по умолчанию во время инициализации редактора. Чтобы полностью исключить редактор, установите для переменной $GLOBALS['ACECONF'] значение array(). Установите DEFAULT в true, если вы хотите, чтобы редактор загружался автоматически. Элементы пользовательского интерфейса слишком малы. Ctrl и + для увеличения / Ctrl и - для уменьшения / Ctrl + 0 для сброса Как убрать запрос пароля? $GLOBALS['PASSHASH'] = ''; Как изменить вкладку по умолчанию? У вас есть 5 вариантов: tabFM, tabSQL, tabPHP, tabTrm, tabInf. Например: $GLOBALS['DEFAULT_TAB'] = 'tabFM';, чтобы запустить скрипт с вкладки File Manager. Send as и Load as кодировки не работают. В настоящее время для функциональности вам следует отключить обфускацию запросов и ответов в графическом интерфейсе. Репозиторий на GitHub Перед использованием, будет не лишним вычистить все HttpOnly куки для домена, если таковые имеются. Этот инструмент предназначен только для образовательных и тестовых целей и не предназначен для применения на практике, если у вас нет разрешённого доступа к системе. This tool is for educational and testing purposes only and is not intended to be put into practise unless you have authorised access to the system. Скачать
Тут оказывается, месяц назад, обзор подъехал от зарубежного коллеги: https://blog.sucuri.net/2020/10/p-a-s-fork-v-1-0-a-web-shell-revival.html Не все фишки заценили, но я рад, что им понравилось. В то же время очень жаль, что повод для этого обзора был печальный, так как инструмент обнаружили на скомпрометированном сайте, а это полностью противоречит условиям использования. Поэтому, хочу ещё раз напомнить, что этот скрипт предназначен только для легальных тестов на проникновение!
Осталось двойственное впечатление от статьи в бложике. Вроде бы ресерчили, вроде бы описали подробно, вроде бы работа в плюс. Но исходный код шелла выложен, пакер тоже был выложен, чего пытались найти? Автора доработок назвали "злоумышленником". ??? О чем это? Скорее всего вот о чем: "Мы крутые спецы и у нас есть платный продукт, пройдите по ссылке и обязательно его купите, интернет полон злоумышленников, но вам не нужно думать и включать мозги, просто купите нашу поделку". По факту, они дважды проиграли КРЛФу. И это при условии, что он даже не включался в их игру. Во-первых, их работа выглядит, как потуги на ровном месте, а CRLF просто решал очередную (и не очень крупную) задачку, мимоходом, пришла мысль отрихтовать бывший хороший инструмент - сделал. И поделился с сообществом. Как спецы они выглядят слабее. Во-вторых, с моральной точки зрения они тоже выглядят хуже, хотя и пытались присвоить себе право судить других. Проигнорить их попытку опустить исследователя ниже себя - было правильным, они провалились от собственного действия. Да, есть этическая проблема, твой продукт могут использовать и для причинения ущерба. Но такая же дилемма стояла и перед создателями алфавита, разные слова можно написать при помощи букв, но злоумышленниками их мы не называем, не опускаемся до дебильного восприятия и оценок. На форуме много материала, который можно использовать для нанесения ущерба стороннему ресурсу. Но совсем не факт, что именно так он и используется всеми. И знаю совершенно точно, что много находок сделано исследователями, которые определенно не блечат. А доработка выложена автором в разделе "Этичный хакинг", а не в "Давай сломаем интернет".
Обновлён упаковщик - packer.php. Добавлены различные варианты рандомизации генерируемого кода. Теперь в наличии четыре режима: ASCII // create_function ASCII PHP8 // eval PHAR // include + phar:// + PHAR контейнер ZIP // include + phar:// + ZIP контейнер У каждого варианта есть свои плюсы и минусы. Для использования требуется установленное расширение php-zip.
Добавлены следующие изменения: Опция для инвертирования вывода в терминале Выпилены системные вызовы при старте скрипта Фикс краша JS в файловом менеджере (на редких окружениях) Спасибо всем тем, кто слал баг-репорты и помогал отлавливать
Версия 1.1 содержит следующие изменения: Встроенный редактор кода Ace (загружается по запросу) Добавлены расширения в именах файлов Фикс бага при перезагрузке файла XHR вместо IFRAME для коммуникации по умолчанию Клиентский реферер не отправляется Удален заголовок X-Content-Type-Options в ответах Clear output в PHP Console отмечен по умолчанию Добавлена опция iframe instead of xhr в графическом интерфейсе Добавлена опция Use cookie to request в графическом интерфейсе Invert terminal output перемещён на вкладку Terminal Мелкие декоративные изменения В packer.php добавлено: eval() по умолчанию Несжатый ZIP Сжатый PHAR Мелкие улучшения рандомизации Архив с файлами привычно в аттаче, а изменения можно посмотреть в репозитории инструмента.
Прикольная штука, давно таким не пользовался, наверное даже не актуально такое сейчас, но штука все равно приятная, качественно сделано. Один только момент есть, нехватает ему Дроппера чтоб он работал по принципу stager и загружал себя кусками, тогда можно было бы сильно сократить код, возможно даже до одной функции которую можно было бы прятать в коде жертвы.
Ага, всё чаще, от кейса к кейсу. Тут же, сам понимаешь, без претензий на универсальность, лишь небольшая попытка продлить жизнь хорошему инструменту. В текущем варианте помогает проскочить через многочисленные заслоны различных детекторов. А ещё им удобно пользоваться на своих впсках, что-то подредачить, загрузить, удалить. Сам всякий раз диву даюсь, как хорошо @profexer его запилил. И всячески пытаюсь не влезать в тщательно выверенный код, на который, по моим прикидкам, потрачен не один десяток человеко-часов. Но, к сожалению, не всегда получается К примеру, редактор кода с подсветкой, пришлось костыльно вкорячивать прямо в DOM, чтоб ничего не сломать В таком варианте проще написать с нуля и придётся отказываться от многих плюх, типа передачи параметров в заголовках, а заодно собрать огромную кучу подводных камней. Простейший принцип агентов хорошо изучен и обкатан, можно юзать тот же weevely. Но чтоб с гуём, красиво, да ещё универсально, слишком сложно и затратно.
В версию 1.2 добавлено: Возможность установить вкладку по умолчанию Встроенный скрипт safemode Сортировка файлов (имя, расширение, размер и т.д.) Чтение файлов .gz (без сохранения) Исправление Show as HTML в PHP Console Увеличение окна редактора файлов по двойному щелчку Выпилен expect Сортировка по имени файла по умолчанию Улучшена обфускация JS Возможность загрузки AceJS по умолчанию Ctrl + S, чтобы сохранить файл в редакторе кода Ctrl + E, чтобы изменить перенос строки Подсказка по горячим клавишам редактора Небольшие исправления ошибок и улучшения Архив с файлами привычно в аттаче, а изменения можно посмотреть в репозитории инструмента.
Небольшие изменения в версии 1.3: Восстановление положения окна при уменьшении Интервал для перезагрузки файла (правый клик) Загружать дефолтный favicon.ico, если он существует Мелкие исправления ошибок и улучшения
Изменения в 1.4: (!) Редактор кода загружается по умолчанию tabFM установлен по умолчанию Подсветка синтаксиса в консоли PHP Уменьшение промпта терминала, если слишком длинное Go! перемещена влево Фикс PDO_PGSQL DSN Ссылка на скачивание в первом посте.
Скажите пожалуйста, в каких случаях, вкладка Terminal не является активной? Заметил, что на некоторых серверах её просто нет.
В тех случаях, когда отключены необходимые функции, на стороне сервера, которые могут интерпретировать терминал.